小伙伴們對於建模或是星型模型在Power BI中想必都非常熟悉:在星型模型中,我們至少要有一個事實表,在事實表中,我們將有兩種主要類型的列:維鍵(將事實表鏈接到維表)和度量(用於存儲所需的數據)匯總和分析。下面就和大家分析個例子:這是一個名為Sales的事實表的簡單示例,其中包含三個維鍵列(產品、商店、顧客)和三個度量列(銷售額、稅金、銷售量):
不過,我們經常會看到有人是這樣來對事實表進行建模:不取消數據透視的每個度量的單獨列,而是在事實表中為每個度量值創建一行,使用一個列來存儲所有度量值並創建一個新維度,以允許用戶選擇所需的度量值。這是另一個事實表的示例,稱為Sales Unpivot,顯示了如何使用此技術來重構來自上面Sales事實表的數據:
在此事實表中,維鍵保持不變,但是列將度量的所有數據存儲在原始表中,並且“measure name”列告訴你在任何給定的行中存儲哪種類型的度量值。我們將此方法稱為“度量維度”方法:
使用“度量維度”方法構建事實表有一些優點,例如:
-
你可以在報告中使用切片器來選擇顯示在視覺對象中的度量;
-
你可以輕松添加新度量,而不必在事實表中添加新列;
-
你可以使用行級安全性來控制用戶可以訪問哪些度量;
但盡管如此,任何時候只要偏離常規維度建模,都可能會在以后遇到問題,這個方法也不例外。怎么會這么說呢,接下來就讓我們一起看看將度量作為維度進行建模的一些缺點。
格式設置
首先值得我們注意的是,Sales fact表中的“Sales”和“Tax” 度量列是貨幣值,“Volume Sold”列包含小數點后四位的值。當每個度量值都是單獨的列時,很容易為不同的度量值設置不同的格式:
但是,當所有值都存儲在一列中時(如“度量維度”示例中所示),格式化就不是那么簡單了。我們也許可以對所有數據使用一種通用格式:
但這並不理想,當然,我們可以新建DAX度量並對其進行適當的格式化,但是隨后我們會發現這將失去這種方法的靈活性。
壓縮
更嚴重的是,與使用“度量維度”方法相比,Power BI在存儲和壓縮常規事實表中的數據方面做得更加高效,這對查詢性能產生了影響。使用DAX Studio中的“查看指標”按鈕可以查看每個表的數據存儲方式的詳細信息。以下是一些精選的亮點:
首先,請注意Sales Unpivot表(使用度量維度方法)比Sales表大66%。還請注意,在Sales表中,“Sales”和“Tax” 度量列(包含貨幣值)可以使用通用數據類型(此處顯示為Decimal,十進制),這意味着它們可以使用值編碼;只有“Volume Sold”列需要使用十進位(制)數據類型(在這里顯示為Double)存儲,並且必須使用哈希編碼。由於Sales表中存儲的所有數值都是用十進制編碼列存儲的。正如本文所解釋的,值編碼可以給你帶來很多性能上的好處。
計算復雜度
當我們開始構建更復雜的DAX計算時,度量維度方法的缺點變得更加明顯。假設我們希望報表中有一個顯示“Sales”、“Tax”和從銷售額中減去稅款的指標,稱為稅后銷售額:
注:在大多數情況下,我們會為度量維度創建一個單獨的維度表,但是為了使事情變得簡單,沒有必要這樣做。
如果我們希望其他人在我們的數據集上建立度量,那么這樣的做法又會增加計算的復雜度,因為計算功能並不是一個簡單且合適的方式。
計算性能
最后,在度量維度中還需要承受一些對性能不好的影響。以上述中的稅后銷售為例,以下是DAX Studio中的“Server Timings”選項卡為與可視化顯示Sales、Tax和Sales After Tax相關聯的查詢顯示的內容:
順便提醒下只有一個存儲引擎查詢:DAX fusion已啟用,因此可以在同一掃描中檢索所需的Sales和Tax值。
但是,這是使用“度量維”方法為同一視覺顯示的“Server Timings”選項卡,以及使用上面顯示的“Sales Unpivot”表為第二組度量顯示的視覺效果:
此查詢不僅速度較慢,而且現在有兩個存儲引擎查詢:一個用於獲取Sales數據,另一個用於獲取Tax數據。由於需要單獨的檢測來獲取每個度量值,所以在可視化中的度量值越多,或者計算所需的度量值越多,就需要進行更多的檢測。這很快就會造成一個很大的性能問題,尤其是每次檢測都比較慢的情況下,這種情況更有可能發生,因為度量維度方法意味着Power BI無法有效壓縮數據。
結論
雖然使用它確實有一些優點,但其還是弊大於利。感興趣的小伙伴也可以通過使用DAX Studio查看一下性能的影響。
推薦閱讀
技術交流
1.Power BI免費下載:http://www.yeacer.com/
Microsoft Power BI Desktop中文最新版:下載地址
2.歡迎加入的Power BI技術群,目前正在學習階段,有興趣的朋友可以一起學習討論。
Power Data技術交流群:702966126 (驗證注明:博客園Power BI)
更多精彩內容請關注微信公眾號:悅策PowerBI
如果您覺得閱讀本文對您有幫助,請點一下“推薦”按鈕,您的“推薦”將是我最大的寫作動力!歡迎各位轉載。