Let’s assume the organization has a huge number of customers and the task is to track very detailed customer profiles that include customer preferences, market segmentation, customer geography etc. The customer profiles are changing very often. The table would be very wide, huge and growing very fast.
We can split the dimension table in a number of smaller tables (mini-dimensions). The question is how to join them together to be able to get complete customer profile as at any point in time.
Snapshot Fact Table
The first design could be to add a snapshot factless fact table that joins these customer dimensions.
This is not the best solution as the current snapshot of the customers will be added to the fact table every load. The table will grow extremely fast.
Slowly Changing Fact Tables
Most often the rows inserted into the snapshot fact table will be the same as previous just with a new date. Therefore we can apply Slowly changing dimension technique for the fact table to avoid duplication of rows when the attributes are not changing. Let’s call this Slowly Changing Fact Table.
Customer RK is retained key of the Customer dimension, it is a surrogate key that does not change from one version of the row to another.
If any attribute of a customer profile changes, a new row will be inserted in the fact table. The number of rows in this fact table will be the same as the number of rows in the original dimension table Customer Profiles, however the data will take less of the disk space.
It is often more reasonable to apply “Slowly Changing Fact” technique to prevent the snapshot fact table from growing too fast.
The ideas here were taken from the Kimball Design Tip #50 Factless Fact Tables and diluted with my interpretations 🙂
where is the Date dimension in the 2nd implementation