PowerBI DAX 在矩陣分組區域內通用積累求和

什麼是在矩陣分組區域內積累求和,先看一個例子吧。
web

對於左右兩個圖表,它們的規律是:緩存

  • 左圖:在分組區域內,按照與當前元素的KPI從小到大,積累求和;微信

  • 右圖:在分組區域內,按照與當前元素的名稱從小到,積累求和。app

這兩種模式都很是常見,不少計算都會涉及這個問題。函數

這裏給出了兩種實現,一種是模型層計算;一種是視圖層計算。學習

分別進行詳解。咱們先給出計算公式,再對重要技巧作出總結。spa

按KPI積累,模型層計算

DAX 公式以下:.net

KPI.組內積累.按KPI大小.模型法 =
VAR _value = [KPI]
VAR _items =
FILTER(
CALCULATETABLE( SUMMARIZE( Customer , Customer[Industry] , Customer[Occupation] ) , ALL( Customer[Occupation] ) ),
[KPI] <= _value
)
RETURN CALCULATE( [KPI] , _items )

按KPI積累,視圖層計算

DAX 公式以下:3d

KPI.組內積累.按KPI大小.視圖法 =
VAR _value_current = [KPI]
VAR _view =
CALCULATETABLE(
ADDCOLUMNS(
SUMMARIZE( Customer , Customer[Industry] , Customer[Occupation] ),
"@KPI",
[KPI]
),
ALLSELECTED( )
)

VAR _group = VALUES( Customer[Industry] )

RETURN
SUMX( _group ,
SUMX( _view , IF( [Industry] = EARLIER( Customer[Industry] ) && [@KPI] <= _value_current , [@KPI] ) )
)

按名稱積累,模型層計算

DAX 公式以下:code

KPI.組內積累.按元素名稱.模型法 =
VAR _value = [KPI]
VAR _item = SELECTEDVALUE( Customer[Occupation] , "座座座座" )
VAR _items =
FILTER(
CALCULATETABLE( SUMMARIZE( Customer , Customer[Industry] , Customer[Occupation] ) , ALL( Customer[Occupation] ) ),
ISONORAFTER( [Occupation] , _item , DESC )
)
RETURN CALCULATE( [KPI] , _items )

按名稱積累,視圖層計算

DAX 公式以下:

KPI.組內積累.按元素名稱.視圖法 =
VAR _value_current = SELECTEDVALUE( Customer[Occupation] , "座座座座" )
VAR _view =
CALCULATETABLE(
ADDCOLUMNS(
SUMMARIZE( Customer , Customer[Industry] , Customer[Occupation] ),
"@KPI",
[KPI]
),
ALLSELECTED( )
)

VAR _group = VALUES( Customer[Industry] )

RETURN
SUMX( _group ,
SUMX( _view , IF( [Industry] = EARLIER( Customer[Industry] ) && [Occupation] <= _value_current , [@KPI] ) )
)

總結

咱們在此前屢次提到視圖層計算,其通用思惟模式其實已經給出,真正的正式給出也呼之欲出,咱們會單獨發文。

反思

首先,這個問題,讓咱們對 DAX 計算再次反思:

DAX 計算從本質來說,永遠發生在模型層。

但若對於某計算,其計算若只需依賴已經計算完畢的內容,咱們稱:

一、已經計算完畢的內容爲視圖;

二、基於視圖再進行的二次計算爲視圖層計算。

請你們仔細觀察上述兩種模式的實際 DAX 公式,即可以發現視圖層計算每每具備兩大重大優點:

一、已經計算完畢的內容因爲每每能夠獲得緩存而使得後續計算更快;

二、已經計算完畢的內容不會再收到篩選上下文等複雜邏輯影響,更容易編寫後續計算邏輯。

這即是對 DAX 計算的反思。

微軟 PowerBI 產品組正在面臨一個很是尷尬的抉擇問題:

一、若 PowerBI 提供原生的視圖層計算功能,如:一個新的函數集合,但不屬於 DAX,那麼,這將使得 PowerBI 除了有 Power Query 的 M,以及數據建模 DAX,又將出現一個視圖計算的新函數庫,致使 PowerBI 會變得更加難以理解,這是不但願發生的。

二、若 PowerBI 將視圖層計算功能融入到 DAX 中,將致使做爲純模型層計算的函數庫 DAX 摻雜了其餘內容而使得 DAX 再也不純粹,這也是不但願發生的。

所以,在微軟 PowerBI 產品組決定使用任何方法以前,都會意識到無論怎麼決定,對 PowerBI 都將引入新的複雜性。

本案例技巧

本案例在計算按名稱累計時,使用了一個很是有創意的技巧:SELECTEDVALUE( Customer[Occupation] , "座座座座" )

默認返回"座座座座",將做爲中英文世界的詞語幾乎是最大字符而使得在小計行或總計行能夠完成正確的計算。

讓數據真正成爲你的力量

Create value through simple and easy with fun by PowerBI

Excel BI | DAX Pro | DAX 權威指南 | 線下VIP學習

掃碼與PBI精英一塊兒學習,驗證碼:data2020

PowerBI MVP 帶你學習 PowerBI
擊「閱讀原文」,即刻開始

本文分享自微信公衆號 - PowerBI戰友聯盟(powerbichina)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索