Skip to Content
Technical Articles
Author's profile photo Narasingha Prasad Patro

Dynamic Join in SAP HANA. Clear Explanation.

Hello All,

I am writing this blog post about Dynamic Joins in HANA. I found some blogs on Dynamic Join in HANA but they are confusing and did not give clear understanding what is exactly happening when we select Join as Inner join and then we make Dynamic Join as True.

As of now just see the Picture

 

Definition –

Whenever a join is defined as dynamic, then the modeler dynamically defines the join condition columns based on the columns requested by Dynamic joins improves the join execution process and helps reduce the number of records that join node process at run-time. Dynamic joins reduce the number of records processed by the join view node at run-time, which helps improve the join execution process.

Dynamic Joins VS Static Join

Dynamic Joins Static Join 
The join condition changes with fields requested in query. The query gives run-time error if the client query to the join doesn’t request a join column. The join condition doesn’t change with fields requested in query.
Dynamic join enforces aggregation before executing the join. This means that, if a join column is not requested by the client query, its value is first aggregated, and later the join condition is executed based on columns requested in the client query. Static joins the aggregation happens after the join.

Prerequisite

At least one of the fields involved in the join condition is part of the client query. If you define a join as dynamic, the engine dynamically defines the join fields based on the fields requested by the client query. But, if the field is not part of the client query, it results in query run-time error. We can use dynamic join when we have a composite join(More than one field in join condition).

Business Scenario –

We have Global system in HANA where we have multiple region.e.g-APAC ,EMEA, LAO and NA.
We have a requirement where we have to generate a report which will give the revenue numbers as per region,company and product . But the business does not want multiple HANA VDM created for this.

In the below steps we will be creating one single VDM where we will use the dynamic join to accomplish business requirement which is to show the gross revenue and revenue ratio of the product across the region.
We basically do 2 type of reporting for the same query.
1-Revenue ratio based on Region, Product and Company
2- Revenue ratio only based on Product and Company
If we take static join the Gross Revenue doesn’t show correct value.
The below example is part of my experience working with HANA in my current assignment.
Let us go to the demo here. The above scenario you can find in mant blog posts but none of the blogs describes what ia happening in the back ground.
so Let us see :
First create a table
Create Table “SYS_BIC.”REVENUE_MARKET”( “REGION” VARCHAR(10), “PRODUCT” VARCHAR(15),”COMPANY” VARCHAR(10),”SALES” INT);
Below is table created and below is the data.
Now let us go and see the CV I created :-
The same table is used in 2 aggregation Node.
Now let us go and see what is there in Aggregation_1
we can do a data preview and drag and drop dimensions as per our choice and can see how the data is aggregated for SALES  based on dimensions we select.
Now let us go to Aggregation_2 node and see what I have done there :-
Now on Aggregation_2 node you can see the Sales I meant GROSS_REVENUE column is populated based in Region and Product.
Now let us join these 2 aggregation Nodes on Product and Region.
Now let us see the data for what we have in our base tables and what data is present for
Sales ( which I renamed to Revenue and GROSS_REVENUE based on selected Columns) and we also calculated a column called REVENUE_RATIO we will see it’s data also we select join as Inner and Dynamic Join as False.
Please see the revenue_ratio. Even if the column is not requested in the select query by the client still the join is applied on region which is causing the gross revenue and revenue ratio column to appear incorrect. The gross revenue need to be constant across companies that is it must sum based on product and must be constant for all companies which is not happening here! Hope you got the issue here. 🙂
Now we will apply the dynamic join as True and we will see the results
See the result :
In this way by using “dynamic join” we can achieve the required result. Now we can report the Gross Revenue across the region e.g ( APAC and EMEA).
Think of a scenario where you are creating a SAP Analytics cloud story by doing a live connection to a single VDM i.e, a Single CV and the end user may drag Region column to the report along with product and company or may be they want to view the data across companies for all regions. In those scenario you can implement dynamic join.
Expect this blog post helped you to understand on Dynamic join implementation with clear steps mentioned.
Regards,
Narasingha Prasad Patro.
SAP HANA XSA Developer

Assigned Tags

      6 Comments
      You must be Logged on to comment or reply to a post.
      Author's profile photo Gopinath V5
      Gopinath V5

      Very well articulated and a good go to guide

      Author's profile photo Narasingha Prasad Patro
      Narasingha Prasad Patro
      Blog Post Author

      Thank You Gopinath Sir.

      Author's profile photo Jakob Flaman
      Jakob Flaman

      Thx for sharing!

      Author's profile photo Amit Pathak
      Amit Pathak

      Very nicely articulated.

      Well, is it possible for you to provide this information for HANA SQL scripted views as well....would be looking forward for the same.

      Thanks

      Author's profile photo Narasingha Prasad Patro
      Narasingha Prasad Patro
      Blog Post Author

      Sure I will do that.

      Author's profile photo Narasingha Prasad Patro
      Narasingha Prasad Patro
      Blog Post Author

      Amit there are many blogs on scripted HANA CVs. They are clear and understandable. I only create blog posts which are not clear and when we encounter an error while following that blog. Also scripted CVs are obsolete and we have table function and table function node available. You can read them. They are quite clear.