利用ALL和ALLSELECTED靈活計算佔比
計算個體佔總體的比例是一個很常見的分析方式,它很簡單,就是兩個數字相除,但是當需要計算的維度、總體的範圍發生動態變化時,如何靈活且快速的計算出各種佔比,還是需要動一點心思的。
本文就通過 DAX 中的 ALL 和 ALLSELECTED 函數來看看在 PowerBI 中是如何快速計算出各種佔比的。
數據為虛擬的某網上商城的電子產品的銷售記錄,我們根據銷售額指標來計算某產品的佔總體或者類別的比例。
首先寫一個銷售額的度量值,
銷售額= SUM("訂單"[銷售額])
在矩陣中看看該度量值的結果,
總體佔比
計算佔總體的比例,就是每一個類別的銷售額都除以總計數,計算總計數,可以用 ALL 函數清除外部上下文的篩選,如果單獨計算出總計銷售額,可以這樣寫,
銷售額總計=CALCULATE([銷售額],ALL("產品")
將該度量值放入到卡片圖中,可以看到正好是2,305,350.
這裡為了更加直觀,我們直接寫出佔總體比例的度量值,
總體佔比= DIVIDE([銷售額],CALCULATE([銷售額],ALL("產品")))
矩陣中結果如下,
為了進一步分析具體每一種產品的佔比,把產品名稱展開,
分類佔比
每一種產品相對於總體的比例都計算出來了,但是如果還需要知道每一種產品占所屬分類的比例,可以這樣寫,
分類佔比=
DIVIDE([銷售額],CALCULATE([銷售額],ALL("產品"[產品名稱])))
結果如下,
這張表中最後一列每種產品佔分類的比例正是想要的結果,這兩個度量值的區別就在於ALL("產品")和ALL("產品"[產品名稱])。
ALL("產品")是清除對產品表上所有的列的上下文,正如上面看到的,CALCULATE([銷售額],ALL("產品")的結果就是總體的銷售額。
而ALL("產品"[產品名稱])僅僅是清除產品名稱的上下文,如果上下文不是產品名稱,那麼它還是會繼續計算,比如第一行是類別:電腦外設,它不屬於產品名稱,那麼這個度量值會計算電腦外設的銷售額。
可以單獨寫一個度量值觀察一下結果,
銷售額 分類= CALCULATE([銷售額],ALL("產品"[產品名稱]))
可以看出每一個產品計算出的銷售額都是所屬分類的匯總銷售額,正是利用這個特點,拿產品的銷售除以類別合計銷售額,就得到的每種產品占所屬類別的比例。
按篩選上下文計算總體佔比
現在如果想分析具體某幾個產品的數據,用產品名稱做個切片器,效果如下,
除了類別行和總計行的佔比發生了變化,每一種產品的佔比數據並沒有變化。
如果我們只是想分析所選的這幾種產品,把所選這幾種產品作為一個整體,來分析每種產品占所選產品的比例,這個結果顯然不能讓人滿意。
是時候請出ALLSELECTED函數登場表演了!
要計算每一種產品占所選品種合計銷售額的比例,度量值如下,
按篩選 佔總體%=
DIVIDE([銷售額],CALCULATE([銷售額],ALLSELECTED("產品")))
最後一列的佔比,無論我們篩選哪些產品,總體比例都是100%,而每一種產品,都是該產品占所選產品的比例。
ALLSELECTED函數針對外部上下文中進行篩選計算,正好是我們需要的效果。
按篩選上下文計算類別佔比
如果我們想進一步計算按外部所選的產品,並且按照產品類別,來計算相對產品類別的百分比,怎麼做呢?
也許你已經想到了,和上面一樣,使用ALLSELECTED("產品"[產品名稱],
按篩選 佔分類%=
DIVIDE([銷售額],CALCULATE([銷售額],ALLSELECTED("產品"[產品名稱])))
正是期望中的結果。
從這幾個實例可以看出,使用DAX來計算佔比非常靈活,稍微一改動,結果大不同,以硬碟為例,通過ALL和ALLSELECTED函數和參數的變化,獲得了4個不同的佔比,並且每種佔比都具有一定的意義,都是在某種業務場景下的真實需求。
總結
其實上面計算的每一種佔比,分子都不變,只是通過ALL和ALLSELECT函數及其參數的選擇操控不同的上下文環境,來控制分母的計算,進而得到我們所需要的佔比。
1,計算佔總體的比例,
總體佔比=
DIVIDE([銷售額],CALCULATE([銷售額],ALL("產品")))
2,計算占類別的比例,
分類佔比=
DIVIDE([銷售額],CALCULATE([銷售額],ALL("產品"[產品名稱])))
3,按外部篩選上下文,計算佔總體的比例,
按篩選 佔總體%=
DIVIDE([銷售額],CALCULATE([銷售額],ALLSELECTED("產品")))
4,按外部篩選上下文,計算占類別的比例,
按篩選 佔分類%=
DIVIDE([銷售額],CALCULATE([銷售額],ALLSELECTED("產品"[產品名稱])))
DAX函數並不是很容易理解,必須基於不同的上下文環境來觀察結果,通過不斷的練習、思考背後的邏輯,才能更好的掌握。
※有了這幾個公式,你也可以快速搞定累計求和
※用PowerBI進行帕累托分析有多簡單?
TAG:PowerBI星球 |