1 引 言
隨著信息化時(shí)代的到來,企業(yè)紛紛建立起了自己的數(shù)據(jù)庫應(yīng)用系統(tǒng),由計(jì)算機(jī)管理代替手工操作,以此來收集、存貯、管理業(yè)務(wù)操作數(shù)據(jù),改善辦公環(huán)境,提高操作人員的工作效率。這類系統(tǒng)主要是傳統(tǒng)的數(shù)據(jù)庫應(yīng)用系統(tǒng),是面向業(yè)務(wù)操作設(shè)計(jì)的。但在面對(duì)越來越激烈的市場競爭時(shí),企業(yè)必須把業(yè)務(wù)經(jīng)營同市場需求聯(lián)系起來,在此基礎(chǔ)上作出科學(xué)、正確的決策,以求生存和發(fā)展。越來越多的企業(yè)認(rèn)識(shí)到,只有靠充分利用、發(fā)掘其現(xiàn)有數(shù)據(jù),才能實(shí)現(xiàn)更大的效益。面向業(yè)務(wù)操作的系統(tǒng)越來越難以滿足這種需求,因此面向分析操作的數(shù)據(jù)倉庫系統(tǒng)應(yīng)運(yùn)而生,在此基礎(chǔ)上為了提高面向分析的操作性能發(fā)展起了在線聯(lián)機(jī)分析處理(OLAP)技術(shù),它目標(biāo)是提供給用戶從多種角度快速、穩(wěn)定、交互地存取數(shù)據(jù),以便深入觀察數(shù)據(jù),為決策提供支持。OLAP以多維的方式來組織和顯示數(shù)據(jù),它的一個(gè)重要特點(diǎn)是多維數(shù)據(jù)分析,多維分析是指對(duì)以多維形式組織起來的數(shù)據(jù)采取切片、切塊、旋轉(zhuǎn)、上卷、下鉆等各種分析動(dòng)作,以求剖析數(shù)據(jù),使最終用戶能從多個(gè)角度、多側(cè)面地觀察數(shù)據(jù)庫中的數(shù)據(jù),從而深入地了解包含在數(shù)據(jù)中的信息、內(nèi)涵。
該文提出了一種多維數(shù)據(jù)的二維表格形式展現(xiàn)的設(shè)計(jì),并給出了實(shí)現(xiàn)的算法,通過此工具可以支持多維分析的各種分析動(dòng)作,將數(shù)據(jù)直觀地展現(xiàn)在最終用戶面前。
2 數(shù)據(jù)倉庫與聯(lián)機(jī)分析處理技術(shù)
2.1 數(shù)據(jù)倉庫
著名的數(shù)據(jù)倉庫專家W.H.Inmon在其著作《Building the Data Warehouse》一書中給予如下描述:數(shù)據(jù)倉庫(Data Warehouse)是一個(gè)面向主題的(Subject Oriented)、集成的(Integrate)、相對(duì)穩(wěn)定的(Non-Volatie)、反映歷史變化(Time Variant)的數(shù)據(jù)集合,用于支持管理決策。整個(gè)數(shù)據(jù)倉庫系統(tǒng)是一個(gè)包含數(shù)據(jù)源,數(shù)據(jù)的存儲(chǔ)與管理,OLAP服務(wù)器,前端工具四個(gè)層次的體系結(jié)構(gòu),具體如圖1所示。
圖1 數(shù)據(jù)倉庫系統(tǒng)體系結(jié)構(gòu)
2.2 聯(lián)機(jī)分析處理(OLAP)
關(guān)系數(shù)據(jù)庫之父E.F.Codd提出了多維數(shù)據(jù)庫和多維分析的概念,即OLAP。維就是人們觀察數(shù)據(jù)的角度,維存在細(xì)節(jié)程度不同的多個(gè)描述方面,維的多個(gè)描述方面稱為維的層次。例如,時(shí)間維有日、月、季、年等層次來描述。多維數(shù)據(jù)一般都以數(shù)據(jù)立方體的結(jié)構(gòu)存放。它用三維或更多的維數(shù)來描述一個(gè)對(duì)象,每個(gè)維彼此垂直。數(shù)據(jù)的測量值發(fā)生在維的交叉點(diǎn)上,數(shù)據(jù)空間的各個(gè)部分都有相同的維屬性。如圖2所示。
圖2 數(shù)據(jù)立方體
2.3 多維數(shù)據(jù)分析
多維數(shù)據(jù)分析是OLAP的一個(gè)重要屬性,是指對(duì)以多維形式組織起來的數(shù)據(jù)采取切片、切塊、旋轉(zhuǎn)、上卷、下鉆等各種分析動(dòng)作,以求剖析數(shù)據(jù),使最終用戶能從多個(gè)角度、多側(cè)面地觀察數(shù)據(jù)庫中的數(shù)據(jù)。
(1)切片(Slice)與切塊(Dice):切片是指在多維數(shù)組的某一維上選定一維成員的動(dòng)作稱為切片,切塊在多維數(shù)組的某一維上選定某一區(qū)間的維成員的動(dòng)作稱為切塊,即限制多維數(shù)組的某一維的取值區(qū)間。顯然,當(dāng)這一區(qū)間只取一個(gè)維成員時(shí),即得到一個(gè)切片。
(2)旋轉(zhuǎn):是改變一個(gè)報(bào)告或頁面顯示的維方向。例如,交換行和列,或是把行維移到列維中去,或是把頁面顯示中的一個(gè)維和頁面外的維進(jìn)行交換。
(3)上卷(Roll Up)與下鉆(Drill Down):上卷是在某一維上將低層次的細(xì)節(jié)數(shù)據(jù)概括到高層次的匯總數(shù)據(jù),或者減少維數(shù);而下鉆則相反,它從匯總數(shù)據(jù)深入到細(xì)節(jié)數(shù)據(jù)進(jìn)行觀察,或增加新維。這兩者都是改變維的層次和變換分析的粒度的操作。
3 二維形式表格工具的設(shè)計(jì)思想
數(shù)據(jù)倉庫是按主題組織數(shù)據(jù)的,每個(gè)主題可以看作是一個(gè)數(shù)據(jù)立方體,一般每個(gè)數(shù)據(jù)立方體都有好幾個(gè)維,每個(gè)維內(nèi)又有一些層次。復(fù)雜的數(shù)據(jù)立方體在展現(xiàn)上缺乏直觀性,尤其當(dāng)維度超出三維后,數(shù)據(jù)的表示就比較困難,因此這里采用一種二維表格的形式來表示整個(gè)數(shù)據(jù)立方體,并在此之上進(jìn)行多維分析操作。數(shù)據(jù)立方體中的維都被劃分到行維或列維兩種維度中去,在二維表的固定行和固定列中用樹型結(jié)構(gòu)體現(xiàn)維的層次結(jié)構(gòu)和層次關(guān)系,在行維和列維交織成的二維表中顯示相應(yīng)的度量數(shù)據(jù),實(shí)現(xiàn)以二維表格反映多維特征,提供數(shù)據(jù)立方體的可視化表示。
該設(shè)計(jì)的關(guān)鍵在于要在二維表中的固定行和固定列中用樹型結(jié)構(gòu)體現(xiàn)維的層次結(jié)構(gòu)和層次關(guān)系。實(shí)現(xiàn)的方法是在固定行和固定列的每個(gè)單元格對(duì)象中加入能反映層次關(guān)系的屬性,并在單元格的一端留出適當(dāng)?shù)目瞻,在空白中用加減號(hào)顯示有沒有下一級(jí)層次和下一級(jí)層次有沒有展開,并畫出反映層次的樹枝。在單元格中添加方法,使程序能響應(yīng)用戶鼠標(biāo)的點(diǎn)擊,完成下一級(jí)層次單元格的收放,這樣的單元格稱為樹型單元格。在此類單元格支持的基礎(chǔ)上,將固定行和固定列中的單元格統(tǒng)一管理,形成樹型固定行和樹型固定列對(duì)象,提供獲取單元格類型、插入或刪除子樹、設(shè)置擴(kuò)展一層單元格、設(shè)置收起下面所有層單元格等方法。通過樹型單元格對(duì)象與樹型固定行和固定列對(duì)象的配合實(shí)現(xiàn)用戶的上卷和下鉆操作。如圖3所示。
圖3 樹型列單元格與樹型固定列對(duì)象
由于用戶的切片、切塊和旋轉(zhuǎn)操作涉及大量數(shù)據(jù)的檢索和計(jì)算,因此客戶端將用戶的選擇變成相應(yīng)的查詢請(qǐng)求提交給后臺(tái)的OLAP服務(wù)器進(jìn)行,然后通過記錄集或多維數(shù)組的形式接收服務(wù)器返回的結(jié)果,然后再顯示到二維表格中?蛻舳讼蚝笈_(tái)的OLAP服務(wù)器發(fā)出的查詢請(qǐng)求中包括用戶選擇了哪些維中的哪些層次,選擇了什么值,以什么樣的順序進(jìn)行分組。本質(zhì)上就是一個(gè)具有如下形式的多維查詢:
Select 某變量 from 某數(shù)據(jù)立方
Where 切片層次 1=Value1 and … 切片層次 n=ValueN
Group By 層次 1,…,層次n
4 二維形式表格工具的實(shí)現(xiàn)
樹型列單元格和固定列對(duì)象配合在列的方向上實(shí)現(xiàn)樹型結(jié)構(gòu)。
樹型列單元格的定義為:
Object TreeFixedColumnCell{
Int iRow,iCol;//單元格所在的行和列的編號(hào)
Int iHeight,iWidth;//單元格的高度和寬度
Int iLevel;//單元格所在的層次在樹中的層號(hào),層號(hào)從1開始
Bool IsVisible;//是否可見
String strText;//單元格的內(nèi)容
DrawTreeGragph()//設(shè)置單元格左邊的空白,并在空白中畫出表示下一層狀態(tài)的+/-號(hào)和反映層數(shù)的樹枝
}
樹型固定列的對(duì)象的定義為:
Object TreeFixedColumn{
Int iRowCount;//被其管理的樹型列單元格的個(gè)數(shù)
TreeCellHasPlusMinus(iRow);//判斷指定行是否有下一級(jí)的層次
InsertTreeBranch(iRow,TreeStru);//在指定行下插入一個(gè)TreeStru結(jié)構(gòu)的子樹
TreeExpandOrCollapse(iRow);//判斷下一步是擴(kuò)展還是收起下面的層次
TreeExpandOneLevel(iRow);//在指定行下展開下一層的單元格
TreeCollapseAllSubLevel(iRow);//將指定行下所有層次的單元格收起
TreeDisplayLines(n);//設(shè)置處是顯示時(shí)展開到第& 層
TreeRefreshRows();//按照樹型單元格的可見屬性調(diào)整被其管理的樹型列單元格的高度后重畫整個(gè)表格
}
樹型行單元格和固定行對(duì)象配合在行的方向上實(shí)現(xiàn)樹型結(jié)構(gòu),它們的定義與列上的基本一致,只不過是將行和列的操作對(duì)換了一下。當(dāng)重畫整個(gè)表格時(shí),系統(tǒng)自動(dòng)根據(jù)每個(gè)單元格的長和寬重新在客戶端的屏幕上繪制出來。
可以看到,這種實(shí)現(xiàn)方法中上卷操作實(shí)際上并不刪除行或列,而是使它們的高度或?qū)挾仍O(shè)為0,使用戶看不到它們,當(dāng)用戶再次作下鉆操作時(shí)可再將它們顯示出來,而不用再次發(fā)起查詢請(qǐng)求。這樣就節(jié)省了系統(tǒng)的各種開銷,如網(wǎng)絡(luò)帶寬、服務(wù)器和客戶端CPU利用率等。此方法并不保存一個(gè)樹型的結(jié)構(gòu),而是通過對(duì)相鄰單元格的層號(hào)和可見屬性的計(jì)算,設(shè)置相應(yīng)的可見屬性,再通過單元格自身的繪制方法在用戶面前展示出樹型的結(jié)構(gòu)。這種方法具有復(fù)雜度低、運(yùn)算量小等優(yōu)點(diǎn)。
5 數(shù)據(jù)的填充
5.1 填充算法
由以上結(jié)構(gòu)的表格可知,表格里將顯示用戶所選維的所有不同層次的不同粒度的數(shù)據(jù)。因此服務(wù)器端將返回給客戶端包含各種粒度的聚集數(shù)據(jù)的一組記錄集或一組多維數(shù)組,這一組記錄集根據(jù)所有層次在固定行和固定列中的分布情況進(jìn)行編號(hào),聚集程度越高編號(hào)越小。如固定列的維的層次分別是a,b,固定行的維的層次分別為d,e,f,M代表變量,則記錄集的編號(hào)順序如下:
記錄集[0]的字段順序?yàn)閍,d,M
記錄集[1]的字段順序?yàn)閍,d,e,M
記錄集[2]的字段順序?yàn)閍,d,e,f,M
記錄集[3]的字段順序?yàn)閍,b,d,M
記錄集[4]的字段順序?yàn)閍,b,d,e,M
記錄集[5]的字段順序?yàn)閍,b,d,e,f,M
在此基礎(chǔ)上,填充算法如下:
根據(jù)所選維的層次關(guān)系從記錄集中讀取數(shù)據(jù)在表格的第一行上用樹型行單元格和樹型固定行對(duì)象構(gòu)造樹型結(jié)構(gòu),在第一列上用樹型列單元格和樹型固定列對(duì)象構(gòu)造樹型結(jié)構(gòu):
FOR 每一行 DO
FOR 行中的每列 DO
獲取所在行的樹型列單元格的層號(hào)i
獲取所在列的樹型行單元格的層號(hào)j
從編號(hào)為[(i-1)*固定行對(duì)象的層次總數(shù)+j-1]的記錄集中讀取一條記錄
IF 該條記錄的維的層次值與該單元格所在的行和列上樹型結(jié)構(gòu)的值一致
THEN
將記錄中的變量值填入單元格中,該記錄集的指針向下移一條
ELSE
在單元格中填入默認(rèn)值
END IF
END FOR
END FOR
5.2 數(shù)據(jù)的動(dòng)態(tài)填充
上面介紹的填充算法要求將用戶選定的所有維的所有層次的數(shù)據(jù)一次性的填充進(jìn)表格中,這需要后臺(tái)的OLAP服務(wù)器返回各種程度聚集操作的結(jié)果,需要進(jìn)行大量的查詢和計(jì)算。當(dāng)數(shù)據(jù)量很大時(shí),在性能上就會(huì)變得很差,很難保證能在較短時(shí)間內(nèi)返回的查詢結(jié)果。而與此同時(shí),最終用戶在通過二維表格觀察數(shù)據(jù)時(shí),很少需要從最開始就看到所有層次的數(shù)據(jù),而是先看聚集程度較高的層次,然后根據(jù)自己關(guān)心的領(lǐng)域和程度,有選擇地進(jìn)行下鉆操作,直到最后也不一定將所有層次的數(shù)據(jù)都看到。這就允許在返回查詢結(jié)果時(shí),不返回全部層次的結(jié)果,而只是返回一部分聚集程度較高的結(jié)果,只把這部分?jǐn)?shù)據(jù)填入表格,而展現(xiàn)給用戶的層次也最多只到有數(shù)據(jù)填充的層次。當(dāng)用戶進(jìn)行進(jìn)一步下鉆操作時(shí),將用戶所作的選擇提交給OLAP服務(wù)器進(jìn)行查詢, 返回結(jié)果后再填充進(jìn)相應(yīng)的單元格中。由于下鉆時(shí)只擴(kuò)展一層,因此查詢量很小,所花費(fèi)的時(shí)間在可承受范圍之內(nèi),當(dāng)系統(tǒng)性能好時(shí),用戶基本感覺不到。這種填充方式稱為動(dòng)態(tài)填充。
6 結(jié)束語
文章提出了一種多維數(shù)據(jù)用二維表格形式展現(xiàn)的方法,實(shí)現(xiàn)以二維表格反映多維特征,提供數(shù)據(jù)立方體的可視化表示。并考慮大數(shù)據(jù)量時(shí),查詢性能可能產(chǎn)生的問題,采用動(dòng)態(tài)填充技術(shù),在不影響用戶觀察數(shù)據(jù)的情況下,大大提高了數(shù)據(jù)查詢速度。目前已代碼實(shí)現(xiàn)了此方法,展現(xiàn)結(jié)果如圖4所示,并在中科院計(jì)算技術(shù)研究所智能信息處理重點(diǎn)實(shí)驗(yàn)室開發(fā)的多策略通用數(shù)據(jù)采掘工具M(jìn)SMiner中獲得應(yīng)用,取得了較好的效果。
圖4 多維數(shù)據(jù)展現(xiàn)結(jié)果
核心關(guān)注:拓步ERP系統(tǒng)平臺(tái)是覆蓋了眾多的業(yè)務(wù)領(lǐng)域、行業(yè)應(yīng)用,蘊(yùn)涵了豐富的ERP管理思想,集成了ERP軟件業(yè)務(wù)管理理念,功能涉及供應(yīng)鏈、成本、制造、CRM、HR等眾多業(yè)務(wù)領(lǐng)域的管理,全面涵蓋了企業(yè)關(guān)注ERP管理系統(tǒng)的核心領(lǐng)域,是眾多中小企業(yè)信息化建設(shè)首選的ERP管理軟件信賴品牌。
轉(zhuǎn)載請(qǐng)注明出處:拓步ERP資訊網(wǎng)http://www.oesoe.com/
本文標(biāo)題:數(shù)據(jù)倉庫中多維分析的數(shù)據(jù)展現(xiàn)
本文網(wǎng)址:http://www.oesoe.com/html/consultation/1082056127.html