數(shù)據(jù)倉(cāng)庫(kù)中,緩慢漸變維度是一種經(jīng)常使用到的方案。
“漸變”,即為逐漸變化的維度,因?yàn)槿粘?yīng)用中,維度屬性是隨時(shí)可能發(fā)生變化的,而B(niǎo)I統(tǒng)計(jì)時(shí),又可能是需要?dú)v史某個(gè)時(shí)間點(diǎn)的維度屬性值。所以這種情況下,就需要我們記錄下這個(gè)變化信息,于是漸變維度就出現(xiàn)了。
“緩慢”兩個(gè)字,也是需要注意的,僅有緩慢變化的才適用于這種方案。如果是每天每時(shí)每刻都在變化的就不適合這種方案了,因?yàn)槟菢訒?huì)產(chǎn)生太多太多的記錄,導(dǎo)致維度表記錄過(guò)多,影響效率。
下面就先來(lái)看一下它的表結(jié)構(gòu)設(shè)計(jì):
與漸變相關(guān)的幾個(gè)字段:
SCD_StartDate - 該記錄生成時(shí)間
SCD_EndDate - 該記錄廢棄時(shí)間
SCD_IsActive - 該記錄是否當(dāng)前激活狀態(tài)
SCD_Version- 該記錄當(dāng)前版本號(hào)
GetItAct - 數(shù)據(jù)更新時(shí)間
外鍵可以先不看,它與緩慢漸變維度關(guān)系不大。
業(yè)務(wù)字段:
DeaprtNo為業(yè)務(wù)主鍵,一般不會(huì)發(fā)生變化。
DepartName為部門(mén)名稱(chēng),不過(guò)我們并不關(guān)心它的歷史狀態(tài),所以需設(shè)置為實(shí)時(shí)更新。其他ENName類(lèi)似。
DepartType我們關(guān)注它的歷史,所以需用ETL工具,設(shè)置為漸變更新。
ParentDepartID同樣關(guān)注歷史,需設(shè)置漸變更新。
可能的更新情況如下:
1. DepartName變化,此時(shí)不會(huì)產(chǎn)生新的記錄,僅會(huì)做如下操作:
a)更新當(dāng)前最新記錄的DepartName為最新。
b)根據(jù)業(yè)務(wù)主鍵DepartNo,更新所有同No的歷史記錄的DepartName為最新。
2.ParentDepartID變化時(shí),則會(huì)產(chǎn)生新的記錄,此時(shí)會(huì)做如下操作:
a) 修改舊記錄的EndDate為當(dāng)前時(shí)間
b)修改舊記錄的isActive=0
c)添加一條新的記錄,StartDate=當(dāng)前時(shí)間,isAtive=1,Version=舊Version+1
如下圖:
維度表的使用:
1.取最新版數(shù)據(jù)
2.取歷史數(shù)據(jù) --2013-02-12為時(shí)間點(diǎn)
3.建立事實(shí)表與維度表關(guān)聯(lián)
如取最新數(shù)據(jù),根據(jù)SQL1獲取最新數(shù)據(jù)的ID,放入事實(shí)表維度ID外鍵中
如取歷史數(shù)據(jù),根據(jù)SQL2獲取歷史數(shù)據(jù)的ID,放入事實(shí)表維度ID外鍵中
聯(lián)系客服