數據可視化之DAX篇(二十五)PowerBI常用的度量值:累計至今


https://zhuanlan.zhihu.com/p/64999937

經常碰到本年至今、本月至今的數據計算,其實還有一類計算是,從歷史最早日期至今的累計計算,比如從開業到現在總共賣出了多少件商品,累計實現了多少銷售額等。

本年累計稱為YTD,歷史至今的累計是不是可以稱為HTD呢:) ;這樣的時間段很可能是跨年的,所以時間智能函數並不適用,不過不用時間智能函數依然可以很簡單的進行計算。

模擬數據如下:

 

只是計算一個整體累計銷售額很簡單,我們想要計算的是從最初到任意一個日期的累計銷售額,為了能一次計算出各種粒度的歷史至今,可以先構造一個日期表並建立關系。(參考:玩PowerBI必備的日期表制作方式匯總

然后寫個度量值,

歷史至今 累計收入 =

CALCULATE(

SUM('訂單表'[銷售額]),

FILTER(

ALL('日期表'),

'日期表'[日期]<=MAX('日期表'[日期])))

 

然后在矩陣中看看結果,

 

 

結果正是歷史所有訂單的累計銷售額,這個度量值的關鍵是用MAX函數獲取當前上下文的日期,然后返回小於等於當前日期的所有銷售額的合計。

這個度量值寫法有一個問題,就是它把日期表中所有的日期都計算了一遍,其實大於最后一個訂單日期的無須計算,因為結果並不會發生變化。

為了解決這個問題,可以先把最后一個訂單日期找出來:

訂單最大日期 = MAXX(ALL('訂單表'),'訂單表'[訂單日期])

然后在歷史累計中增加個判斷條件,

歷史至今 累計收入 優化 =

IF(
MIN('日期表'[日期])<=[訂單最大日期],
CALCULATE(
SUM('訂單表'[銷售額]),
FILTER(
ALL('日期表'),
'日期表'[日期]<=MAX('日期表'[日期]))))

再來看一下結果,

 

 

正是期望的效果。

歷史至今的聚合計算,不一定只是累計求和,還可以找出歷史上最大的訂單金額,或者歷史至今的平均訂單金額,這些情況只需要改一下聚合函數就行了,比如平均訂單金額就是把SUM改成AVERAGE,

歷史至今 平均訂單訂單 =

IF(
MIN('日期表'[日期])<=[訂單最大日期],
CALCULATE(
AVERAGE('訂單表'[銷售額]),
FILTER(
ALL('日期表'),
'日期表'[日期]<=MAX('日期表'[日期]))))

最大最小訂單同理,不再一一列出,結果如下:

 

 


免責聲明!

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



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