計算個體佔總體的比例是一個很常見的分析方式,它很簡單,就是兩個數字相除,但是當需要計算的維度、總體的範圍發生動態變化時,如何靈活且快速的計算出各種佔比,還是需要動一點心思的。

本文就通過 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函數並不是很容易理解,必須基於不同的上下文環境來觀察結果,通過不斷的練習、思考背後的邏輯,才能更好的掌握。

推薦閱讀:

相关文章