https://zhuanlan.zhihu.com/p/70590683
關於占比,之前有篇文章(利用ALL和ALLSELECTED靈活計算占比)詳細介紹了各種情況下占比的度量值。
經星友咨詢,還有一種情況沒有介紹,實際工作中會經常用到的情形是:父級字段顯示該層級值占總體的比例,而打開該層級,顯示子級各明細項占該層級值的占比。
仍然用占比文章中的示例,直接來看一下效果。
當處於產品類別層級,顯示類別占在總體的比例,
而打開類別,產品明細顯示占該類別的比例,
其實單獨計算產品明細占類別的比例,以及類別占總體的比例,在占比那篇文章都介紹過,現在只是需要把這兩種情況合並在一起就行了。
合並在一起,主要是需要判斷當前上下文是類別還是產品名稱,這就要用到一個新函數:ISINSCOPE。
這個函數直譯過來的意思就是:否在范圍內,官方釋義為:當指定的列是級別層次結構中的級別時,返回true。
直接給出實現上述效果的DAX寫法:
占比 層級 =
SWITCH (TRUE (),
ISINSCOPE ('產品'[產品名稱]), DIVIDE([銷售額],CALCULATE([銷售額],ALLSELECTED('產品'[產品名稱]))),
ISINSCOPE ('產品'[產品類別]), DIVIDE([銷售額],CALCULATE([銷售額],ALLSELECTED('產品'[產品類別]))),
DIVIDE([銷售額],CALCULATE([銷售額],ALLSELECTED('產品'[產品名稱])))
)
通過ISINSCOPE來判斷當前上下文是產品名稱還是產品類別,分別計算不同的占比,並利用SWITCH函數區分不同的情況返回對應的數據。
因為利用了ALLSELECTED函數,這個度量值也是可以根據外部的篩選情況靈活返回對應的占比數據,
本質上依然是占比文章中利用ALL和ALLSELECTED函數和參數的變化來計算占比,只是多了一個層級的判斷而已。
這兩篇文章結合起來,細細把這幾個度量值琢磨透徹,基本沒有什么占比可以難倒你了。