Skip to Content

XS Advanced, Use SQLScript in Calculation Views

0 %
XS Advanced, Use SQLScript in Calculation Views

XS Advanced, Use SQLScript in Calculation Views

January 5, 2021
Created by
September 14, 2018
Create a Table Function and wrap it in a Graphical Calculation View

You will learn

  • How to implement more complex logics using SQLScript in Table Functions
  • How to incorporate Table Functions in Graphical Calculation views
  • Create a replacement to the former Scripted Views in previous versions of SAP HANA
  • Apply the DENSE_RANK function, to establish the ranking of a row relative to a partition of a dataset
QR code


This tutorial assumes general knowledge of the modeling tool has been acquired through completion of the beginner and intermediate tutorials about calculation views.

Step 1: Create a function

In your db/src folder, create a new folder called functions.

Create folder

Create a function called SO_RANKING


A template is created for you with different sections


Remove the placeholder for the namespace. Paste the following code into the input section:


Add the following as a returning table:

                  REGION NVARCHAR(4),
                  SALES DECIMAL(18,2),
                  ORDERS INTEGER,
                  SALES_RANK INTEGER,
                  ORDER_RANK INTEGER  )  

Add the following code between BEGIN and END:

return SELECT company_name, region, sales, orders, sales_rank, order_rank from( select T2."COMPANYNAME" as COMPANY_NAME, T3."REGION" as REGION, sum(T1."NETAMOUNT") as SALES, count(T0."SALESORDERID") as ORDERS, dense_rank() over ( order by sum(T1."NETAMOUNT") desc ) as sales_rank, dense_rank() over ( order by count(T0."SALESORDERID") desc ) as order_rank from "SO.Header" T0 inner join "SO.Item" T1 on T0."SALESORDERID" = T1."HEADER.SALESORDERID" inner join "MD.BusinessPartner" T2 on T0."PARTNER.PARTNERID" = T2."PARTNERID" inner join "MD.Addresses" T3 on T2."ADDRESSES.ADDRESSID" = T3."ADDRESSID" where TO_DATE(T1."DELIVERYDATE") between :IP_FR_DATE and :IP_TO_DATE and T3."REGION" = :IP_REGION group by T2."COMPANYNAME", T3."REGION" order by sales_rank, T2."COMPANYNAME" ) where sales_rank < 11;

Save and build the function. This is what it should look like


For more information about DENSE_RANK() and other function modules, visit the SAP HANA and System Views Reference

Log on to answer question
Step 2: Test the function

You can test the function using the SQL console. Go into the database explorer and locate the function within your HDI container. Right-click on it and choose Generate Select Statement.


Use dates from 2014-12-01 to 2014-12-05 and region EMEA as parameters to complete the validation below. How many orders were sold by the company ranking number 1 in sales?

Step 3: Create a Calculation View

In the src/models folder, create a Calculation View of type dimension

Calculation View

Add your table function to the projection node

Calculation View

In the projection node, add all the columns to the output

Calculation View
Log on to answer question
Step 4: Map parameters

Go to the parameters tab and click on manage parameter mapping

Calculation View

Choose the Auto Map button to automatically map the parameters to the columns in your calculation view

Calculation View

Save and Build your view.

#What are the different types of views for?
- Empty type: The view of type default or empty, is not exposed to BI tools and is free-form.
- Cube: measures, aggregations. Exposed to BI Tools (generates BI Metadata)
- Cube with star Join: Join fact data with dimension type calculation view. For example, join transactional data containing prices and discounts (facts) with data that helps to organize those facts, such as master data (customers, product categories) or time dimensions (quarters, years).
- Dimension: No measures, no aggregations and no exposure to BI tools.

Log on to answer question
Step 5: Test the Calculation View

Right-click on the calculation view and choose data preview. Fill the parameters as follows and click Run

Calculation View

The results are displayed and the rank functionality becomes obvious. Copy and paste the SQL statement in the validation below to complete it:


Next Steps

Back to top