1.維度建模設(shè)計(jì)的四個(gè)步驟
選擇業(yè)務(wù)過程
業(yè)務(wù)過程通常表示業(yè)務(wù)執(zhí)行的活動(dòng)。與之相關(guān)的維度描述與每個(gè)業(yè)務(wù)過程事件關(guān)聯(lián)的描述性環(huán)境。業(yè)務(wù)過程通常由某個(gè)操作型系統(tǒng)支撐,例如,賬單或購買系統(tǒng)。業(yè)務(wù)過程建立或獲取關(guān)鍵性能度量。有時(shí)這些度量是業(yè)務(wù)過程的直接結(jié)果,度量,從其他時(shí)間獲得。分析人員總是想通過過濾器和約束的不同組合,來審查和評(píng)估這些度量。業(yè)務(wù)過程通常由輸入激活,產(chǎn)生輸出度量。在許多組織中,包含一系列過程,它們既是某些過程的輸出,也是某些過程的輸入。用維度建模人員的話來說,一系列過程產(chǎn)生一系列事實(shí)表。
我們也需要了解業(yè)務(wù)過程不是什么。企業(yè)業(yè)務(wù)部門或企業(yè)功能職責(zé)并不等于業(yè)務(wù)過程。將注意力放在業(yè)務(wù)過程,而不是放在功能化的部門,可以更方便地獲得一致的企業(yè)信息。如果以部門為邊界建立維度模型,則不可避免地會(huì)將不同標(biāo)號(hào)的數(shù)據(jù)及數(shù)據(jù)值重復(fù)使用。確保一致性的最好方法是一次發(fā)布數(shù)據(jù)。聲明粒度
聲明粒度意味著精確定義某個(gè)事實(shí)表的每一行表示什么。粒度傳遞的是與事實(shí)表度量有關(guān)的細(xì)節(jié)級(jí)別。它回答“如何描述事實(shí)表中每個(gè)行的內(nèi)容? ”這一問題。粒度由獲取業(yè)務(wù)過程事件的操作型系統(tǒng)的物理實(shí)現(xiàn)確定。確定維度
維度要解決的問題是“業(yè)務(wù)人員如何描述來自業(yè)務(wù)過程度量事件的數(shù)據(jù)? ”應(yīng)當(dāng)使用健壯的維度集合來裝飾事實(shí)表,這些維度表示承擔(dān)每個(gè)度量環(huán)境中所有可能的單值描述符。如果粒度清楚,維度通常易于區(qū)分,因?yàn)樗鼈儽硎镜氖桥c“誰、什么、何處、何時(shí)、為何、如何”關(guān)聯(lián)的事件。常見維度的實(shí)例包括日期、產(chǎn)品、客戶、雇員、設(shè)備等。在選擇每個(gè)維度時(shí),應(yīng)該列出所有具體的、文本類型的屬性以充實(shí)每個(gè)維度表。確定事實(shí)
可以通過回答“過程的度量是什么? ”這一問題來確定事實(shí)。商業(yè)用戶非常愿意分析這些性能度量。設(shè)計(jì)中的所有候選事實(shí)必須符合第2步的粒度定義。明顯屬于不同粒度的事實(shí)必須放在不同的事實(shí)表中。典型事實(shí)是可加性數(shù)值,例如,訂貨數(shù)量或以美元計(jì)的成本總額等。不能只考慮數(shù)據(jù)來源來建模數(shù)據(jù),數(shù)據(jù)不能代替業(yè)務(wù)用戶的輸入

2.零售業(yè)務(wù)案例研究
第1個(gè)DW/BI項(xiàng)目應(yīng)該將注意力放在最為關(guān)鍵的、最易實(shí)現(xiàn)的用戶業(yè)務(wù)過程。最易實(shí)現(xiàn)涉及一系列的考慮,包括數(shù)據(jù)可用性與質(zhì)量,以及組織的準(zhǔn)備工作等
設(shè)計(jì)開發(fā)的維度模型應(yīng)該表示由業(yè)務(wù)過程獲取的最詳細(xì)的原子信息
DW/BI系統(tǒng)幾乎總是要求數(shù)據(jù)盡可能最細(xì)粒度來表示,不是因?yàn)樾枰樵儐为?dú)的某行,而是因?yàn)椴樵冃枰苑浅>_的方式對(duì)細(xì)節(jié)進(jìn)行切分
詳細(xì)的粒度說明確定了事實(shí)表的主要維度。然后可以將更多維度增加到事實(shí)表上,只要這些額外的維度自然地承擔(dān)主維度合并的某個(gè)值。如果附加的維度會(huì)產(chǎn)生與粒度不符的其他事實(shí)行,則取消該維度或重新考慮粒度聲明

- 計(jì)算獲得的事實(shí):數(shù)據(jù)分析師無法從DWS層獲取想要的數(shù)據(jù),只能從DWD層獲取數(shù)據(jù),對(duì)于這種情況,數(shù)據(jù)倉庫是一個(gè)迭代開發(fā)的過程,不斷完成主題建模,提供數(shù)據(jù)給分析師,或者為DWD的數(shù)據(jù)生成一個(gè)視圖,避免直接對(duì)物理層操作,提供給分析師(書中描述的內(nèi)容,我加工了一下,可能是這個(gè)意思吧...)
- 不可加事實(shí):例如對(duì)比率事實(shí)要準(zhǔn)確匯總
- 事務(wù)事實(shí)表:準(zhǔn)確估算這種事實(shí)表的大小,來合理設(shè)計(jì)數(shù)據(jù)倉庫
3.維度表設(shè)計(jì)細(xì)節(jié)
日期維度

日期維度表中的每列由行表示的特定日期定義。周天列包含天的名稱,如周一。使用該列可建立用于比較周一與周日業(yè)務(wù)的報(bào)表。日期數(shù)字是日歷月列從每月1號(hào)開始,根據(jù)不同的月份以28,29,30,31日結(jié)束。該列用于比較每個(gè)月的相同一天的情況。類似地,可以用每年的月號(hào)碼(1....12)。所有這些整數(shù)支持跨月或年的簡(jiǎn)單日期計(jì)算。對(duì)于報(bào)表,需要增加長標(biāo)識(shí)和縮寫標(biāo)識(shí)。例如,希望存在月名屬性,包含如1月這樣的值。此外,年-月(YYYY-MM)列作為報(bào)表的表頭非常有效。也可能希望季度號(hào)碼(Q1....Q4),以及2013-Q1這樣的年-季度屬性。可以包括財(cái)務(wù)周期相同,但日歷周期不同的列。


我的理解他的意思是說,把這些字段提供給用戶,用戶不會(huì)SQL查詢,我的問題是在實(shí)際的,面向內(nèi)部的日期維度會(huì)這么大??直接SQL日期函數(shù)查詢不就行了???,特殊意義的字段搞一個(gè)外鍵不就行了???
-
文本屬性的標(biāo)識(shí)或者字段
與大多數(shù)操作型標(biāo)志與標(biāo)識(shí)類似, 日期維度的假日標(biāo)識(shí)是一種簡(jiǎn)單的帶有兩個(gè)可能值的標(biāo)識(shí)。由于維度表屬性用于報(bào)表和下拉式查詢過濾列表中的值,所以該標(biāo)識(shí)應(yīng)該用有意義的值,例如,假日或非假日,而不是用神秘的Y/N, 1/0或真/假表示。標(biāo)識(shí)采用越有意義的領(lǐng)域值,就越能夠轉(zhuǎn)換為有意義的、能夠自我解析的報(bào)表。
文本標(biāo)識(shí) 當(dāng)前時(shí)間與相對(duì)時(shí)間屬性(沒看懂??企業(yè)日歷,我知道了就是今天的日期同下面的對(duì)滯后屬性的處理,新增一個(gè)字段)
大多數(shù)日期維度屬性不應(yīng)該更新。2013年6月1日將始終上卷到6月、日歷第2季度、2013年。然而,某些屬性可以增加到基本日期維度中,這些屬性可隨時(shí)間改變,包括IsCurrentDay,IsCurrentMonth, IsPrior60Days等。IsCurrentDay顯然每天都需要更新。該屬性對(duì)建立總是指向當(dāng)前天的報(bào)表有用。需要細(xì)致考慮的是日期IsCurrentDay所涉及的日期。大多數(shù)數(shù)據(jù)倉庫按天加載數(shù)據(jù),因此IsCurrentDay涉及昨天(或者更準(zhǔn)確地說,是最近的加載日期)。可在日期維度中增加屬性表示您的企業(yè)日歷,例如IsFiscalMonthEnd.
一些維度屬性包括對(duì)滯后屬性的更新。滯后日期列中值為0表示今天, -1表示昨天,+1表示明天等等。該屬性易于成為可計(jì)算列而不是物理地存儲(chǔ)??捎糜跒樵?、季度和年設(shè)置類似結(jié)構(gòu)(難點(diǎn))將當(dāng)天時(shí)間(time-of-day)作為維度或事實(shí)
盡管日期和時(shí)間可以合起來作為操作型日期/時(shí)間戳,當(dāng)天時(shí)間通常從日期維度中分離出來,以避免在日期維度中執(zhí)行行計(jì)算的復(fù)雜性。正如前文所提到的那樣, 20年的日期維,度歷史記錄人約包含7300行。如果改變維度的粒度為每行表示每天的每分鐘,則將會(huì)由每天的1440分鐘產(chǎn)生將近1000萬行。如果將時(shí)間跟蹤到秒級(jí)別,則每年將產(chǎn)生3100萬行。由于日期維度可能是最常用的約束模式中的維度,因此應(yīng)該盡量使其保持較小的容量,易于管理。
產(chǎn)品維度
-
扁平化多對(duì)一
產(chǎn)品維度示例
作者推薦的產(chǎn)品維度表示例
與上面的沒什么區(qū)別,作者強(qiáng)調(diào)維度表的層次要一致
具有內(nèi)嵌含義的屬性值
在維度表中按照自然鍵概念確定的操作型產(chǎn)品代碼通常情況下具有內(nèi)嵌的含義,不同部分表示產(chǎn)品的不同特征。在此情況下,由多個(gè)部分組成的屬性應(yīng)該完整保存在維度表中,也可以分解到不同的組成部件上,將被當(dāng)成不同屬性處理。例如,操作型代碼的第5到第9個(gè)字符表示制造商,則制造商的名稱也應(yīng)該被包含在維度表屬性中。作為屬性或事實(shí)的數(shù)字型
下鉆維度屬性
合理的產(chǎn)品維度表可包含大約50個(gè)左右的描述性屬性。每個(gè)屬性可作為約束和構(gòu)建行頭指針標(biāo)識(shí)的來源。下鉆只不過是從維度表中請(qǐng)求行頭指針以提供更多信息。假定您有一個(gè)簡(jiǎn)單報(bào)表,用于按部門匯總銷售額。如圖,如果需要下鉆,可從產(chǎn)品維度中拖任何屬性,如品牌,放入報(bào)表,緊靠部門之后,可以自動(dòng)下鉆下一個(gè)層次的細(xì)節(jié)情況??梢愿鶕?jù)脂肪含量屬性下鉆,即使該屬性并不在需要上卷的商品層次上。

商店維度
-
多層次維度表
作者推薦的商店維度表
圖中的Floor Plan類型, Photo Processing類型以及Financial Services類型都是短文本描述符,描述特定的商店。不要用一位字符代碼描述它們,而應(yīng)該采用10~20個(gè)字符的描述符,這樣當(dāng)使用下拉方式過濾列表時(shí)或使用報(bào)表標(biāo)記時(shí)能夠具有可理解的含義。描述Selling Square Footage的列是數(shù)字并且理論上是跨商店可加的。可能您會(huì)試圖將其放入事實(shí)表中,然而,很顯然,它是商店的一種約束屬性,用于約束或標(biāo)記的可能比作為可加元素進(jìn)行計(jì)算的可能大。出于該原因,將該屬性放入商店維度表中。
維度表中的日期
促銷維度
促銷維度可能是零售業(yè)模式中最有趣的維度。促銷維度描述了銷售商品的促銷條件。促銷條件包括臨時(shí)降價(jià)、終端通道展示、報(bào)紙廣告、禮券等。促銷維度通常被認(rèn)為是一種·因果維度,因?yàn)樗枋隽苏J(rèn)為可能導(dǎo)致產(chǎn)品銷售發(fā)生改變的因素。無論是總部還是商店的商業(yè)分析師都希望能夠確定的是,某個(gè)促銷是否有效。促銷基于以下一個(gè)或多個(gè)因素來判斷:
- 促銷產(chǎn)品的銷售是否在促銷期間獲得大幅增加,也稱為提升。提升多少的度量可以根據(jù)未進(jìn)行促銷活動(dòng)時(shí),該產(chǎn)品的基本銷售情況來定?;句N售情況可以從先前歷史銷售情況估計(jì)出來,某些情況下,可通過復(fù)雜模型獲得。
- 促銷產(chǎn)品在促銷前或促銷后的銷售,與促銷期間的銷售比較,是否有降低,這種降低是否抵消了促銷期間的銷售增益。換句話說,您是否將常規(guī)價(jià)格產(chǎn)品的銷售轉(zhuǎn)換到降價(jià)銷售產(chǎn)品上?
- 促銷產(chǎn)品在銷售方面表現(xiàn)良好,但是其他與其相鄰的產(chǎn)品的銷售卻顯著降低了。(銷售侵蝕)
- 促銷分類中的所有產(chǎn)品是否都獲得了銷售方面的凈總增益,將考慮促銷前、促銷期間、促銷后的時(shí)間段(市場(chǎng)增大)。
- 促銷是否有利可圖。通常促銷的利潤考慮整個(gè)促銷分類的利潤與基本銷售利潤之,比,當(dāng)然需要考慮促銷期間和銷售侵蝕,以及促銷開銷的影響。

因果關(guān)系的維度屬性是否應(yīng)該再一張維度表中

空外鍵 空屬性 空事實(shí)的處理方法
通常,許多銷售事務(wù)包括未被促銷的產(chǎn)品??蛻舨⒉粫?huì)只將促銷產(chǎn)品放入其購物車中,您當(dāng)然希望他們的購物車中裝滿付全價(jià)購買的商品。促銷維度必須包含一行,具有唯一鍵0或-1,用以表示這不含促銷條件,避免事實(shí)表中出現(xiàn)空的促銷鍵。如果將一個(gè)空值放在事實(shí)表中的已被聲明為外鍵的列,則違背了參照完整性的要求。另外,參照完整性警告,包含空值的鍵是給用戶帶來困惑的主要原因,因?yàn)樗麄儫o法實(shí)現(xiàn)與空值的連接操作。
有時(shí)我們可能在事實(shí)表中也會(huì)遇見空值。讓事實(shí)表非空的方法可通過聚集函數(shù)處理,如SUM,MIN, MAX、COUNT和AVG等。如果用零值替換可能會(huì)使聚集計(jì)算產(chǎn)生傾斜。
實(shí)際銷售模式

擴(kuò)展能力(難點(diǎn))
- 新維度屬性。如果發(fā)現(xiàn)了維度的新文本描述符,可以把這些屬性作為新列增加進(jìn)去。所有現(xiàn)存的應(yīng)用將可以不受這些屬性的影響而繼續(xù)其工作。如果新屬性僅在某特定時(shí)間點(diǎn)可用,則老的維度行中將插入不可用或類似的描述。要警告的是,如果商業(yè)用戶想要根據(jù)新確定的屬性跟蹤歷史數(shù)據(jù)變化,則該場(chǎng)景將更加復(fù)雜。
- 新維度。如前所述,可在事實(shí)表上增加新維度,在事實(shí)表上增加新的外鍵列并將新維度的主鍵填寫到該外鍵列上。
- 新可度量事實(shí)。如果新的可度量事實(shí)可用,可以將它們方便地增加到事實(shí)表。最簡(jiǎn)單的實(shí)例是當(dāng)新事實(shí)在同一個(gè)度量事件中可用,并與已經(jīng)存在的事實(shí)粒度相同時(shí)。此時(shí),事實(shí)表被改變,增加了新列,值被填充至表中。如果新事實(shí)僅在某個(gè)時(shí)間點(diǎn)可用,則將空值填充到舊事實(shí)表行中。更復(fù)雜的情況是,當(dāng)新的可度量事實(shí)以不同粒度出現(xiàn)時(shí),如果新事實(shí)不能分配或分派到事實(shí)表的原始粒度,新事實(shí)應(yīng)有屬于自己的事實(shí)表,因?yàn)樵谕粋€(gè)事實(shí)表中出現(xiàn)不同的粒度是錯(cuò)誤的。
支架表(雪花型的一種)

盡管可以使用支架表,但出于對(duì)其潛在影響的考慮,維度模型盡量不要大量使用支架表。盡量不要使用支架表,縱然使用也是不得已,而不應(yīng)該當(dāng)成一條原則來使用。
蜈蚣表

大量的維度通常表明某些維度不是完全獨(dú)立的,應(yīng)該合并為一個(gè)維度。將同一層次的元素表示為事實(shí)表中不同維度是維度建模常見的錯(cuò)誤。
維度與事實(shí)表鍵(這個(gè)是難點(diǎn))
- 維度表代理鍵:連接作用
- 維度表中的自然鍵和持續(xù)的超自然鍵:維度表的一個(gè)屬性,可作為可靠的標(biāo)識(shí)符
- 退化維度的代理鍵:用來關(guān)聯(lián)維度表???
- 日期維度的代理鍵
- 事實(shí)表的代理鍵(作用??)
維度模型設(shè)計(jì)的4步過程
事實(shí)表粒度
事務(wù)類型事實(shí)表
可加、不可加以及抽取的事實(shí)
維度屬性,包括指標(biāo)、數(shù)字化描述符以及多層次
日歷日期維度,加上當(dāng)天時(shí)間(time-of-day)維度☆
因果維度,例如,促銷維度☆
退化維度,例如,交易收據(jù)號(hào)碼
維度模型中的空值維度
模型的可擴(kuò)展性
無事實(shí)的事實(shí)表
代理鍵、自然鍵與持久鍵☆
基于雪花模式的維度屬性
包含“太多維度的”蜈蚣事實(shí)表



