內(nèi)容承接 第2章 Kimball維度模型技術(shù)概述(一)
下鉆
下鉆是商業(yè)用戶分析數(shù)據(jù)的最基本的方法。下鉆僅需要在查詢上增加一個行頭指針。新行的頭指針是一個維度屬性,就是將數(shù)據(jù)按組查詢,在SQL中用Group By表達式。屬性可以來自任何與查詢使用的事實表關(guān)聯(lián)的維度。
退化維度
有時,維度除了主鍵外沒有其他內(nèi)容。退化維度被放入事實表中,清楚地表明沒有關(guān)聯(lián)的維度表。退化維度常見于交易和累計快照事實表中。
非規(guī)范化扁平維度
維度設(shè)計者需要將操作型數(shù)據(jù)庫設(shè)計所帶來的對規(guī)范化設(shè)計的要求,并將非規(guī)范化的多對一固定深度層次引入扁平維度行的不同屬性。非規(guī)范化維度能夠?qū)崿F(xiàn)維度建模的雙重目標:簡化及速度。
多層次維度
多數(shù)維度包含不止一個自然層次。如:日歷日期維度可以按從天到周劃分,也可以從月到年的層次。在同一維度中可以存在不同層次。
文檔屬性的標識與指示器
令人迷惑的縮寫、真/假標識以及業(yè)務(wù)指標可以作為維度表中文本字詞含義的補充解釋。操作代碼值所包含的意義應(yīng)分解成不同的表示不同描述性維度屬性的部分。
維度表中的空值屬性
當(dāng)給定維度行沒有全部填充時,或者當(dāng)存在屬性沒有被應(yīng)用到所有維度行時,將產(chǎn)生空值維度屬性。推薦采用描述性字符串替代空值。(如:使用Unknown或Not Applicale替換空值。)避免在維度屬性中使用空值,因為不同的數(shù)據(jù)庫系統(tǒng)在處理分組和約束時,針對空值的處理方法不一致。
日歷日期維度
日歷日期維度通常包含許多描述,(如:周數(shù),月份名稱,國家假日等屬性。)日期維度表需要特定的行表示未知或待定的日期。若需要更詳細的精確度,可以在事實表中增加不同的日期時間戳。日期時間戳并不是維度表的外鍵,單以單獨列的形式存在。如按當(dāng)天時間(time-of-day)屬性進行約束或分組,如按當(dāng)天或其他數(shù)字分組,則需要在事實表上增加一個“當(dāng)天時間(time-of-day)”維度外鍵。
雜項維度
事務(wù)型商業(yè)過程通常產(chǎn)生一系列混雜的、低粒度的標識和指示器。這種情況下建立單獨的將不同維度合并到一起的雜項維度。
雪花維度
當(dāng)維度表中的層次關(guān)系是規(guī)范的時,低粒度屬性作為輔助表通過屬性鍵連接到基本維度表。當(dāng)這一過程包含多重維度表層次時,建立的多級層次結(jié)構(gòu)被稱為雪花模式。雪花模式在其中查詢是非常困難的。雪花模式還會影響查詢性能。扁平化的、非規(guī)范的維度表完全能夠獲得與雪花模式相同的信息。
支架維度
維度可包含對其他維度的引用。(如:銀行賬戶維度可以引用表示開戶日期的維度)。這些被引用的輔助維度稱為支架維度。維度之間的關(guān)聯(lián)應(yīng)該由事實表來實現(xiàn)。在事實表中通過兩個維度的不同外鍵相關(guān)聯(lián)。
使用一致性維度集成
維度建模方法最成功的方面之一就是為集成來自不同商業(yè)過程的數(shù)據(jù)而定義了簡單而強大的解決方案。
一致性維度
當(dāng)不同的維度表的屬性具有相同列名和領(lǐng)域內(nèi)容時,稱維度表具有一致性。利用一致性維度屬性與每個事實表關(guān)聯(lián),可將來自不同事實表的信息合并到同一報表中。當(dāng)一致性屬性被用作行頭(SQL分組列)時,來自不同事實表的結(jié)果可以排列到跨鉆報表的同一行中。
縮減維度
縮減維度是一種一致性維度,由基本維度的列與行的子集構(gòu)成。當(dāng)構(gòu)建聚集事實表時需要縮減上卷維度。當(dāng)商業(yè)過程自然地獲取粒度級別較高的數(shù)據(jù)時,也需要縮減維度。另一種情況,當(dāng)兩個維度具有同樣的粒度級別的細節(jié)數(shù)據(jù),但其中一個僅表示行的部分子集時,也需要一致性維度子集。
跨表鉆取
**跨表鉆取是當(dāng)每個查詢的行頭包含相同的一致性屬性時,使不同的查詢能夠針對兩個或更多的事實表進行查詢。來自兩個查詢的回答集合將針對公共維度屬性行頭,通過執(zhí)行排序-融合操作實現(xiàn)排列。
價值鏈
價值鏈用于區(qū)分組織中主要業(yè)務(wù)過程的自然流程。(如,銷售商的價值鏈可能包含購買、庫存、零售額等)。操作型源系統(tǒng)通常為價值鏈上的每個步驟建立事務(wù)或快照。因為每個過程在特定時間間隔,采用特定時間間隔,采用特定粒度和維度建立唯一的度量,所以每個過程通常至少建立一個原子事實表。
企業(yè)數(shù)據(jù)倉庫總線架構(gòu)
企業(yè)總線架構(gòu)提供一種建立企業(yè)DW/BI系統(tǒng)的增量式方法。企業(yè)總線架構(gòu)通過關(guān)注業(yè)務(wù)過程將DW/BI規(guī)劃過程分解為可管理的模塊,通過重用跨不同過程的標準化一致性維度發(fā)布實現(xiàn)集成。支持可管理敏捷實現(xiàn)對應(yīng)企業(yè)數(shù)據(jù)倉庫總線矩陣。
企業(yè)數(shù)據(jù)倉庫總線矩陣
企業(yè)數(shù)據(jù)倉庫總線矩陣是用于設(shè)計并與企業(yè)數(shù)據(jù)倉庫總線架構(gòu)交互的基本工具。矩陣的行表示業(yè)務(wù)過程,列表示維度。矩陣中的點表示維度與給定的業(yè)務(wù)過程是否存在關(guān)聯(lián)關(guān)系。設(shè)計時應(yīng)該分析每一行,用于測試是否為業(yè)務(wù)過程定義好相關(guān)的候選維度,同時分析每個列,考慮某一維度需要跨多個業(yè)務(wù)過程并保持一致性??偩€矩陣還可用作輸入幫助確定優(yōu)先處理DW/BI項目過程管理。
總線矩陣實現(xiàn)細節(jié)
總線矩陣實現(xiàn)細節(jié)是一個更加粒度化的總線矩陣。其中擴展每個業(yè)務(wù)過程行以展示特定事實表或OLAP多維數(shù)據(jù)庫。在此細節(jié)粒度上,可以文檔化精確的粒度描述以及事實列表。
機會/利益相關(guān)方陣
在確定了企業(yè)數(shù)據(jù)倉庫總線矩陣行之后,可以通過替換包含業(yè)務(wù)功能(如,市場,銷售,財務(wù)等)的維度列規(guī)劃不同的矩陣。機會/利益相關(guān)方矩陣可用于區(qū)分哪些業(yè)務(wù)過程分組應(yīng)該與過程中心行相關(guān)。
處理緩慢變化維度屬性
處理緩慢變化維度(Slowly Changing Dimension,SCD)屬性的基本方法。對同一維度表中屬性的變化,采用不同的變化跟蹤技術(shù)是比較常見的方法。
類型0:原樣保留
對類型0,維度屬性值不會發(fā)生變化,因此事實表以原始值分組。
類型1:重寫
對類型1,維度行中原來的屬性值被新值覆蓋。類型1屬性總是反映最近的工作,因此該技術(shù)破壞了歷史情況。受此影響的聚集事實表和OLAP多維數(shù)據(jù)將會重復(fù)計算。
類型2:增加新行
對類型2,將在維度表中增加新行,新行中采用修改的屬性值。要實現(xiàn)該方式需要維度主鍵更具有一般性,不能僅采用自然鍵或持久鍵,因為采用該方法時經(jīng)常會出現(xiàn)多行描述同樣成員的情況。
當(dāng)變化類型2發(fā)生時,最少需要在維度行中增加三個額外列:1.行有效的日期/時間戳列;2.行截止日期/時間戳列;3.當(dāng)前行標識。
類型3:增加新屬性
對類型3,將在維度表上增加新屬性以保存原來的屬性值,新屬性值以變化類型1方式重寫主屬性。這種類型3變化有時稱為替換現(xiàn)實??梢岳卯?dāng)前值或替換現(xiàn)實來分組或過濾事實數(shù)據(jù)。不常用
類型4:增加微型維度
對于類型4,當(dāng)維度中的一組屬性快速變化并劃分為微型維度時采用。此情況常被稱為快速變化魔鬼維度。通常包含幾百萬行的維度表中使用的屬性是微型維度設(shè)計的候選,即使它們不常變化。變化類型4微型維度要自己的唯一主鍵。變化類型4微型維度需要自己的唯一主鍵,基維度和微型維度主鍵從相關(guān)的事實表中獲取。
類型5:增加微型維度及類型1支架
對類型5,用于精確保存歷史屬性值,按照當(dāng)前屬性值,增加報表的歷史事實。類型5建立在類型4微型維度之上,并嵌入當(dāng)前類型1引用基維度中的微型維度。將基維度及微型維度支架表示為展現(xiàn)區(qū)域中的單一表。每當(dāng)當(dāng)前微型維度分配發(fā)生變化時,ETL小組需要重寫類型1微型維度引用。
類型6:增加類型1屬性到類型2維度
與類型5類似,類型6也保存歷史和當(dāng)前維度屬性值。類型6建立在類型2的基礎(chǔ)上,同時嵌入維度行屬性的當(dāng)前類型1版本,因此事實行可以被過濾或分組,要么按照屬性的當(dāng)前值。在此環(huán)境中,當(dāng)屬性發(fā)生變化時,類型1屬性有系統(tǒng)自動重寫與特定持久鍵關(guān)聯(lián)所有行。
類型7:雙類型1和類型2維度
類型7是用于支持過去和現(xiàn)在報表的最后一種混合技術(shù)。事實表可以被訪問,通過被建模為類型1維度僅僅展示最新屬性值,建模為類型2維度展示最新歷史概要。
處理維度層次關(guān)系
維度往往存在層次關(guān)系。
固定深度位置的層次
固定深度層次是多對一關(guān)系的一種,(如,從產(chǎn)品到品牌,再到分類,到部門。)當(dāng)固定深度層次定義完成后,層次就具有商定的名字,層次級別作為維度表在不同位置屬性出現(xiàn)。固定層次能夠提供可預(yù)測的、快速的查詢性能。當(dāng)層次不是多對一關(guān)系,或?qū)哟蔚纳疃炔欢ǎ灾聦哟螞]有穩(wěn)定的命名時,需要非固定層次技術(shù)。
輕微參差不齊/可變深度層次
輕微參差不齊層次沒有固定的層次深度,但層次深度有限。地理層次深度通常包含3到6層。與其使用復(fù)雜的機制構(gòu)建難以預(yù)測的可變深度層次,不如將其變換為固定深度位置設(shè)計,針對不同的維度屬性確立最大深度,然后基于業(yè)務(wù)規(guī)則放置屬性值。
具有層次橋接表的參差不齊/可變深度層次
在關(guān)系數(shù)據(jù)庫中,深度不確定的可變深度層次非常難以建模。SQL擴展和OLAP訪問語言對遞歸父子關(guān)系提供了一些支持,方法有限。采用SQL擴展,在查詢時,不能替換參差不齊層次,不支持對自身層次結(jié)構(gòu)的共享,同時不支持隨時間變化的參差不齊的層次。這樣的情況可以通過關(guān)系數(shù)據(jù)庫中采用構(gòu)建橋接表方式建模參差不齊層次來解決。此時橋接表對每個可能的路徑保留一行,確保能夠遍歷所有層次的形式,采用標準SQL而不是特定語言擴展來實現(xiàn)。
具有路徑字符屬性的可變深度層次
可以在維度中采用路徑字符屬性,以避免使用橋接表表示可變深度層次。對維度中每行,路徑字符屬性包含特定的嵌入文本字符,包含從層次最高節(jié)點到特定維度行所描述節(jié)點的完整路徑描述。多數(shù)標準層次分析需求可以通過SQL處理,不必采用SQL語言擴展。缺點:路徑字符方法不能確保其他層次的快速替換,無法共享自身層次,難于構(gòu)建可變路徑層次的變化,可能需要重新標記整個層次。
高級事實表技術(shù)
這些技術(shù)涉及不太常見的事實表模式。
事實表代理鍵
代理鍵可用作所有維度表的主鍵。此外,可使用單列代理事實鍵,盡管不太需要。在ETL加載過程中順次分配的,不與任何維度關(guān)聯(lián)的事實表代理鍵,可用于(1)作為事實表的唯一主鍵列;(2)在ETL中,用作事實表行的直接標識符,不必查詢多個維度;(3)允許將事實表更新操作分解為風(fēng)險更小的插入和刪除操作。
蜈蚣事實表
多對一層次的每層建立不同規(guī)范化維度,(如,日期維度,月份維度、季度維度等),并將所有外鍵包含在一個事實表中。這將產(chǎn)生蜈蚣事實表。包含與多維度相關(guān)的多個維度。
屬性或事實的數(shù)字值
如果數(shù)字值主要用于計算目的,則可能屬于事實表。如果數(shù)字值只要用于確定分組或過濾,則應(yīng)將其定義為維度屬性,離散數(shù)字值用值范圍屬性進行補充(如¥0~50)。
日志/持續(xù)時間事實
積累快照事實表獲取多個過程里程碑,每個都包含日期外鍵并可能包含日期/時間戳。每個包含日期外鍵并可能包含日期/時間戳。商業(yè)用戶通常希望分析這些里程碑之間的滯后及延遲時間。
頭/行事實表
操作型交易系統(tǒng)通常包括事務(wù)頭指針行,頭指針行與多個事務(wù)行關(guān)聯(lián)。也稱父/子模式,所有頭指針級別維度外鍵與退化維度應(yīng)該被包含在行級別事實表。
分配的事實
頭指針/行事務(wù)數(shù)據(jù)與對應(yīng)的事實具有不同粒度。應(yīng)該盡量分配頭指針事實,使其基于業(yè)務(wù)所提供的規(guī)則劃分為行級別,分配的事實可以按照所有維度進行分片并上鉆操作。盡量避免建立頭指針級別的事實表,除非這樣的聚集能夠獲得查詢性能的改善。
利用分配建立利潤與損失事實表
事實表揭示利潤等價方程是企業(yè)DW/BI應(yīng)用能夠發(fā)布的最強大的結(jié)果。利潤方程:收入-開銷=利潤。