摘 要:在數(shù)據(jù)倉庫建設(shè)中,維度的層次結(jié)構(gòu)建模關(guān)系到數(shù)據(jù)組織、存儲(chǔ)、分析和展現(xiàn),甚至?xí)绊懙綌?shù)據(jù)挖掘的應(yīng)用,是一個(gè)相當(dāng)重要的設(shè)計(jì)過程。文章針對(duì)政府決策支持系統(tǒng)建設(shè)中常見的非齊整非平衡及混合的層次結(jié)構(gòu)建模作了較深入的分析和研究,論述了采用星型模型和雪花模型實(shí)現(xiàn)非齊整非平衡及其混合層次結(jié)構(gòu)的建模方法,并結(jié)合例子具體實(shí)現(xiàn)了在Omde數(shù)據(jù)倉庫中的類層次結(jié)構(gòu)建模。
關(guān)鍵詞:非齊整層次結(jié)構(gòu);非平衡層次結(jié)構(gòu);混合層次結(jié)構(gòu);雪花模型;數(shù)據(jù)倉庫;聯(lián)機(jī)分析處理;電子政務(wù)
0引言
隨著國內(nèi)電子政務(wù)建設(shè)的深入發(fā)展以及信息化程度的不斷提高,為提高決策的科學(xué)性和規(guī)范性,促進(jìn)經(jīng)濟(jì)發(fā)展,政府引入決策支持系統(tǒng)DSS(Decision Supported System)來輔助經(jīng)濟(jì)、政策決策成為電子政務(wù)建設(shè)的一種發(fā)展趨勢(shì)。采用“數(shù)據(jù)倉庫(Data Warehouse)+聯(lián)機(jī)分析處理(On Line Analytical Processing)+數(shù)據(jù)挖掘(Data Mining)”為技術(shù)基礎(chǔ)的決策支持系統(tǒng)DSS是目前比較成熟的解決方案,數(shù)據(jù)倉庫實(shí)現(xiàn)了大量歷史業(yè)務(wù)數(shù)據(jù)的存儲(chǔ)和組織,聯(lián)機(jī)分析處理實(shí)現(xiàn)了數(shù)據(jù)的分析和展現(xiàn),數(shù)據(jù)挖掘?qū)崿F(xiàn)了知識(shí)發(fā)現(xiàn)。
不像電信和銀行的DSS(企業(yè)中的DSS有時(shí)也常常被稱為商業(yè)智能Business Intelligence)只針對(duì)本企業(yè)數(shù)據(jù),政府DSS中的數(shù)據(jù)涉及到社會(huì)方方面面,從國民經(jīng)濟(jì)到居民消費(fèi),從工業(yè)到農(nóng)業(yè),從科技到衛(wèi)生等等,其特點(diǎn)是非相加的數(shù)據(jù)(nonadditive)和半相加的數(shù)據(jù)(semiadditive)居多;同時(shí)其數(shù)據(jù)的非齊整非平衡等特殊層次結(jié)構(gòu)比較多。這些特點(diǎn)給數(shù)據(jù)倉庫的層次結(jié)構(gòu)建模帶來了較多的設(shè)計(jì)和實(shí)現(xiàn)難度。
鑒于政府DSS中的數(shù)據(jù)特點(diǎn),在設(shè)計(jì)過程中常常不能采用常用的星型模型建模,更多地需要采用雪花模型建模。
1層次結(jié)構(gòu)(層次)
層次結(jié)構(gòu)是維度中成員的集合以及這些成員之間的相對(duì)位置的描述,是組織數(shù)據(jù)的邏輯結(jié)構(gòu)。通常講的下鉆(drilldown)就是指遍歷層次結(jié)構(gòu)的一種行為,即從某一維層次結(jié)構(gòu)的高層遍歷到細(xì)節(jié)低層;上卷(roll up)是在某一維上將低層次的細(xì)節(jié)數(shù)據(jù)概括到高層次的數(shù)據(jù)。層次結(jié)構(gòu)是業(yè)務(wù)不可缺少的組成部分,同時(shí)也是數(shù)據(jù)倉庫和OLAP中要處理的基本問題。
層次組成方式主要有以級(jí)別(1evel-based)為基礎(chǔ)和以有父子關(guān)系的值(Parent Child Value-based)為基礎(chǔ)的二類組成方式。本文主要討論基于級(jí)別的層次組成方式,因?yàn)樗趯?shí)際中更常見,更具有通用性。通常也把層次結(jié)構(gòu)稱為層次樹,它是一種特殊的“父-子”聯(lián)系類型,孩子代表低層細(xì)節(jié)或父親的粒度。維表中的列代表了一個(gè)層次結(jié)構(gòu)中特定的級(jí)別。因?yàn)榫S表中多個(gè)成員之間可能存在一種或多種關(guān)系,所以一個(gè)維表可以對(duì)應(yīng)多種層次結(jié)構(gòu)。層次結(jié)構(gòu)存在以下幾種類型:
a.正常層次結(jié)構(gòu)(Normal Hierarchy)
b.不齊整的層次結(jié)構(gòu)(skip Hierarchy)
c.不平衡層次結(jié)構(gòu)(Ragged Hierarchy)
d、不平衡和不齊整層次結(jié)構(gòu)(Ragged with Skip Hierarchy)
另外,根據(jù)層次所在的維數(shù)據(jù)能否匯總,可分為聚集層次結(jié)構(gòu)和非聚集層次結(jié)構(gòu)。
1.1正常層次結(jié)構(gòu)
正常層次結(jié)構(gòu)指的是齊整和平衡的層次結(jié)構(gòu),它的所有層次分支都將降至具有相同級(jí)別的最低層次,并且每個(gè)成員的邏輯父代直接位于該成員的上一級(jí)別。比如在我國的行政建制的地域維中包括國家、省、市三個(gè)級(jí)別,它們組成的層次為“國家一省一市”,在不考慮直轄市的情況下,此層次結(jié)構(gòu)就是齊整和平衡層次結(jié)構(gòu),如圖1所示。
1.2不齊整層次結(jié)構(gòu)
不齊整層次結(jié)構(gòu)中,各層次分支從高層遍歷到最低層所跨過的層次級(jí)別會(huì)有所不同,也就是說,至少有一個(gè)成員的邏輯父級(jí)不同于其它成員的父級(jí)。在上面提到的地域維中如果增加直轄市——上海,如圖2所示,由于直轄市上海的上一級(jí)不是省而是全國,上海市所隸屬分支的層次級(jí)別的組成將與其它分支不同,所以此層次結(jié)構(gòu)為不齊整層次結(jié)構(gòu)。
1.3不平衡層次結(jié)構(gòu)
不平衡層次結(jié)構(gòu)指的是各層次結(jié)構(gòu)分支從高層往低層的遍歷過程中將降至具有不同級(jí)別的最低層次。如圖3所示GDP維層次分類,其“第一產(chǎn)業(yè)”分支沒有下層數(shù)據(jù)。
1.4不平衡及不齊整混合層次結(jié)構(gòu)
不平衡及不齊整混合層次結(jié)構(gòu)指的是既有不齊整分支也有不平衡分支的層次結(jié)構(gòu)。如圖4所示層次結(jié)構(gòu),既包含不平衡分支和不齊整分支,還包含一條既有不平衡又有不齊整特性的分支。
1.5聚集層次結(jié)構(gòu)與非聚集層次結(jié)構(gòu)
在數(shù)據(jù)倉庫中通過層次結(jié)構(gòu),可以定義數(shù)據(jù)匯總/聚集。例如商品銷售中,從時(shí)間維分析,可以建立由級(jí)別月、季、年組成的“年一季一月”層次結(jié)構(gòu),從而可將月商品銷售額聚集成季度商品銷售額,季度商品銷售額再聚集成年度商品銷售額。具有此類可相加事實(shí)的層次結(jié)構(gòu)就稱為聚集層次結(jié)構(gòu)。而在數(shù)據(jù)倉庫中也存在一些事實(shí)值,它們并沒有表現(xiàn)出如商品銷售額那樣的相加性,如一個(gè)省的GDP增長率,將每年的增長率相加是沒有多少意義的,然而如果取其平均會(huì)得到一個(gè)有意義的數(shù)值,這樣的度量值被稱為半相加的事實(shí)。具有半相加的事實(shí)或非相加事實(shí)的層次結(jié)構(gòu)為非聚集層次結(jié)構(gòu)。如在全國一省一市層次中,各省的GDP增長率就不能由其下面各市的GDP增長率聚集而來,同樣全國的GDP增長率也不能由各省的GDP增長率聚集而成。省的GDP增長率、全國的GDP增長率必須作為事實(shí)存儲(chǔ)在數(shù)據(jù)倉庫事實(shí)表中。
有些特殊情況下,某些子類僅為父類的一部分成員,如在圖3所示的不平衡層次結(jié)構(gòu)中,“第三產(chǎn)業(yè)”的下一級(jí)別的各個(gè)成員(#交通運(yùn)輸郵電業(yè)、批零貿(mào)易餐飲業(yè)和舟金融保險(xiǎn)業(yè))僅僅為組成“第三產(chǎn)業(yè)”的一部分,子類與父類之間不存在數(shù)據(jù)聚集的關(guān)系。
對(duì)于在維度中預(yù)定義的聚集層次結(jié)構(gòu),可以實(shí)現(xiàn)數(shù)據(jù)匯總和鉆取功能。而對(duì)于非聚集的層次結(jié)構(gòu)。我們主要是利用層次的數(shù)據(jù)鉆取功能,通過按層次的上卷和下鉆分析查看和展現(xiàn)數(shù)據(jù)。
2非齊整非平衡及其混合層次結(jié)構(gòu)的建模
在政府DSS的建模中涉及非齊整層次結(jié)構(gòu)、非平衡層次結(jié)構(gòu)、非聚集層次結(jié)構(gòu)或幾者的組合的情況比較多,其處理方法各不相同。下面分?jǐn)?shù)據(jù)聚集和數(shù)據(jù)非聚集兩部分來論述它們的實(shí)現(xiàn)。
2.1數(shù)據(jù)聚集
2.1.1采用占位符的建模實(shí)現(xiàn)
對(duì)于數(shù)據(jù)是聚集的非正常層次結(jié)構(gòu),在建模過程中我們可以先對(duì)層次中的非齊整分支和非平衡分支分別作齊整化和平衡化處理。
齊整化是指用子級(jí)成員往上占用直接父級(jí)成員位置,如果子級(jí)成員與直接父級(jí)中間跨越多個(gè)級(jí)別,則一級(jí)一級(jí)用同一方法處理,從而實(shí)現(xiàn)非齊整層次的齊整化。如將圖2中的非齊整層次改造成圖5所示的齊整化層次,只要在上海市的直接父級(jí)即省級(jí)成員中填入占位符“上海市”。這樣處理后,全國聚集的值也是正確的,因?yàn)槭〖?jí)中的“上海市”是市級(jí)別中上海市的聚集值。
與非齊整層次處理方法類似,對(duì)于非平衡層次也可采用占位符進(jìn)行平衡化,但與非齊整層次占位處理順序相反。非平衡結(jié)構(gòu)的處理是用父級(jí)成員占用子級(jí)成員的位置,并一直迭代處理到層次的最低級(jí)別,也即將葉結(jié)點(diǎn)降至層次樹的最低層。平衡化過程如圖6中的Ragged Branch和Ragged with skipped-levelbrance分支所示。
圖6中也展示了不平衡及不齊整混合層次平衡化和齊整化的處理過程。改造后的層次適合常用的星型和雪花模型建模。實(shí)際上,上述解決方法是有一定的適用范圍的,如整個(gè)層次只是很少部分需“占位符”填補(bǔ)的時(shí)候采用這樣的解決方法能較好滿足實(shí)際需求。但是如果層次大部分的分支都不是“滿”的話,填補(bǔ)“占位符”的方法不僅費(fèi)時(shí),而且費(fèi)力,在數(shù)據(jù)上卷和下鉆的過程中可能會(huì)遍歷幾次“占位符”才能看到具體的事實(shí),這也會(huì)給用戶操作帶來許多的不便。特別是遍歷的層次超過業(yè)務(wù)本身邏輯的層次深度時(shí),可能給用戶訪問帶來極大困難。
下面用占位符平衡化的“支出法生產(chǎn)總值”維層次為例,參見圖7,描述采用星型模型和雪花模型進(jìn)行層次建模的方法。圖中帶下劃線文字為占位符。
星型模型建模示意如圖8所示。圖中事實(shí)表的列“GDP_分類”為外鍵,引用維表ZCFGDP_STAR_DIM的“LD”列,事實(shí)表與維表之間滿足參照完整性約束。
“支出法生產(chǎn)總值”雪花模型建模示意如圖9所示。數(shù)據(jù)倉庫中的雪花模型是對(duì)維度表采用了規(guī)范化處理,將圖8中的維表分解為四張子維表(采用雪花模型建模,維表的個(gè)數(shù)與維層次級(jí)別數(shù)相等),共同組成了“GDP_分類”維表。
在星型模型和雪花模型中事實(shí)表的“GDP_分類”列都為外鍵,引用維表中的“L-D”列(層次中最低級(jí)別),事實(shí)表與維表存在參照完整性約束,即事實(shí)表\"GDP_分類”列中存儲(chǔ)的是維層級(jí)中最低級(jí)別標(biāo)識(shí),實(shí)際上就是層次樹中葉結(jié)點(diǎn)標(biāo)識(shí)。
在Oracle OLAP AW(OLAP分析空間一OLAP Analytic Workspace)中,數(shù)據(jù)倉庫采用為星型模型時(shí),維表與OLAP維的映射采用星型模型,維表的列與維層次級(jí)別成員一一對(duì)應(yīng);數(shù)據(jù)倉庫為雪花模型時(shí),維表與OLAP維的映射采用雪花模型,子維表的主鍵與維中對(duì)應(yīng)級(jí)別成員一一對(duì)應(yīng),同時(shí)關(guān)聯(lián)其父類,映射關(guān)系與圖11所示類似。
在事實(shí)表與OLAP的CUBE映射中,事實(shí)表中“GDP_分類”關(guān)聯(lián)CUBE中對(duì)應(yīng)維層次的最低級(jí)別,映射關(guān)系與圖12所示類似,但其只需關(guān)聯(lián)“LD”級(jí)別。
2.1.2利用OLAP雪花模型的建模
可以看到,通過“GDP_分類”維表下鉆“貨物和服務(wù)出口”數(shù)據(jù),在上述星型建模和雪花模型中需遍歷“支出法生產(chǎn)總值->貨物和服務(wù)出口->貨物和服務(wù)出口->貨物和服務(wù)出口”才能看到“貨物和服務(wù)出口”的事實(shí),在遍歷過程中要經(jīng)過二個(gè)“占位符”。
而采用OLAP雪花模型建??梢杂行У貙?shí)現(xiàn)按業(yè)務(wù)邏輯層次的下鉆、分析展現(xiàn)。圖10展現(xiàn)的是利用OLAP雪花模型對(duì)“GDP_分類”維的建模。圖中帶箭頭的實(shí)線表示維表之間關(guān)聯(lián)引用,虛線標(biāo)識(shí)出“GDP_分類”列的數(shù)據(jù)來源于層次樹中的葉子結(jié)點(diǎn)。
實(shí)現(xiàn)該模型,首先要用一系列關(guān)聯(lián)表實(shí)現(xiàn)維的層次,同時(shí)保證事實(shí)表的列“GDP分類”的值來自維表的多個(gè)特定列(包含有葉結(jié)點(diǎn),葉結(jié)點(diǎn)代表具體事實(shí)值,非葉結(jié)點(diǎn)的值由葉結(jié)點(diǎn)聚集而成)。而在數(shù)據(jù)倉庫中的常規(guī)雪花模型中,事實(shí)表應(yīng)與維表符合引用完整性,即事實(shí)表中的外鍵字都能分別與對(duì)應(yīng)維表中的主關(guān)鍵字正確匹配。而目前數(shù)據(jù)庫外鍵不支持針對(duì)多個(gè)列的參照,所以圖lO所示的事實(shí)表與維表之間不滿足參照完整性約束。
在OLAP AW實(shí)現(xiàn)數(shù)據(jù)倉庫中的維表與OLAP維的映射如圖ll所示。
圖11左側(cè)的四張是在數(shù)據(jù)倉庫中已經(jīng)過規(guī)范化處理的維表,借助外鍵形成級(jí)聯(lián)關(guān)系,符合3NF。維表中列與OLAP維層次級(jí)別中對(duì)應(yīng)的“成員”和“父級(jí)”相關(guān)聯(lián)。
在OLAP AW中實(shí)現(xiàn)數(shù)據(jù)倉庫中事實(shí)表與CUBE映射如圖12所示。事實(shí)表“GDP_分類”關(guān)聯(lián)CUBE中具有計(jì)子結(jié)點(diǎn)的“L-B”“L-c”、“L_D”級(jí)別。當(dāng)然為了安全起見,可以關(guān)聯(lián)維中所有級(jí)別。
由于數(shù)據(jù)按“GDP_分類”維是聚集的,在OLAP CUBE聚集規(guī)則中設(shè)置維的運(yùn)算符為“求和”。
通過上面維表與OLAP維的映射以及事實(shí)表與CUBE映射的配置信息,再加上維表和事實(shí)表中存儲(chǔ)的數(shù)據(jù),利用SQL和一些臨時(shí)表不難寫出實(shí)現(xiàn)數(shù)據(jù)聚集操作和過程。OLAP引擎也正是利用了這些必要的配置信息,實(shí)現(xiàn)數(shù)據(jù)聚集和其它分析展現(xiàn)功能。
從中可以看到,利用OLAP雪花模型實(shí)現(xiàn)層次建模比占位符展現(xiàn)邏輯更清晰,維表處理工作少,實(shí)際中更為常用。
2.2數(shù)據(jù)非聚集
數(shù)據(jù)非聚集的非正常層次結(jié)構(gòu)在政府決策支持系統(tǒng)中更為常見,由于數(shù)據(jù)非聚集,事實(shí)表中維對(duì)應(yīng)列的數(shù)據(jù)來源于層次樹中所有的結(jié)點(diǎn)標(biāo)識(shí)。目前在Oracle OLAP AW中星型模型對(duì)此類層次建模暫不支持,采用OLAP雪花模型的建模方法比較簡(jiǎn)明有效。
下面以圖3表示的“生產(chǎn)法生產(chǎn)總值”維為例說明采用OLAP雪花模型的非聚集層次建模。圖13展現(xiàn)了“生產(chǎn)法生產(chǎn)總值”數(shù)據(jù)倉庫中事實(shí)表與維表的關(guān)系。圖中帶箭頭的實(shí)線表示表之間關(guān)聯(lián)引用,虛線標(biāo)識(shí)出“GDP分類”列的數(shù)據(jù)來源于層次樹中的所有結(jié)點(diǎn)。
“生產(chǎn)法生產(chǎn)總值”事實(shí)表與OLAP CUBE的映射,如圖15所示,事實(shí)表\"GDP_分類”與CUBE中關(guān)聯(lián)維中所有級(jí)別相關(guān)聯(lián)。
由于數(shù)據(jù)按“生產(chǎn)法生產(chǎn)總值”維是非聚集的,在OLAPCUBE聚集規(guī)則中設(shè)置維的運(yùn)算符為“不求和”,如圖16所示。
從圖16中可以看到,在CUBE設(shè)置規(guī)則中處理的粒度是維,所以某一層次分支不聚集,整個(gè)維就只能采用不聚集(不求和)處理,即使有些分支聚集(如“生產(chǎn)法生產(chǎn)總值”層次的“第二產(chǎn)業(yè)”),也必須以事實(shí)的形式存儲(chǔ)在事實(shí)表中。
在OLAP AW中查看“生產(chǎn)法生產(chǎn)總值”的數(shù)據(jù),其結(jié)果如
3結(jié)束語
在數(shù)據(jù)倉庫中層次建模主要依靠維表和事實(shí)表中與維對(duì)應(yīng)列存儲(chǔ)的數(shù)據(jù)共同實(shí)現(xiàn)維的層次結(jié)構(gòu)和層次邏輯,在層次建模中需格外注意它們之間的關(guān)系。數(shù)據(jù)聚集事實(shí)表對(duì)應(yīng)列只能存儲(chǔ)層次樹中葉子結(jié)點(diǎn)的標(biāo)識(shí),非聚集則存儲(chǔ)的可以是層次樹中整個(gè)結(jié)點(diǎn)的標(biāo)識(shí)。
在數(shù)據(jù)倉庫星型模型和雪花模型中是維表與事實(shí)表建立關(guān)系;在OLAP星型模型和雪花模型中是OLAP維與CUBE建立關(guān)系,OLAP維又與數(shù)據(jù)倉庫中對(duì)應(yīng)的維表建立映射,CUBE又與數(shù)據(jù)倉庫中對(duì)應(yīng)的事實(shí)表建立映射。數(shù)據(jù)倉庫中的雪花模型對(duì)于正常層次適用,對(duì)于非正常層次需改造維表;OLAP雪花模型功能則更為強(qiáng)大和靈活,可以直接處理非正常層次。數(shù)據(jù)倉庫中的維表和事實(shí)表是OLAP的基礎(chǔ),數(shù)據(jù)倉庫中維表的設(shè)計(jì)直接影響到OLAP的展現(xiàn)的方式與正確性,實(shí)際建模過程中應(yīng)盡量考慮利用OLAP星型和雪花模型的優(yōu)勢(shì),使數(shù)據(jù)展現(xiàn)分析更清晰、更符合業(yè)務(wù)層次。
另外,雖然雪花模型相對(duì)星型模型增加了處理表的數(shù)量,增加了查詢的復(fù)雜度,降低了部分性能,但其有效處理非齊整層次、非平衡層次和其混合層次的能力,在政府DSS實(shí)施中發(fā)揮了不可替代的作用。
(注:本文中所涉及到的圖表、注解、公式等內(nèi)容請(qǐng)以PDF格式閱讀原文。)