Slowly Changing Dimension
Lesson Notes
Slowly Changing Dimensions Lesson Notes
Video
Slowly changing Dimensions
-
It the dimension which changes over time. So, for a specific date we have different value.
-
It has different types as following
-
Type 0 (Fixed Dimension): We don’t change the current even the source changes.
-
Type 1 (No History): No history is maintained only the latest replace the current.
-
Type 2 (History): Series of history of records are maintained.
-
Type 3 (Hybrid): Only the last Change and the Current new change is stored
-
Type 4 : We split the data into two tables, first the current record and second is the historical (most common usage).
-
Slowly changing Dimensions Other Types
There are some other types which is a combination between the above similar than type 3 combined between 1 | 2.| You can check the chapter resources for more information about the other types.
Slowly changing Dimensions Types
Type 0
No update if the previous dimension updated.
-
Ronaldo current address in Madrid
CustomerID Name City 123456789 Ronaldo Madrid -
Ronaldo updated his to Turin
CustomerID Name City 123456789 Ronaldo Turin -
Results in type 0 will not updated.
ID CustomerID Name City 1 123456789 Ronaldo Madrid
Type 1
-
Ronaldo current address in Madrid
CustomerID Name City 123456789 Ronaldo Madrid -
Ronaldo updated his to Turin
CustomerID Name City 123456789 Ronaldo Turin -
Results in type 1 will update the record without history maintenance.
ID CustomerID Name City 1 123456789 Ronaldo Turin
Type 2
-
Ronaldo addresses history
CustomerID Name City UpdatedDt 123456789 Ronaldo Madrid 2018-12-12 123456789 Ronaldo Turin 2019-06-12 123456789 Ronaldo London 2019-08-12 123456789 Ronaldo Porto 2019-12-12 -
Type 2 will keep all the history and keep the current with
terminationDt as null
ID CustomerID Name City effectiveDt terminationDt isCurrent 1 123456789 Ronaldo Madrid 2018-12-12 2019-06-12 false 2 123456789 Ronaldo Turin 2019-06-12 2019-08-12 false 3 123456789 Ronaldo London 2019-08-12 2019-12-12 false 4 123456789 Ronaldo Porto 2019-12-12 null true
Type 3
- Maintain the current and previous only with maintaining the history.
CustomerID Name City UpdatedDt 123456789 Ronaldo Madrid 2018-12-12 123456789 Ronaldo Turin 2019-06-12 123456789 Ronaldo London 2019-08-12 123456789 Ronaldo Porto 2019-12-12 ID CustomerID Name City UpdatedDate previousCity 1 123456789 Ronaldo Porto 2019-12-12 London
Type 4
- Split current and historical into two tables.
- This change help to easy join with only current active records without the needs for the filter such as type 2.
ID CustomerID Name City effectiveDt TerminationDt 1 123456789 Ronaldo Madrid 2018-12-12 2019-06-12 2 123456789 Ronaldo Turin 2019-06-12 2019-08-12 3 123456789 Ronaldo London 2019-08-12 2019-12-12 4 123456789 Ronaldo Porto 2019-12-12 null ID CustomerID Name City UpdatedDate 1 123456789 Ronaldo Porto 2019-12-12
Slowly changing Dimensions
-
How does the Facts join SCD? We have two scenarios as following:
-
Getting the current customer information (Join with the latest).
-
Getting the historical customer information (Join with the historical table based on cust id | date).
ID CustomerID TotalCalls CallDate 1 123456789 30 2018-12-12 2 123456789 30 2019-12-12 -
Slowly changing Dimensions Extraction Example:
```sql
--Get latest customer details from customer profile snapshot
select * from cust_usage_dly a
inner join cust_profl b
on a.CustomerID = b.CustomerID;
--Get historical customer details from customer profile hist
select * from cust_usage_dly a
inner join cust_profl_hist b
on a.CustomerID = b.CustomerID
and CallDate between effectiveDt and TerminationDt
```
Further Reading
Dimensional Modeling: In a Business Intelligence Environment. The book is free, and you can download it from this link. You can read the following:
- Chapter 5.4.6 Slowly Changing Dimensions page 159.
- Chapter 6.3.5 Slowly Changing Dimensions page 261.