龙空技术网

DAX 训练 #003 :如何实现参数化计算移动平均

ExcelToPowerBi 27

前言:

此刻同学们对“移动计算实例”可能比较关怀,咱们都想要分析一些“移动计算实例”的相关资讯。那么小编也在网摘上收集了一些对于“移动计算实例””的相关内容,希望兄弟们能喜欢,小伙伴们一起来了解一下吧!

欢迎参加DAX 训练 #003

(DAX 训练系列,旨在帮助提高在Power BI 中对 DAX 技能的运用和理解,通过解决实际问题加强对DAX系统的学习,欢迎持续关注。)

本次训练中,要求您创建动态参数(按天),以实现动态的计算移动平均销售额,允许用户选择不同的天数,以展示按不同天数显示的移动平均值。示例文件包含包含 PBI 文件,它包括数据以及一个创建的日期表。

动态效果如图(1-1)所示:

图(1-1)

计算移动平均的基础思路:

1.确定当前上下文中最后一个可见的日期

2.移动平均的天数,这里先设的是固定值 30 计算30天的移动平均

3.创建一组日期,包含从最后一个可见日期到之前30天之间的所有日期

4.使用上一步创建的日期区间作为CALCULATE函数的筛选器参数,调用AVERAGEX在30天的周期中迭代计算每日销售额的平均值

以下是示例文件中提供的实现方式之一:

先计算30天的移动平均:

移动平均 30 =  //1.确定当前上下文中最后一个可见的日期VAR LastVisbleDate = MAX('CoffeeOrder'[订单日期]) //2.移动平均的天数,这里先设的是固定值 30  计算30天的移动平均VAR NumofDays = 30  //3.创建一组日期,包含从最后一个可见日期到之前30天之间的所有日期VAR DateToUse =     FILTER(        ALL('日期表'),        '日期表'[日期] > LastVisbleDate - NumofDays &&        '日期表'[日期] <= LastVisbleDate    )//4.使用上一步创建的日期区间作为CALCULATE函数的筛选器参数,调用AVERAGEX在30天的周期中迭代计算每日销售额的平均值VAR RollingAvg =    CALCULATE(        AVERAGEX(VALUES('日期表'[日期]),[销售额]),        DateToUse    )RETURN    RollingAvg

动态化实现过程,其实也很简单了,需要创建一个移动平均参数,新建一个参数,把切片器命名为:移动平均参数

然后把此前公式中,移动平均的天数从之前的 30天,改成参数的值

移动平均 N =  //1.确定当前上下文中最后一个可见的日期VAR LastVisbleDate = MAX('CoffeeOrder'[订单日期]) //2.移动平均的天数,设为参数,值为 N  动态计算N天的移动平均VAR NumofDate = SELECTEDVALUE('移动平均参数'[移动平均参数]) //3.这里用DATEINPERIOD函数,直接创建一组日期,包含从最后一个可见日期到之前N天之间的所有日期VAR DateToUse = DATESINPERIOD('日期表'[日期], LastVisbleDate, -NumofDate, DAY)//4.使用上一步创建的日期区间作为CALCULATE函数的筛选器参数,调用AVERAGEX在N天的周期中迭代计算每日销售额的平均值VAR RollingAvg =    CALCULATE(        AVERAGEX(VALUES('日期表'[日期]),[销售额]),        DateToUse    )RETURN    RollingAvg

至此就实现了移动平均的计算。

正如上图所示,移动平均常常用来分析趋势。如题显示的,如果我们想分析日销售额的情况,创建一个报表显示每日销售额,其结果难以分析,原因就是得到的每日数据具有很强的波动性,所以为了使绘制的图表平滑,一种常用的分析技术就是计算某段时间内的平均值,而不仅仅是单日的平均值,计算移动平均,有助于从图表中抹平峰值,从而更容易发现数据表现的趋势。

公众号回复:D003

可获取本次的训练文件,本例中,PBI文件提供了一个示例数据集,或者您也可以简单地创建自己的数据集来练习下,欢迎大家在评论区分享自己的训练结果,可以附下DAX度量值的不同写法、效果展示截图等等,以供大家一起学习!

如果有需要,您可以根据自己的数据,计算按月份、年份的移动平均,以观察分析数据的趋势。

标签: #移动计算实例