最近學(xué)CALCULATE都要吐了,白茶覺(jué)得,咱得換一換口味,對(duì)吧。本期呢,咱來(lái)聊一聊關(guān)于排名的問(wèn)題。
哦,對(duì)了,之前白茶犯了一個(gè)很嚴(yán)重的錯(cuò)誤,從這期開(kāi)始會(huì)改變,那就是DAX的格式書(shū)寫(xiě)錯(cuò)誤。
這個(gè)問(wèn)題是一個(gè)特別嚴(yán)重的問(wèn)題,白茶疏忽了,這里補(bǔ)上一下原因:為什么格式書(shū)寫(xiě)很重要?就像是我們小時(shí)候?qū)憫?yīng)用題一樣,哪怕是啥都不會(huì),一個(gè)“解”字就值2分,不為啥,就是因?yàn)楦袷焦ふ?,能夠很大程度上減少我們的錯(cuò)誤率!
下面是一些DAX的書(shū)寫(xiě)要求:
1.如果參數(shù)只有一個(gè),那么參數(shù)和函數(shù)需要放在一塊。如下:
DAX =
SUM ( '表'[求和項(xiàng)] )
2.如果參數(shù)函數(shù)有兩個(gè),或者更多參數(shù),那么每個(gè)參數(shù)一行。如下:
DAX =
CALCULATE ( SUM ( '表'[求和項(xiàng)] ), FILTER ( '表', [條件] = "M" ) )
3.如果函數(shù)和參數(shù)太多了,那么左括號(hào)"("和函數(shù)在一行;參數(shù)如果是新行,那么縮進(jìn)4個(gè)字符;右括號(hào)")",要與函數(shù)開(kāi)頭相對(duì)齊;分隔的逗號(hào)位于上一行;表達(dá)式要是拆分的話,運(yùn)算符為首字母。如下:
DAX =
CALCULATE (
SUM ( '表'[求和項(xiàng)] ),
FILTER ( '表', [條件] = "M" && [條件] = "N" )
&& FILTER ( '表', [條件] = "S" )
)
最后,給小伙伴們一個(gè)DAX格式網(wǎng)址,會(huì)自動(dòng)將你的DAX代碼轉(zhuǎn)換為標(biāo)準(zhǔn)格式:
http://www.daxformatter.com/raw/
具體的使用辦法白茶在這里就不一一贅述了,小伙伴們可以自行摸索,來(lái)來(lái)來(lái),繼續(xù)我們之前的話題。
下面是今天的示例文件:
?這是一份服裝銷售的模擬數(shù)據(jù),將其導(dǎo)入PowerBI中,并且輸入如下代碼,求出銷售金額:
銷售 =
SUM ( '產(chǎn)品表'[銷售價(jià)] ) * SUM ( '銷售明細(xì)'[銷售數(shù)量] )
如圖:
這是銷售情況,現(xiàn)在我們要了解每一個(gè)產(chǎn)品的絕對(duì)排名,該怎么進(jìn)行?
有請(qǐng)RANKX!
輸入如下代碼:
絕對(duì)排名 =
RANKX ( ALL ( '產(chǎn)品表' ), [銷售] )
結(jié)果如圖:
排名結(jié)果如上,從排名上看沒(méi)有啥問(wèn)題,但是總計(jì)欄“1”是什么鬼?
繼續(xù)優(yōu)化我們的代碼:
絕對(duì)排名 =
IF ( HASONEVALUE ( '產(chǎn)品表'[商品名稱] ), RANKX ( ALL ( '產(chǎn)品表' ), [銷售] ) )
結(jié)果如下:
是不是看起來(lái)順眼多了?這里解釋一下含義,IF不多說(shuō)了,最基礎(chǔ)的判定條件;HASONEVALUE函數(shù)的定義當(dāng)列中只有一個(gè)唯一值的時(shí)候,返回TURE,沒(méi)有則為空,因?yàn)榭傆?jì)欄沒(méi)有產(chǎn)品名稱這一說(shuō),所以排名總計(jì)消失。
那如果我想知道類別排名呢?ALL函數(shù)加限定條件!代碼如下:
類別絕對(duì)排名 =
IF ( HASONEVALUE ( '產(chǎn)品表'[商品名稱] ), RANKX ( ALL ( '產(chǎn)品表'[商品名稱] ), [銷售] ) )
結(jié)果展示如圖:
是不是有點(diǎn)理解了?如果不考慮分組、分類這類東西,ALL整個(gè)表;考慮分組、分類要ALL具體的列。
這是絕對(duì)排名,但是有時(shí)候我還想知道篩選之后的結(jié)果,比如說(shuō)就幾項(xiàng),該咋整?這個(gè)可能有的小伙伴已經(jīng)反應(yīng)過(guò)來(lái)了,之前的占比問(wèn)題我們用的是啥?ALLSELECTED?。?/p>
代碼如下:
相對(duì)排名 =
IF ( HASONEVALUE ( '產(chǎn)品表'[商品名稱] ), RANKX ( ALLSELECTED ( '產(chǎn)品表' ), [銷售] ) )
結(jié)果如圖:
同理,類別相對(duì)排名代碼如下:
類別相對(duì)排名 =
IF ( HASONEVALUE ( '產(chǎn)品表'[商品名稱] ), RANKX ( ALLSELECTED ( '產(chǎn)品表'[商品名稱] ), [銷售] ) )
結(jié)果如圖:
當(dāng)然,也可以進(jìn)行多維度排名,用法是ALL與ALLSELECTED函數(shù)可以添加多項(xiàng)列,這里就不一一贅述了。做一下總結(jié):
總體絕對(duì)排名:
總體絕對(duì)排名 =
IF ( HASONEVALUE ( '產(chǎn)品表'[商品名稱] ), RANKX ( ALL ( '產(chǎn)品表' ), [銷售] ) )
類別絕對(duì)排名:
類別絕對(duì)排名 =
IF ( HASONEVALUE ( '產(chǎn)品表'[商品名稱] ), RANKX ( ALL ( '產(chǎn)品表'[商品名稱] ), [銷售] ) )
總體相對(duì)排名:
總體相對(duì)排名 =
IF ( HASONEVALUE ( '產(chǎn)品表'[商品名稱] ), RANKX ( ALLSELECTED ( '產(chǎn)品表' ), [銷售] ) )
類別相對(duì)排名:
類別相對(duì)排名 =
IF ( HASONEVALUE ( '產(chǎn)品表'[商品名稱] ), RANKX ( ALLSELECTED ( '產(chǎn)品表'[商品名稱] ), [銷售] ) )
小伙伴們?GET了么?
白茶會(huì)不定期的分享一些函數(shù)卡片
(文件在知識(shí)星球[PowerBI丨需求圈])
這里是白茶,一個(gè)PowerBI的初學(xué)者。
