将 Excel 公式转换为 DAX,计算特定时间段内最后 2 个值的平均值

问题描述 投票:0回答:1

我在 Excel 中有下表:

DATE        VALUE
01/01/2024  100
02/01/2024  150
03/01/2024  200
04/01/2024  
05/01/2024  
06/01/2024  
07/01/2024  
08/01/2024  
09/01/2024  
10/01/2024  
11/01/2024  
12/01/2024

假设该表名为 Table1。对于 2024 年 4 月 1 日至 2024 年 12 月 1 日,我想计算前两个月的平均值。例如:2024 年 4 月 1 日将为 175 (200 + 150),2024 年 5 月 1 日将为 187.5 (200 + 175)。我创建了这个函数来求解 Excel 公式:

=REDUCE(FILTER(Table1[VALUE],Table1[VALUE]<>""),FILTER(Table1[VALUE],Table1[VALUE]=""),LAMBDA(a,b,VSTACK(a,AVERAGE(TAKE(a,-2)))))

如果我想在 Power BI DAX 中实现这一点,我该如何解决这个问题?

lambda powerbi dax reduce moving-average
1个回答
0
投票

我使用 CurrentRowDate 存储当前行的日期进行比较,并使用 PreviousValues 过滤表以仅包含当前日期之前具有非空值的行。 您可以看到 LastTwoValues 根据日期从 PreviousValues 中获取前 2 行。 在 RETURN 语句中,我检查当前 VALUE 是否为空。如果是,则计算 LastTwoValues 中 VALUE 的平均值,如果不是,则仅返回当前 VALUE。

AverageOfLastTwoValues = 
VAR CurrentRowDate = Table1[DATE]
VAR PreviousValues = FILTER(
    Table1,
    Table1[DATE] < CurrentRowDate && NOT(ISBLANK(Table1[VALUE]))
)
VAR LastTwoValues = TOPN(2, PreviousValues, Table1[DATE], DESC)
RETURN IF(
    ISBLANK(Table1[VALUE]),
    AVERAGEX(LastTwoValues, Table1[VALUE]),
    Table1[VALUE]
)

© www.soinside.com 2019 - 2024. All rights reserved.