摘要:本文首先介紹了緩慢變化維的定義、三種處理方式。之後以員工維表資料為例,詳細說明如何使用bo di實現scd2維表的etl。最後講解了scd2維表如何使用。
某些維度的屬性會隨著時間緩慢變化,這種維度被稱為緩慢變化維(slowly changing dimension,scd)。舉個例子,跨國企業的員工可能會在不同區域間調動工作,但兩次調動之間的時間間隔不會太短,因此員工的所屬區域屬性在緩慢變化,員工維是乙個緩慢變化維。
在資料倉儲中緩慢變化維如何建模,如何etl呢?下面就以員工維表為例介紹三種常用的scd處理方式。
scd1 方式直接修改維度記錄的屬性值,維度屬性表示員工當前狀態。
假設企業內每個員工都隸屬於某個地區,張三原屬於亞洲地區。員工維表最初儲存的資料如下表:
emp_id /**鍵
emp_code /員工**
emp_name /員工姓名
region /所屬地區1
a001 張三
asia
其中emp_id 是員工維表的主鍵,用於和事實表關聯;emp_code是員工**,唯一地標識每位員工;region即員工所屬地區。
現在因業務需要,張三被派駐到非洲地區了。在scd1方式中,將張三的地區屬性直接更新為"africa",其餘字段不變,事實表所引用的emp_id也無需變化。下表為員工維表修改後的情況,只有張三的所屬地區屬性被更新,維度記錄表示張三當前的狀態。
emp_id /**鍵
emp_code /員工**
emp_name /員工姓名
region /所屬地區1
a001 張三
africa
scd1是處理緩慢變化維最簡單的方法,只有維表的屬性字段需要修改,事實表資料不受影響。scd1的缺點在於丟失了維度屬性的歷史資料;此外與變化屬性有關的彙總資料必須重新計算,否則彙總與明細資料將無法對應。
維度屬性的緩慢變化是否需要在資料倉儲中體現是根據分析需求而定的。這類需求在調研階段很容易被業務使用者忽略,因此建模人員應檢查每個維度屬性是否有變化的可能,以及是否有分析歷史資訊的需要。不要想當然地把scd1作為預設的維度處理方法。
scd2方式使用新記錄儲存更新的維度資訊,能夠儲存維度歷史資訊,因此是最主要的緩慢變化維處理方式。
我們繼續使用在區域間調動工作的例子。張三於2023年5月從亞洲調動到非洲後,使用scd2方式儲存的維表如下所示:
emp_id /**鍵
emp_code /員工**
emp_name /員工姓名
region /所屬地區1
a001 張三
asia 2
a001 張三
africa
張三原有記錄不變,增加一條新記錄作為張三最新的資訊。新記錄的所屬地區字段值為"africa",新記錄的emp_id字段值是自動生成的**鍵。事實表中張三2023年5月之前的事實資料使用舊emp_id(1),2023年5月之後的事實資料使用新記錄的emp_id(2)。
scd2方式實際上儲存了同一員工在不同時間的多個版本的資訊,自動生成的emp_id可以唯一地標識不同版本,而邏輯上唯一的emp_code顯示了同一員工不同版本資訊間的聯絡。
需要注意的是,scd2維表與事實表關聯時無需附加任何日期時間條件,因為在抽取事實資料時就已經選擇了與事實資料時間相匹配的維度emp_id。在scd2維表中可以加入"資訊生效時間戳"和"資訊失效時間戳"兩個字段,通過這兩個欄位就可以還原出任意時間點員工資訊的快照。在scd2維表中還可以加入"當前有效資訊標誌",便於查詢出最新版本的維度資訊。
scd3方式使用新資料列儲存更新的維度資訊,能夠儲存有限的維度歷史資訊。
仍舊用張三調動所屬區域的例子,使用scd3方式儲存的維表如下所示:
emp_id /**鍵
emp_code /員工**
emp_name /員工姓名
region /所屬地區
region_prior /之前的所屬地區1
a001 張三
africa
asia
員工維表增加了一列region_prior,此列儲存張三的舊所屬地區屬性"asia",而region欄位則儲存新所屬地區屬性"africa"。
有些分析要求同時按維度的新舊屬性檢視事實資料。比較常見的例子是銷售區域劃分發生變化後,分析人員希望既能按劃分後的區域檢視事實資料,也能按劃分前的區域檢視。只有scd3能滿足此類需求。
以上是對三種scd方式的介紹。這三種方式的出場順序沒有任何含義,不代表誰好誰差。三種方式各有優劣,開發者應該根據資料的特點、分析的要求來選擇。
使用BO DI處理 SCD2維表
摘要 本文首先介紹了緩慢變化維的定義 三種處理方式。之後以員工維表資料為例,詳細說明如何使用bo di 實現scd2 維表的etl 最後講解了scd2 維表如何使用。某些維度的屬性會隨著時間緩慢變化,這種維度被稱為緩慢變化維 slowly changing dimension,scd 舉個例子,跨國...
標準2 維表問題
標準2 維表問題 問題描述 n 是乙個正整數。2n 的標準2 維表是由正整數 1,2 2n 組成的2n 陣列,該 陣列的每行從左到右遞增,每列從上到下遞增。2n 的標準2 維表全體記為tab n 例如,當n 3 時tab 3 如下 1 2 3 1 2 4 1 2 5 1 3 4 1 3 5 4 5 ...
R語言 資料處理2列表
r語言中的列表與向量不同,在單個向量中所存放的資料型別必須一致,而列表卻不同,它可以組合多種不同型別的物件,且列表的每乙個元件可以是不同的長度。1.建立列表 通過list函式進行建立列表 2.列表的索引 在列表a中索引age這一列 a.通過列表 元件名進行索引 b.通過列表 元件名 進行索引 c.通...