对于给定的日期,我想要获取最近三天内非空销售额的平均值。因此,我不仅需要检索最后一个非空销售额(可能很容易),还需要获取倒数第二个和倒数第三个销售额。一般来说,我需要获取第N个最近的销售额。
样本数据:
+------------+--------+--------+--------+--------+------------------+
| Date | Amount | N'th 1 | N'th 2 | N'th 3 | Expected Results |
+------------+--------+--------+--------+--------+------------------+
| 2021-02-01 | 1 | 1 | | | 1.00 |
| 2021-02-02 | 2 | 2 | 1 | | 1.50 |
| 2021-02-03 | 2 | 2 | 2 | 1 | 1.67 |
| 2021-02-04 | | 2 | 2 | 1 | 1.67 |
| 2021-02-05 | 3 | 3 | 2 | 2 | 2.33 |
| 2021-02-06 | | 3 | 2 | 2 | 2.33 |
| 2021-02-07 | | 3 | 2 | 2 | 2.33 |
| 2021-02-08 | 4 | 4 | 3 | 2 | 3.00 |
| 2021-02-09 | | 4 | 3 | 2 | 3.00 |
| 2021-02-10 | | 4 | 3 | 2 | 3.00 |
| 2021-02-11 | | 4 | 3 | 2 | 3.00 |
+------------+--------+--------+--------+--------+------------------+
第N1个是最后一个“非空”销售。第N2个是“倒数第二个”。预期结果是N1、N2和N3的平均值。
样本数据文件链接及已被接受答案建议的解决方案:
DAX Rolling Average NonBlanks.pbix
VAR rankedTab = FILTER ( ADDCOLUMNS ( nonBlankTab, "Rank", RANKX ( nonBlankTab, [Date] ) ), [Rank] <= 3 )
,因为它具有灵活性。如果有人只想要第N个元素,他可以通过将<=变为=来获取它。 - Przemyslaw ReminREMOVEFILTERS(Data[Date])
的原因是什么?我想将您的解决方案(使用Sales表的日期字段)修改为具有日历表的数据模型。您能否请查看我在答案中提供的示例文件?我无法理解REMOVEFILTERS的原因。 - Przemyslaw Remin'Calendar'[Date] <= _maxDate
,它完全相同,但引入了另一个评估,这是不必要的。请参阅CALCULATE
文档的注释部分:如果列(或表)已经在筛选上下文中,则现有的筛选器将被新筛选器覆盖以评估 CALCULATE 表达式。 - W.B.