資料倉儲中,緩慢漸變維度是一種經常使用到的方案。
「漸變」,即為逐漸變化的維度,因為日常應用中,維度屬性是隨時可能發生變化的,而bi統計時,又可能是需要歷史某個時間點的維度屬性值。所以這種情況下,就需要我們記錄下這個變化資訊,於是漸變維度就出現了。
「緩慢」兩個字,也是需要注意的,僅有緩慢變化的才適用於這種方案。如果是每天每時每刻都在變化的就不適合這種方案了,因為那樣會產生太多太多的記錄,導致維度表記錄過多,影響效率。
下面就先來看一下它的表結構設計:
scd_startdate - 該記錄生成時間
scd_enddate - 該記錄廢棄時間
scd_isactive - 該記錄是否當前啟用狀態
scd_version- 該記錄當前版本號
getitact - 資料更新時間
外來鍵可以先不看,它與緩慢漸變維度關係不大。
業務字段:
deaprtno為業務主鍵,一般不會發生變化。
departname為部門名稱,不過我們並不關心它的歷史狀態,所以需設定為實時更新。其他enname類似。
departtype我們關注它的歷史,所以需用etl工具,設定為漸變更新。
parentdepartid同樣關注歷史,需設定漸變更新。
可能的更新情況如下:
1. departname變化,此時不會產生新的記錄,僅會做如下操作:
a)更新當前最新記錄的departname為最新。
b)根據業務主鍵departno,更新所有同no的歷史記錄的departname為最新。
2.parentdepartid變化時,則會產生新的記錄,此時會做如下操作:
a) 修改舊記錄的enddate為當前時間
b)修改舊記錄的isactive=0
c)新增一條新的記錄,startdate=當前時間,isative=1,version=舊version+1
如下圖:
維度表的使用:
1.取最新版資料
select * from dm_depart_dim d
where d.scd_isactive = 1
2.取歷史資料 --2013-02-12為時間點
select * from dm_depart_dim d
where '2013-02-12' between d.scd_startdate and d.scd_enddate
or (d.scd_enddate is null and '2013-02-12' >=d.scd_startdate)
3.建立事實表與維度表關聯
如取最新資料,根據sql1獲取最新資料的id,放入事實表維度id外來鍵中
如取歷史資料,根據sql2獲取歷史資料的id,放入事實表維度id外來鍵中
資料倉儲 緩慢變化維
緩慢變化維處理方法 什麼是緩慢變化維 緩慢變化維的提出是因為在現實世界中,維度的屬性並不是靜態的,它會隨著時間的流失發生緩慢的變化。這種隨時間發生變化的維度我們一般稱之為緩慢變化維,並且把處理維度表的歷史變化資訊的問題稱為處理緩慢變化維的問題。比如學生的班級,年級等 表中的處理方法 1.重寫覆蓋 初...
資料倉儲緩慢變化維的三種方式
slowly changing dimension 簡稱 scd 是資料倉儲建模和處理過程中乙個很重要的概念,因為資料倉儲系統的主要功能是對歷史資料進行彙總和分析,所以儲存歷史記錄的變化是很重要的。scd是用來處理 dimension 表變化的一種設計理論。scd 通常使用三種型別 型別1 type...
資料倉儲專題(9) 緩慢變化維處理技術
一 案例描述 在乙個零售業資料倉儲中,事實表儲存著各銷售人員的銷售記錄,某天乙個銷售人員從北京分公司調到上海分公司了,那麼如何來儲存這個變化呢?也就是說銷售人員維度要怎麼恰當的處理這一變化。先來回答乙個問題,為什麼要處理,或儲存這一變化?如果我們要統計北京地區或上海地區的總銷售情況的時候,這個銷售人...