AVERAGEX:一个值得你花时间探索的函数

AVERAGEX是一个迭代器函数,所有以X结尾的函数都是迭代器函数,它们循环整张表格并为每行计值一个表达式,最后使用不同的算法来聚合结果。
今天我们通过一个业务场景,来探索下AVERAGEX函数的用法。在我们实际业务需求中,经常会遇到总计值不同的情况,今天介绍的这个场景是如何让地区的合计值显示其平均值销售额,而不是销售额总计。

如下图所示:

file

想要求的结果是总计显示平均值,其他显示每个地区的销售额。也就是我们要改变的是值是总计值,那么问题就转换为如何区分出来总计行。
区分总计行,我们可以想到的函数是SELECTEDVALUE 、HASONEVALUE、HASONEFILTER、ISFILTERED、ISCROSSFILTERED

具体公式如下:

SELECTEDVALUE = SELECTEDVALUE('省份'[地区]) = BLANK()

HASONEVALUE = HASONEVALUE('省份'[地区])

HASONEFILTER = HASONEFILTER('省份'[地区])

ISFILTERED = ISFILTERED('省份'[地区])

ISCROSSFILTERED = ISCROSSFILTERED('省份'[地区])

我们看下公式计算结果:

file

上图我们可以看到前三个函数的结果是能够区分出来总计行与其他行不同的,而后两个函数结果一致,所以前三个函数我们是都可以进行使用的。以上我们判断出来了总计行,接下来就是计算如果是总计,就返回平均值,否则返回销售额。

具体公式如下:

file

file

以上结果我们可以看到,这几个函数都可以得到我们想要的结果,但其实使用AVERAGEX可以一步得到结果,公式如下:

file

这个公式就是使用VALUES函数得到一张表,然后使用AVERAGEX在VLAUES产生的表格里创建一个新的行上下文,然后对于每一行进行迭代来计算其平均值。

AVERAGEX它的语法如下:
AVERAGEX(

参数 定义
table 表的名称,或者指定可对其执行聚合的表的表达式。
expression 具有标量结果的表达式,将为第一个参数中表的每一行计算该表达式。


说明

AVERAGEX 函数可用于对表的每一行计算表达式,然后采用生成的值的集合并计算其算术平均值。因此,该函数采用表作为其第一个参数,采用表达式作为其第二个参数。

所有迭代器均以相同方式工作,具体如下:

  • 在收到的表格上创建了一个新的行上下文,作为第一个参数;
  • 对于表格中的每一行,在新创建的行上下文内部对第二个参数进行计值;
  • 如果迭代器需要聚合,对步骤2中计算出的值进行不同算法的聚合。(还有一些迭代函数如FILTER、ADDCOLUMNS迭代函数不执行此步骤)

    总结

  • SELECTEDVALUE 、HASONEVALUE、HASONEFILTER均可以区分总结行;
  • 所有以X结尾的函数都是迭代器函数;
  • FILTER、ADDCOLUMNS也是迭代器函数,但不执行聚合运算。



* PowerPivot工坊原创文章,转载请注明出处!


如果您想深入学习微软Power BI,欢迎登录网易云课堂试听学习我们的“从Excel到Power BI数据分析可视化”系列课程。或者关注我们的公众号(PowerPivot工坊)后猛戳”在线学习”。


长按下方二维码关注“Power Pivot工坊”获取更多微软Power BI、PowerPivot相关文章、资讯,欢迎小伙伴儿们转发分享~

Power Pivot工坊