Power BI中將度量作為維度進行建模的優缺點


​小伙伴們對於建模或是星型模型在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查看一下性能的影響。

 

推薦閱讀

 

【2020】Power BI 8月產品功能更新

商業數據分析大師進階之路

報表遷移 | 如何在多個工作區之間遷移Power BI報表

了解LOOKUPVALUE

為什么Power BI運行兩次我的SQL查詢?

 

技術交流

1.Power BI免費下載:http://www.yeacer.com/

    Microsoft Power BI Desktop中文最新版:下載地址

2.歡迎加入的Power BI技術群,目前正在學習階段,有興趣的朋友可以一起學習討論。 

   Power Data技術交流群:702966126 (驗證注明:博客園Power BI) 

   更多精彩內容請關注微信公眾號:悅策PowerBI          


如果您覺得閱讀本文對您有幫助,請點一下“推薦”按鈕,您的“推薦”將是我最大的寫作動力!歡迎各位轉載。


免責聲明!

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



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