在實際的生活中,我們使用最頻繁的一個概念就是環(huán)比,日環(huán)比、周環(huán)比、月環(huán)比等等。但是在實際需求中,還有一些特殊的環(huán)比需求:
BOSS:那個誰,對,就是你,給我做一個任意月份的環(huán)比。
白茶:啥??什么叫任意月份?
BOSS:就你這智商,可別放棄治療!我要看六月份和九月份的環(huán)比,同時能隨意切換對比月份的!能不能做!
白茶:......(#¥%&%#@???)能!
...
...
...
先來看本期的示例文件:
一份產(chǎn)品表。
一份分店表(雖然這期沒用上)。
一份銷售表。這些就是本期采用的示例源文件。
將其導(dǎo)入到PowerBI中,輸入如下代碼,生成日期表:
日期表 =
GENERATE (
CALENDAR ( MIN ( '銷售明細(xì)'[銷售日期] ), //注意:這里需要替換成你自己的數(shù)據(jù)
MAX ( '銷售明細(xì)'[銷售日期] ) ),
//注意:這里需要替換成你自己的數(shù)據(jù)
VAR DA = [Date]
VAR YEAR =
YEAR ( DA )
VAR QUARTER =
"季度" & FORMAT ( DA, "Q" )
VAR MONTE =
FORMAT ( DA, "MM" ) & "月"
VAR DAY =
DAY ( DA )
VAR WEEKID =
WEEKDAY ( DA, 2 )
RETURN
ROW (
"年度", YEAR,
"季度", QUARTER,
"月份", MONTE,
"日", DAY,
"年度季度", YEAR & QUARTER,
"年度月份", YEAR & MONTE,
"星期", WEEKID
)
)
結(jié)果如下:
編寫基本的代碼,求出每日的銷售金額:
銷售金額 =
SUMX ( '銷售明細(xì)', '銷售明細(xì)'[銷售數(shù)量] * RELATED ( '產(chǎn)品表'[銷售價] ) )
結(jié)果如下:
到這里,我們的準(zhǔn)備工作告一段落。
思考一下代碼的編寫:
首先呢,需要有一個可以任意切換的維度,可以隨意切換月份。
其次,要保證呈現(xiàn)的結(jié)果隨著維度范圍的切換,結(jié)果也跟著變化。
添加一個觀測的日期維度:
維度表 =
GENERATE (
CALENDAR ( MIN ( '銷售明細(xì)'[銷售日期] ), //注意:這里需要替換成你自己的數(shù)據(jù)
MAX ( '銷售明細(xì)'[銷售日期] ) ),
//注意:這里需要替換成你自己的數(shù)據(jù)
VAR DA = [Date]
VAR YEAR =
YEAR ( DA )
VAR MONTE =
FORMAT ( DA, "MM" ) & "月"
RETURN
ROW ( "年度", YEAR, "月份", MONTE, "年度月份", YEAR & MONTE )
)
這個表不要與其他表建立模型關(guān)系,結(jié)果如下:
編寫如下代碼:
本期 =
VAR SQ =
MAX ( '維度表'[年度月份] )
VAR DQ =
CALCULATE ( MAX ( '維度表'[年度月份] ), '維度表'[年度月份] = SQ, ALLSELECTED ( '維度表' ) )
RETURN
CALCULATE ( [銷售金額], '日期表'[年度月份] = DQ )
放在矩陣中查看:
可以看得出來,大體上結(jié)果是沒啥問題的,但是這里不太需要這個小計和總計,因為沒有啥意義啊。優(yōu)化代碼如下:
本期 =
VAR SQ =
MAX ( '維度表'[年度月份] )
VAR DQ =
CALCULATE ( MAX ( '維度表'[年度月份] ), '維度表'[年度月份] = SQ, ALLSELECTED ( '維度表' ) )
RETURN
IF (
AND ( HASONEFILTER ( '維度表'[年度] ), HASONEFILTER ( '維度表'[月份] ) ),
CALCULATE ( [銷售金額], '日期表'[年度月份] = DQ ),
BLANK ()
)
結(jié)果:
這次去掉總計的顯示了,完美!解釋一下代碼含義:
SQ是利用VAR將最大的[年度月份]定義為一個可以被比較的常量。
DQ外圍的CALCULATE是將行上下文轉(zhuǎn)換為篩選上下文;利用MAX匹配上下文計算環(huán)境,同時受限于ALLSELECTED函數(shù),計算范圍始終都處于切片器的篩選環(huán)境下。
IF+AND進行判斷去掉總計,CALCULATE計算符合當(dāng)前篩選上下文的[銷售金額]。
那么本期寫完了,編寫上期代碼:
上期 =
VAR SQ =
MAX ( '維度表'[年度月份] )
VAR DQ =
CALCULATE (
MAX ( '維度表'[年度月份] ),
FILTER ( ALLSELECTED ( '維度表' ), '維度表'[年度月份] < SQ )
)
RETURN
IF (
AND ( HASONEFILTER ( '維度表'[年度] ), HASONEFILTER ( '維度表'[月份] ) ),
CALCULATE ( [銷售金額], '日期表'[年度月份] = DQ ),
BLANK ()
)
將結(jié)果放在矩陣中對比:
結(jié)果顯示的沒有任何問題,第二個DQ利用CALCULATE限定范圍為小于當(dāng)前篩選[年度月份]的上一期,同時上一期也屬于篩選范圍。
最后,編寫環(huán)比代碼:
環(huán)比 =
DIVIDE ( [本期] - [上期], [上期] )
最終結(jié)果如下:
小伙伴們?GET了么?
白茶會不定期的分享一些函數(shù)卡片
(文件在知識星球[PowerBI丨需求圈])
這里是白茶,一個PowerBI的初學(xué)者。
