One good reason (amongst the many others) is that maybe you want to reduce a dimension table to the values that are actually used in your data model. Imagine that you have product information (all of it) loaded first. A LEFT KEEP with the facts left, and the products on the right will reduce product entries to the set that is referenced in the facts table. All without using exists(). Or another resident table. Simple.
Let's check with this sample data
OrderDetail#, Order#, Product
1, 1, XYZ
2, 1, ABC
3, 2, ABC
4, 2, QRT
5, 3, JKL
6, 4, MNO
Now, the order tables has Order# 1 and 2 but in details table you have 1,2,3,4. In this scenario if you join the tables using Inner or Left join, the order 1 and 2 records are duplicated because we have multiple records in details table, when you sum up the Amount it won't match with the actual amount, so in this scenario Keep will be very very handy.
Now the join logic is applied between the tables, but the tables are not joined physically.
Hope this helps you.
yes, I see. Thank you!
I have come across something similar in one of my apps - I made one field into an additional dimension to maximize the flexibility and user-friendliness of the chart and when testing I ended up with the figures doubled or tripled. I solved that by inserting a comment and then just dividing the value by 2 again ...
That was not a JOIN scenario, but I can see how that could happen. In that case, an INNER KEEP or LEFT KEEP would prove handy, though to be honest I can't really see its advantage over a simple WHERE EXISTS() clause ... (with the INNER or LEFT which are probably the ones most often needed - the RIGHT somehow runs contra to what human thinking would suggest the way it did since humans started heaping stones on top of each other ...)