數據可視化之DAX篇(六) 利用ISINSCOPE函數,輕松按層級計算占比


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函數和參數的變化來計算占比,只是多了一個層級的判斷而已。

這兩篇文章結合起來,細細把這幾個度量值琢磨透徹,基本沒有什么占比可以難倒你了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM