前言
去年同期和同比是日常業(yè)務中常見的計算指標测蹲,但是就是這么簡單的業(yè)務指標也往往充滿了陷阱僧须。日常工作中端考,經(jīng)常不是在月末就需要查看去年同期值了,如果簡單的使用SAMEPERIODLASTYEAR
往往會得到錯誤的結論罐盔。
常見情況
舉個例子
通常情況下但绕,大家會使用以下表達式計算去年同期
總銷售額.PY =
CALCULATE (
[總銷售額],
SAMEPERIODLASTYEAR ( '日期'[日期] )
)
通過此度量值,可以在報告中查看當年銷售額和去年同期銷售額
但是這種方式并不完美翘骂,檢查源數(shù)據(jù)壁熄,不難發(fā)現(xiàn)9月14日之后并未發(fā)生銷售行為,即訂單數(shù)據(jù)僅到2019年9月14日為止碳竟。但是度量值總銷售額.PY
在2018年9月的計算中草丧,計算了整個9月的銷售額,這樣比較時不公平的莹桅,容易產(chǎn)生錯誤的結論昌执。
解決方案
所以這時就需要增加一個計算條件,用于限制2018年的銷售額诈泼,使其僅計算到2018年9月14日為止(即最后一天發(fā)生銷售額的去年同期)懂拾。表達式如下:
總銷售額.PY.考慮訂單日期 =
VAR LastOrderDate =
LASTDATE ( '訂單_2019不完整'[訂單日期] )
VAR LastOrderDatePY =
EDATE ( LastOrderDate, -12 )
RETURN
CALCULATE (
[總銷售額],
SAMEPERIODLASTYEAR ( '日期'[日期] ),
'日期'[日期] <= LastOrderDatePY
)
我們放圖中進行對比。
顯然這樣算出的去年同期值會合理的多铐达,更能反應事實岖赋。
其他情況
那么會不會有其他類似的情況?必須有啊瓮孙,例如常用的指標年累計值( Year to date )唐断,同樣會有這樣的陷阱,常見的寫法如下杭抠。
總銷售額.YTD =
CALCULATE (
[總銷售額],
DATESYTD ( '日期'[日期] )
)
同時去年年累計會按照如下寫法所示:
總銷售額.YTD.PY =
CALCULATE(
[總銷售額.YTD],
SAMEPERIODLASTYEAR('日期'[日期])
)
那么結果如下:
顯然按照這種結果比較脸甘,完全無法得出正確結論,所以改寫YTD和去年同期YTD的表達式:
銷售額.YTD.考慮訂單日期 =
IF(
FIRSTDATE('日期'[日期])>LASTDATE('訂單_2019不完整'[訂單日期]),
BLANK(),
[總銷售額.YTD]
)
銷售額.YTD.PY.考慮訂單日期 =
VAR LastOrderDate =
LASTDATE ( '訂單_2019不完整'[訂單日期] )
VAR LastOrderDatePY =
EDATE ( LastOrderDate, -12 )
RETURN
CALCULATE (
[總銷售額.YTD],
SAMEPERIODLASTYEAR ( '日期'[日期] ),
'日期'[日期] <= LastOrderDatePY
)
于是得到了如下結果:
總結
像文中這樣的陷阱偏灿,日常工作中還有很多丹诀,希望各位能多多留意,避免得出錯誤結論翁垂。