DAX | 理解AVERAGEX函数的参数构成与计算逻辑

DAX | 理解AVERAGEX函数的参数构成与计算逻辑_第1张图片

本期重点:

理解AVERAGEX的参数构成

理解AVERAGEX函数的计算逻辑

小伙伴们好啊。

今天为大家介绍的函数是AVERAGEX

该函数的参数如下:

AVERAGEX(

,)

简单描述一下:一参提供一张表(表表达式),二参提供一个表达式,该表达式将对一参中的表每一行进行迭代计算结果,最后计算平均值

相信很多小伙伴都有接触过移动平均的概念(对移动平均还不熟悉的小伙伴可以参考工坊的这篇文章:移动平均与预测),对这个函数的用法已经大致了解。接下来我们通过一个简化的数据模型,计算过去两天(含当日)的平均销售额,加深大家对AVERAGEX函数的理解。

1数据准备

DAX | 理解AVERAGEX函数的参数构成与计算逻辑_第2张图片

源数据中有两列数据,日期和销售额。另有一张日期表和源数据建立一对多关系。

2度量值编写

过去两天平均销售额V1 =

VAR CurrentDate =

MAX ( '日期表'[Date] )

VAR Period =

FILTER (

ALL( '日期表'[Date] ),

'日期表'[Date] >= CurrentDate - 1

&& '日期表'[Date] <= CurrentDate

)

VAR Result =

AVERAGEX ( Period, [销售额] )

RETURN

Result

通过CurrentDate返回当前上下文的日期,然后用该日期通过FILTER函数返回对日期表的筛选,该日期表包含当前上下文的日期和前一天的日期。最后计算两天的平均销售额。

一起来看结果,截图如下:

DAX | 理解AVERAGEX函数的参数构成与计算逻辑_第3张图片

结果可能出乎一些小伙伴的意料,10月2号的结果不是1号和2号的平均销售额而是1号的销售额,但4号却计算出了正确的销售额(3号和4号的平均销售额)。

对于这个问题的解释是:AVERAGEX函数忽略一参中计算结果为0的行。对于10月2号当前行来说,虽然有1号和2号两个日期,但2号的销售额为0。所以AVERAGEX将忽略2号,从而计算的结果将是1号的平均销售额。

那如果一定要计算前后两天的平均销售额要怎么办呢。由于AVERAGEX函数的内部计算逻辑限定,这个时候就不能借助AVERAGEX函数来实现了。给出以下度量值供参考:

过去两天平均销售额 V2 = 

VAR CurrentDate =

MAX ( '日期表'[Date] )

VAR Period =

FILTER (

ALL( '日期表'[Date] ),

'日期表'[Date] >= CurrentDate - 1

&& '日期表'[Date] <= CurrentDate

)

VAR Result =

DIVIDE ( CALCULATE ( [销售额], Period ), COUNTROWS ( Period ) )

RETURN

Result

DIVIDE函数的分子为当前上下文的前后两天的销售额,分母用COUNTROWS计算筛选的表(Period)的行数(天数)。这样我们用自定义的方式限定了DIVIDE函数的分母,最终结果截图如下:

DAX | 理解AVERAGEX函数的参数构成与计算逻辑_第4张图片

V1和V2没有对错之分,要如何计算取决于具体的业务逻辑。小伙伴们在使用这个函数的时候,要多多留心哦。

最后留一道思考题:总计行的结果返回空。聪明的小伙伴们能想到为什么吗,欢迎踊跃留言吧。祝大家学习愉快,下次见。

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

延伸阅读:


重点函数 | SELECTEDVALUE用法介绍

重点函数 | TREATAS函数介绍

重点函数 | LASTNONBLANK用法介绍

重点函数 | ISCROSSFILTERED用法介绍

重点函数 | 表函数与DAX查询



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

DAX | 理解AVERAGEX函数的参数构成与计算逻辑_第5张图片

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

DAX | 理解AVERAGEX函数的参数构成与计算逻辑_第6张图片

你可能感兴趣的:(DAX | 理解AVERAGEX函数的参数构成与计算逻辑)