小伙伴们大家好,今天我们来研究一下如何用 Power BI 动态求所选日期区间内的平均值,最大值以及移动平均值。
我们来看看效果演示:
通过选择不同的指标名称实现了图表的指标切换,指标名称包括:销售额、利润额、订单数、销售数量。
使用滑块选择不同的日期区间,图表中自动标记该日期区间内指标的最大值和平均线。
输入移动平均天数,移动平均曲线自动根据设置的移动平均天数计算每日的移动平均值。
模型结构如下:
1个事实表:【F01-订单明细】
1个维度表:【D04-日期表】
维度表与事实表之间创建一对多的关系。
关于动态指标的切换在之前的文章中有涉及到,此处不再赘述,感兴趣的小伙伴可以去看看往期分享:原来DAX函数是全动态图表实现的幕后英雄 #POWER BI# No.006
这里把动态指标的DAX公式分享给大家:
动态指标 =
SWITCH (
SELECTEDVALUE ( 'FZ02_指标切换'[Name] ),
"Sales", [销售总额],
"Profit", [利润总额],
"Order", [订单总数],
"Quantity", [销售数量],
[销售总额]
)
接下来求最大值,度量值写法如下:
动态指标_最大值_日 =
MAXX (
ALLSELECTED ( 'D04-日期表' ),
[动态指标]
)
MAXX 是一个迭代函数,扫描当前所选日期的每一行所对应的 [动态指标] 值,然后求这些值中的最大值。ALLSELECTED 函数可以获取当前外部筛选器选择的日期。
平均值的度量值写法如下:
动态指标_平均值_日 =
AVERAGEX (
ALLSELECTED ( 'D04-日期表'),
[动态指标]
)
AVERAGEX 是一个迭代函数,扫描当前所选日期的每一行所对应的 [动态指标] 值,然后对这些值求平均。
移动平均值的度量值写法如下:
动态指标_移动平均_N日 =
VAR datefilter =
DATESINPERIOD ( 'D04-日期表'[日期],
MIN ( 'D04-日期表'[日期] ),
- [参数_移动平均天数 值],
DAY
)
RETURN
AVERAGEX ( datefilter, [动态指标] )
VAR 用来存储中间常量,从而简化代码。有VAR 后面自然要使用RETURN 来返回值,它们是成对出现的。
[参数_移动平均天数 值]是什么呢?这是我们设置的参数,参数设置方法参见动图演示:
我们可以给参数设置一个默认值,同时勾选 [将切片器添加到此页] 就可以自动生成一个日期区间的切片器了。
新建参数后会自动创建一个参数表,表中会自动出现一个度量值来计算当前切片器选择的值,如下图所示:
DATESINPERIOD函数语法如下:
假设 [参数_移动平均天数 值] 等于7,DATESINPERIOD函数所对应的公式含义为:
从当前日期点-7+1天 开始,到当前日期点为止的这一段时间。
假如当前日期点为2020年6月20日,那么DATESINPERIOD函数所对应的公式将生成一个日期表,如下图所示:
然后用AVERAGEX函数计算这些日期对应的 [动态指标] 值的平均值。这样就求出了该日期点的7日移动平均值。
度量值都写好了,接下来就要创建图表了,图表结构如下:
如何在图表中突出显示最大值呢?这里也少不了DAX公式:
动态指标_最大值_日_颜色区分 =
IF (
[动态指标] = [动态指标_最大值_日],
1,
)
公式含义:如果当前日期的 [动态指标] 值等于所选日期区间内动态指标的最大值,则返回1,否则返回0。
有了这个度量值,如何设置柱形图的颜色呢?具体操作参见动图演示:
这里使用规则分别对DAX公式生成的值进行着色即可。
好了,今天的分享就到这里,我们下期再见!
领取专属 10元无门槛券
私享最新 技术干货