關於 Slowly Changing Dimension 緩慢漸變維度的理論概念請參看 數據倉庫系列 - 緩慢漸變維度 (Slowly Changing Dimension) 常見的三種類型及原型設計
本篇文章總結了實現緩慢漸變維度的幾種方式,並且分析了 Changing Attribute 和 Historical Attribute 輸出的邏輯過程。
示例一:SSIS 中使用 Slowly Changing Dimension 控件
示例二:使用 SQL 中 Merge 語句實現簡單的 SCD 效果
示例三:在 SSIS 中使用 Lookup, Conditional Split, Multicast 等控件實現 SCD 效果
測試表以及測試數據,其中 Customer 是數據源表,DimCustomer 模擬的是數據倉庫中的 Customer 維度表。
每個示例都是從空表開始,第一次運行的時候 Dimension 表沒有數據,第二次運行之前將添加幾條 數據到 Customer 數據源表中,並同時修改若干數據。
但是要注意這個示例對數據源數據的加載是全部加載,而不考慮基於數據源數據的增量加載,關於增 量加載的實現會放在 BI 系列的其它文章中講解。
USE BIWORK_SSIS GO IF OBJECT_ID('Customer') IS NOT NULL DROP TABLE Customer GO IF OBJECT_ID('DimCustomer') IS NOT NULL DROP TABLE DimCustomer GO CREATE TABLE Customer ( ID INT PRIMARY KEY IDENTITY(1,1), FullName NVARCHAR(50), City NVARCHAR(50), Occupation NVARCHAR(50) ) CREATE TABLE DimCustomer ( CustomerID INT PRIMARY KEY IDENTITY(1,1), CustomerAlternateKey INT, FullName NVARCHAR(50), City NVARCHAR(50), Occupation NVARCHAR(50), StartDate DATETIME, EndDate DATETIME, IsCurrent BIT DEFAULT(1) ) INSERT INTO BIWORK_SSIS.dbo.Customer VALUES ('BIWORK','Beijing','IT'), ('ZhangSan','Shanghai','Education'), ('Lisi','Guangzhou','Student')
示例一 SSIS 中的 Slowly Changing Dimension
新建一個 Package 並拖放一個 Data Flow,在 Data Flow 中建立好與 Customer 表的數據源連接, 新建 Slowly Changing Dimension SCD_DimCustomer。