powerquery的if函数(power bi if函数)
计算个体在人口中的比例是一种非常常见的分析方法。很简单,就是把两个数除。但是,当需要计算的维度和种群的范围动态变化时,如何灵活快速地计算各种比例还需要一点思考。
在本文中,我们将使用DAX中的ALL和ALLSELECTED函数,看看如何在PowerBI中快速计算各种比例。
数据是电子产品在虚拟网上商城的销售记录。我们根据销售指标计算某一产品占整体或品类的比例。
首先,写一份销售指标,
销售额=SUM('订单'[销售额])
看看矩阵中这个度量的结果,
00-1010计算总的比例,即每个类别的销售额除以总计数来计算总计数。可以使用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函数并不是很容易理解,必须基于不同的上下文环境来观察结果,通过不断的练习、思考背后的逻辑,才能更好的掌握。
公众号PowerBI星球内输入”PowerBI“,获取更多学习资源。
the end。