DAX 用于按年滚动 7 天平均值以枢轴图表

DAX for rolling seven day average to pivot chart by year

我正在尝试创建一个单一的数据透视图,它将在同一日期轴上显示不同年份的数据,以获得 7 天的滚动平均值。

因此,x 轴将是文本,从 1 月 1 日到 12 月 31 日,每年都是一个单独的系列:

它必须是文本 x 轴,因为 01-Jan 将是包含 01-Jan-2018、01-Jan-2019、01-Jan-2020 的数据的类别...

理论上,枢轴 table 设置会将列(系列)作为年份,将 x 轴(标签)作为日期标签(日期列)。

这些值来自创建 7 天滚动平均值的 DAX 表达式。

源数据 (tblSource) 具有单列日期 (Date2),该列跨越多年滚动,并具有 Year 列以在数据透视表中对其进行分解。

每日值是(本身和前六天)的平均值。

我通常在 DAX 中使用的 7 天平均值在这里不起作用。

我需要将日期列实际放在数据透视表而不是 Date2 中,因为轴需要是文本以允许同一 x 轴点上有多个日期年份,但我无法获得 DAX 公式上班。

另一个考虑因素是公式不能只考虑一年,因为 2018 年 1 月 1 日的滚动七天平均值包括 2017 年的前六天,例如。

这是我常用的公式,但我无法调整它!

AVERAGEX (
    DATESINPERIOD ( tblSource[Date2], LASTDATE ( tblSource[Date2] ), -7, DAY ),
    [Sum of Daily Value]
)

但这是我得到的输出,没有任何平均值。我认为这是因为 Date2 正在从 Date 转向,但我不确定如何解决这个问题?

有人可以帮我吗?

这是一个非常令人沮丧的问题,因为使用代码或手动完成它对我来说是微不足道的,但我真的想在 DAX 上做得更好!

提前致谢!

菲尔.

更新:感谢 Joao。

=VAR d = MAX(tblSource[Date2])
RETURN CALCULATE(AVERAGE(tblSource[Daily Value]), 
    ALL(tblSource[Date]),
    DATESINPERIOD(tblSource[Date2], d, -7, day),tblSource[Year]>0)

我不得不使用 MAX 而不是 SELECVALUE,因为 Excel 似乎缺少该功能。

我还必须取消过滤年份,以便可以根据需要从前一年的日期计算滚动平均值。

谢谢。

当您 运行 测量时,您的 table 会在每个点被日期文本过滤,因此当您 pass/create DATESINPERIOD 过滤器时,它会创建a table 包含最后 7 个日期,但实际上只有其中一个可用(与您当前数据点相关的那个)。

您需要清除 table 上的过滤器,以便您拥有所有可用的日期,以便平均工作。您可以通过稍微更改度量来实现此目的:

VAR d = SELECTEDVALUE(tblSource[Date2])
RETURN CALCULATE(AVERAGE(tblSource[Daily Value]), 
    ALL(tblSource[Date]),
    DATESINPERIOD(tblSource[Date2], d, -7, day))