ISINSCOPE,帮你按层级计算占比
关于占比,之前有篇文章(利用ALL和ALLSELECTED灵活计算占比)详细介绍了各种情况下占比的度量值。
经星友咨询,还有一种情况没有介绍,实际工作中会经常用到的情形是:父级字段显示该层级值占总体的比例,而打开该层级,显示子级各明细项占该层级值的占比。
仍然用占比文章中的示例,直接来看一下效果。
当处于产品类别层级,显示类别占在总体的比例,
而打开类别,产品明细显示占该类别的比例,
其实单独计算产品明细占类别的比例,以及类别占总体的比例,在占比那篇文章都介绍过,现在只是需要把这两种情况合并在一起就行了。
合并在一起,主要是需要判断当前上下文是类别还是产品名称,这就要用到一个新函数:ISINSCOPE。
这个函数直译过来的意思就是:是否在范围内,官方释义为:当指定的列是级别层次结构中的级别时,返回true。
直接给出实现上述效果的DAX写法:
占比 层级 =
SWITCH (TRUE (),
ISINSCOPE ('产品'[产品名称]), DIVIDE([销售额],CALCULATE([销售额],ALLSELECTED('产品'[产品名称]))),
ISINSCOPE ('产品'[产品类别]), DIVIDE([销售额],CALCULATE([销售额],ALLSELECTED('产品'[产品类别]))),
DIVIDE([销售额],CALCULATE([销售额],ALLSELECTED('产品'[产品名称])))
)
通过ISINSCOPE来判断当前上下文是产品名称还是产品类别,分别计算不同的占比,并利用SWITCH函数区分不同的情况返回对应的数据。
因为利用了ALLSELECTED函数,这个度量值也是可以根据外部的筛选情况灵活返回对应的占比数据,
本质上依然是占比文章中利用ALL和ALLSELECTED函数和参数的变化来计算占比,只是多了一个层级的判断而已。
这两篇文章结合起来,细细把这几个度量值琢磨透彻,基本没有什么占比可以难倒你了。
赞 (0)