Do not input private or sensitive data. View Qlik Privacy & Cookie Policy.
Skip to main content

Announcements
Join us in Bucharest on Sept 18th for Qlik's AI Reality Tour! Register Now
cancel
Showing results for 
Search instead for 
Did you mean: 
Qlik_Learner11
Contributor II
Contributor II

How to join multiple tables to avoid circular joins

Hello Experts,

I have benefited from you multiple times in the past. I request you to please help me this time too.

There are 3 tables revenue, customer and cust_privilege. you can see the fields in each of the tables below. There are more fields in the actual tables but I am skipping them for the context.

revenue
tkt_key
tkt_nbr
tkt_iss_date
tkt_price
cust_key

 

customer
cust_key
cust_name
cust_id



cust_privilege
tkt_nbr
cust_id
cust_status

 

revenue and customer tables are already being loaded in the script. Now I need to add cust_privilege table to the script. revenue table is associated with customer table on cust_key field. So, if I select tkt_nbr, all the associated customer names will be filtered in the list box.

My requirement is when I click a customer name in the list box, it's associated cust_status from cust_privilege table should be filtered. To achieve this I am not sure how to join the cust_privilege table with already existing revenue and customer tables. If I join the cust_privilege table with revenue table on tkt_nbr, selecting the customer name would filter all the cust_ids associated with the tkt_nbr. And If I join the cust_privilege table with customer table on cust_id, then selecting customer name would filter the cust_id and cust_status but for all tkt_nbrs. Please note cust_status value is different for each tkt_nbr and cust_id combination. To get the cust_status for a customer, we need both tkt_nbr and cust_id combination.

Joining cust_privilege table to revenue table on tkt_nbr and joining cust_privilege table to customer table on cust_id will create circular join which is not recommended.
I am not sure how to join all these tables so that when I select a customer name, it should filter all the ticket numbers, and when i select a ticket number, and it should filter the associated cust_id and cust_status. I hope I was able to explain the problem in detail.

Please someone suggest a solution. Thanks so very much in advance.

Labels (1)
2 Replies
KJM
Contributor III
Contributor III

Hi Qlik Learner!

Could you use a Join to add cust_name and cust_id to the revenue table based on the cust_key field and then use a link table to avoid synthetic keys on the remaining two tables?  There are tutorials on youtube on link tables but I think I'd do something like the following (albeit I would prefer to play about with the app to be sure!)

#left join the customer fields to the revenue and drop customer from the model
Left Join (revenue)
Load * Resident customer;
Drop Table customer;

#create a link key for the link table in each table
revenue_withkey:
Load
    *,
    [tkt_nbr] & [cust_id] as linkKey
Resident revenue;
Drop Table revenue;

cust_privilege_withkey:
Load
    *,
    [tkt_nbr] & [cust_id] as linkKey
Resident cust_privilege;
Drop Table cust_privilege;

#create the link table and drop the fields from the originals
LinkTable:
Load distinct*;
Load
    linkKey,
    [tkt_nbr],
    [cust_id]
Resident revenue_withkey;

Load
    linkKey,
    [tkt_nbr],
    [cust_id]
Resident cust_privilege_withkey;

drop fields [tkt_nbr], [cust_id] from revenue_withkey,cust_privilege_withkey; 

 

I'm sure that's not perfect.  It might need a NoConcatenate somewhere.  But I think its nearly there in terms of what you need.  If this helps please like and mark as solution 🙂

 

K.

 

 

Qlik_Learner11
Contributor II
Contributor II
Author

Hi KJM,

Thank you so much for quick reply and possible solution. Unfortunately I can't join revenue and customer tables. This is an existing app and those two tables are associated using Keep. But I think I could follow your solution. I guess I need to create another table and pull tkt_nbr and cust_id fields into it and create a link key. And then create the same key and import only the other fields from cust_privilege table. I am not sure if I will be able to do that. If you think it won't work please let me know. Thank you again for your help.