1. 程式人生 > >資料倉庫知識點梳理(3)

資料倉庫知識點梳理(3)

> 在[上一篇文章](https://www.cnblogs.com/shenfeng/p/datawarehouse_intro_2.html)中由業務分析方法引入維度建模,同時介紹了維度建模的基本組成——事實表和維度表,維度建模下的資料組織形式:星型模型。本篇介紹維度建模的另一個數據展現形式——資料立方體(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)中存放了一個測度,此處的測度是銷售件數。 ![](https://img2020.cnblogs.com/blog/670593/202004/670593-20200425225047537-1626784139.png) 同時,維度下的分類成員具有層級的概念。比如,在上圖中地址維度採用的省級分類,其實向下還可以細分成城市分類,向上還可以聚合從國家的分類。 在維度向下細分的過程中,立方體中的部分cells可能存在空值的情況,比如粒度降到街道級別後,在具體的某一天,可能不存在顯示器的訂單,那麼對應的測度值為空。 # 02 立方體的操作 相較於於關係資料庫中的sum、group by等分析統計操作,在資料立方體中,常見的分析操作包括切片(Slice)、切塊(Dice)、下鑽(Drill down)、上卷(Roll up)和旋轉(Pivot)。 * 切片:固定維度值為一個確定的分類成員,比如將日期固定為`1/1/2019`,那麼得到單日的銷售資料。 ![](https://img2020.cnblogs.com/blog/670593/202004/670593-20200425225117355-164002804.png) * 切塊:取一個或者多個維度的部分分類成員,比如地址限制兩個省份,日期取其中兩天,從而獲取一個縮小的立方體。 ![](https://img2020.cnblogs.com/blog/670593/202004/670593-20200425225132723-230144822.png) * 下鑽:按照維度分類的層級獲取更加細節的分類,比如地址可以再細分到城市級別 ![](https://img2020.cnblogs.com/blog/670593/202004/670593-20200425225155186-1095370409.png) * 上卷:下鑽的反向操作,向當前維度分類的粗粒度分類聚合(測度值求和),比如把鍵盤和滑鼠整合為鍵鼠大類。 ![](https://img2020.cnblogs.com/blog/670593/202004/670593-20200425225213892-1013323354.png) * 旋轉:將維度的位置進行調換,用不同的角度來分析資料,比如將地址和產品的位置互換得到下圖。 ![](https://img2020.cnblogs.com/blog/670593/202004/670593-20200425225233259-1116306284.png) # 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`關鍵詞跟著的物件是在系統中建立的立方體。 ```sql 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](https://docs.microsoft.com/en-us/analysis-services/multidimensional-models/mdx/mdx-query-the-basic-query?view=asallproducts-allversions) # 04 總結 本文介紹了 * OLAP資料立方體的基本定義和要素; * 以及資料分析時對立方體的基本操作型別; * 在商業軟體中對立方體進行操作的MDX語言。 **歡迎掃描二維碼關注公眾號** ![](https://img2018.cnblogs.com/blog/670593/201912/670593-20191201214002980-3085