數據倉庫知識點梳理(3)


上一篇文章中由業務分析方法引入維度建模,同時介紹了維度建模的基本組成——事實表和維度表,維度建模下的數據組織形式:星型模型。本篇介紹維度建模的另一個數據展現形式——數據立方體(data cube),以及數據立方體的操作方式。

01 定義與基本元素

在計算系統中,數據立方體(OLAP cube)是用於存儲數據值的多維數組,叫立方體只是在用3D的概念理解3個維度的數組。廣義概念上,數據立方體可以是2維,3維……n維。在具體的數據倉庫場景下,數據立方體的維度是由分析主題的屬性確定,立方體中通過維度值分割出的單元用於存儲屬性組合下的測度。我們可以回憶下在「星型模型」中,維度表存儲測度,而事實表存儲屬性。

那么數據立方體和星型模型有什么聯系呢?

兩者實際上是維度建模理論下數據組織形式的不同方式。星型模型是建立在關系型數據庫(RDBMS)上,數據以表的形式存儲,屬性和測度之間通過表的主鍵和外鍵聯系起來。數據立方體或者更准確的說OLAP立方體,是存儲在維度數據庫(multidimensional database, MDB)上的維度模型。數據立方體同樣存儲維度屬性和對應的測度,相對於RDBMS中的SQL語言,多數MDB產品使用了XMLA或者MDX等包含更多分析功能的查詢語言。

雖然MDB不像RDBMS有統一的標准,但是MDB中的數據立方體都是由三個基本元素組成的。這三個基本元素分別是:研究主題的屬性(Dimensions)、屬性的分類成員(Members)、屬性組合下的測度值(Measures)。如果有一個3維的數據立方體,可以通過圖片方式表示出來,那么Members就是坐標軸上的標尺,Measures就是每一小格(cells)中存放的統計值。

為了更好地理解上述定義,我們可以從需要分析的主題中截取一部分來繪制出一個立方體。如下圖所示,將電腦硬件產品銷售的三個維度位置放在一個真正的立方體透視圖中。其中,「地址」、「產品」和「日期」是銷售主題的三個屬性,組成了立方體的維度。地址維度下的「江蘇」、「浙江」等省區是地址的分類成員,即Members。在三個維度下,通過具體的離散分類值確定的格子(cell)中存放了一個測度,此處的測度是銷售件數。

同時,維度下的分類成員具有層級的概念。比如,在上圖中地址維度采用的省級分類,其實向下還可以細分成城市分類,向上還可以聚合從國家的分類。

在維度向下細分的過程中,立方體中的部分cells可能存在空值的情況,比如粒度降到街道級別后,在具體的某一天,可能不存在顯示器的訂單,那么對應的測度值為空。

02 立方體的操作

相較於於關系數據庫中的sum、group by等分析統計操作,在數據立方體中,常見的分析操作包括切片(Slice)、切塊(Dice)、下鑽(Drill down)、上卷(Roll up)和旋轉(Pivot)。

  • 切片:固定維度值為一個確定的分類成員,比如將日期固定為1/1/2019,那么得到單日的銷售數據。

  • 切塊:取一個或者多個維度的部分分類成員,比如地址限制兩個省份,日期取其中兩天,從而獲取一個縮小的立方體。

  • 下鑽:按照維度分類的層級獲取更加細節的分類,比如地址可以再細分到城市級別

  • 上卷:下鑽的反向操作,向當前維度分類的粗粒度分類聚合(測度值求和),比如把鍵盤和鼠標整合為鍵鼠大類。

  • 旋轉:將維度的位置進行調換,用不同的角度來分析數據,比如將地址和產品的位置互換得到下圖。

03 MDX語言

上文提到數據立方體是存儲在MDB中的,常見的MDB商業方案如SQL Server Analysis Services,IBM Congos 和Oracle BIEE等,開源方案有Pentaho BI,Mondrian,Apache Kylin等。

在MDB中,對數據立方體的操作可以通過MDX(Multidimensional Data Expressions)語言實現。下面的語句便是一個提取銷售金額的語句,維度上使用的是日期(選擇2002和2003財年),並且通過WHERE實現了區域維度上的切片,FROM關鍵詞跟着的對象是在系統中建立的立方體。

SELECT  
    { [Measures].[Sales Amount],   
        [Measures].[Tax Amount] } ON COLUMNS,  
    { [Date].[Fiscal].[Fiscal Year].&[2002],   
        [Date].[Fiscal].[Fiscal Year].&[2003] } ON ROWS  
FROM [Adventure Works]  
WHERE ( [Sales Territory].[Southwest] )

初看MDX的語法,似乎與關系數據庫中的SQL很相似,但實際上它們在操作對象上是完全不同的。

SQL MDX
SELECT 列名稱 維度名稱
FROM 表名稱 立方體名稱
WHERE 對行數進行限制 限制維度成員

具體的MDX語法可以參考https://docs.microsoft.com/en-us/analysis-services/multidimensional-models/mdx/mdx-query-the-basic-query?view=asallproducts-allversions

04 總結

本文介紹了

  • OLAP數據立方體的基本定義和要素;
  • 以及數據分析時對立方體的基本操作類型;
  • 在商業軟件中對立方體進行操作的MDX語言。

歡迎掃描二維碼關注公眾號


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM