白茶最近在群里和小伙伴們吹水的時候栋齿,發(fā)現(xiàn)有很多報表都是需要根據(jù)具體的實(shí)際需求來進(jìn)行的。很多大佬喜歡稱呼這類需求為中國式報表陷谱。舉一個簡單的例子迷扇。
BOSS:你給我做一個近期周匯總!
白茶:我不是做了一個[年周]格式匯總么存和?
BOSS:花里胡哨的奕剃,咱們公司每周二進(jìn)行匯報,你知道不捐腿?趕緊整纵朋,我不要你覺得,我要我覺得茄袖!
白茶:......(@##¥%2偃怼?)好绞佩。
.
.
.
木有辦法啊寺鸥,哎,生活總歸還是得繼續(xù)啊品山,進(jìn)入正題胆建。
(示例文件會放到知識星球中,小伙伴們可以搜索“PowerBI丨需求圈”肘交,文章結(jié)尾處會有二維碼笆载。)
首先,這是本期的示例文件涯呻,將其導(dǎo)入到PowerBI中如下:
先添加一個計算列凉驻,白茶在繼續(xù)說,編寫如下代碼:
周幾 =
"周" & WEEKDAY ( '示例'[日期] )
結(jié)果如下:
說一下什么意思复罐,現(xiàn)在表中涝登,最新的銷售日期是12月17日。但是公司每周三效诅,會進(jìn)行財務(wù)工作周匯報胀滚,每次匯報都是截止至每周二的近七天銷售匯總趟济。明白了吧,小伙伴們咽笼?這就是典型的中國式報表顷编,不按照現(xiàn)成的代碼來,因?yàn)槊總€公司的限定日期不固定剑刑,這就要求我們在做報表的時候視情況而定媳纬。
(這一列不參加任何計算,白茶只是想和小伙伴們說一下什么意思施掏。)
背景介紹完畢钮惠,開始編寫DAX:
基本代碼:
聚合 =
SUM ( '示例'[銷售金額] )
有的小伙伴們說,好弄其监,利用CALCULATE+FILTER模式就行了萌腿!一開始白茶也是這么處理的,咱先來看看之前的錯誤代碼:
匯總 =
CALCULATE (
[聚合],
FILTER (
ALL ( '示例'[日期] ),
'示例'[日期] <= MAX ( '示例'[日期] )
&& '示例'[日期]
> MAX ( '示例'[日期] ) - 7
)
)
結(jié)果如下:
這么做的結(jié)果看似合理抖苦,也不能算錯毁菱,但是這屬于一種滾動聚合的方式,很明顯不符合BOSS的需求靶坷贮庞!
(BOSS:就是就是,花里胡哨的>课鳌)
換個角度思考一下窗慎,我要是BOSS,我肯定只是想看每個周期累計到周二的銷售數(shù)據(jù)卤材,不想看其他日期的遮斥,這怎么辦呢?別急扇丛,修改代碼:
周二匯總 =
VAR CQ =
WEEKDAY ( MAX ( '示例'[日期] ) )
VAR HQ =
MAX ( '示例'[日期] )
VAR RESULT =
CALCULATE (
[聚合],
FILTER ( ALL ( '示例'[日期] ), '示例'[日期] > HQ - 7 && '示例'[日期] <= HQ )
)
RETURN
IF ( CQ = 2, RESULT, BLANK () )
結(jié)果如下:
這次的結(jié)果沒問題术吗,只有符合匯報日期的數(shù)據(jù)顯示,其他的不顯示帆精。
(膜拜@冬哥=嫌臁)
這里解釋一下代碼含義:
CQ這里是為了判斷截止日期是周幾。
HQ是為了獲取上下文的日期卓练。
RESULT是利用CALCULATE+FILTER的累計求和模式隘蝎,求出每個七日周期的累計。
最后襟企,利用IF進(jìn)行判定嘱么,周2顯示累計求和,否則顯示為空顽悼。
去掉[聚合]和[匯總]項拱撵,結(jié)果如下:
看起來是不是簡潔多了辉川?剩下的就比較簡單了,編寫代碼:
上周二匯總 =
VAR CQ =
WEEKDAY ( MAX ( '示例'[日期] ) )
VAR HQ =
MAX ( '示例'[日期] )
VAR RESULT =
CALCULATE (
[聚合],
FILTER ( ALL ( '示例'[日期] ), '示例'[日期] > HQ - 14 && '示例'[日期] <= HQ - 7 )
)
RETURN
IF ( CQ = 2, RESULT, BLANK () )
環(huán)比代碼:
比率 =
DIVIDE ( [周二匯總] - [上周二匯總], [上周二匯總] )
結(jié)果如下:
小伙伴們拴测,GET了么?
(BOSS:給冬哥點(diǎn)個贊8摺)