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