数据可视化之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函数和参数的变化来计算占比,只是多了一个层级的判断而已。

这两篇文章结合起来,细细把这几个度量值琢磨透彻,基本没有什么占比可以难倒你了。

posted @ 2020-04-30 11:31  秋华  阅读(1830)  评论(0编辑  收藏  举报