gpt4 book ai didi

powerbi - DAX 获取第 N 个最后一个非空值

转载 作者:行者123 更新时间:2023-12-03 15:53:46 25 4
gpt4 key购买 nike

对于任何给定日期,我想获得最近 3 天非空白销售额的平均销售额。所以我不仅需要检索最后一个非空白销售额(这可能很容易),而且我还需要获得倒数第二个和倒数第三个销售额。一般来说,我需要 N'th last sales。
样本数据:


+------------+--------+--------+--------+--------+------------------+
| 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 |
+------------+--------+--------+--------+--------+------------------+
N'th 1 是最后一个“非空白”销售。 N'th 2 是“最后一个”。预期结果是 N1、N2、N3 的平均值。
链接到示例数据文件,其中包含接受的答案建议的解决方案:
DAX Rolling Average NonBlanks.pbix

最佳答案

这是我的看法(这是一个措施):

Non-blank average = 
var curDate = SELECTEDVALUE(Data[Date], MAX(Data[Date]))
var nonBlankTab = FILTER(ALL(Data), NOT(ISBLANK(Data[Amount])) && Data[Date] <= curDate)
var rankedTab = FILTER ( ADDCOLUMNS ( nonBlankTab, "Rank", RANKX ( nonBlankTab, [Date] ) ), [Rank] <= 3 )
return AVERAGEX(rankedTab, [Amount])
编辑 :
简单解释一下:
  • 度量是针对所选日期计算的。如果不存在日期上下文,则假定为最新日期。
  • 然后我过滤掉表格,只包含不迟于 curDate
  • 的非空白销售行。
  • 然后我对日期进行排名,以便最近的 3 个日期始终获得排名 1、2 和 3。
  • 然后我过滤掉所有排名高于 3 的日期
  • 最后,我计算剩余 3 个数据点的平均值。

  • enter image description here
    编辑2:
    我稍微简化了测量 - lastSalesDate 不是必需的。此外,根据评论中的要求,我保留了第一次尝试,这是使用 TOPN 而不是 ADDCOLUMNS/RANKX/FILTER 组合的修改版本:
    Non-blank average = 
    var curDate = SELECTEDVALUE(Data[Date], MAX(Data[Date]))
    var nonBlankTab = FILTER(ALL(Data), NOT(ISBLANK(Data[Amount])) && Data[Date] <= curDate)
    var rankedTab = TOPN(3, nonBlankTab, [Date])
    return AVERAGEX(rankedTab, [Amount])
    EDIT3:
    一个更通用的度量版本,它只是从 Date 中删除过滤器列,这实际上就是我们所需要的。无需屠宰 table 上的所有其他过滤器:
    Non-blank average = 
    var curDate = SELECTEDVALUE(Data[Date], MAX(Data[Date]))
    var nonBlankTab = CALCULATETABLE(FILTER(Data, NOT(ISBLANK(Data[Amount])) && Data[Date] <= curDate), REMOVEFILTERS(Data[Date]))
    var rankedTab = TOPN(3, nonBlankTab, [Date])
    return AVERAGEX(rankedTab, [Amount])

    关于powerbi - DAX 获取第 N 个最后一个非空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66121861/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com