You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DAX实现获取第N个最近非空销售额及最近3个非空销售日销售额平均值

解决方案:获取最近N个非空销售额的平均值(DAX)

针对你提出的需求——计算任意日期下最近3个非空销售额的平均值,同时要能灵活获取倒数第N个非空销售额,我给你整理了一套DAX实现方案,先结合你的示例数据来看:

示例数据

DateAmountN'th 1N'th 2N'th 3Expected Results
2021-02-01111.00
2021-02-022211.50
2021-02-0322211.67
2021-02-042211.67
2021-02-0533222.33
2021-02-063222.33
2021-02-073222.33
2021-02-0844323.00
2021-02-094323.00
2021-02-104323.00
2021-02-114323.00

DAX实现步骤

1. 定义非空销售额的基础数据集

先创建一个计算表,筛选出所有包含有效销售额的记录,方便后续引用:

NonBlankSales = 
FILTER(
    ALL('Sales'),
    NOT(ISBLANK('Sales'[Amount]))
)

2. 创建获取第N个最近非空销售额的度量值

以获取倒数第1、2、3个值为例,分别创建度量值:

倒数第1个非空销售额(N'th 1)

N'th 1 = 
VAR CurrentDate = MAX('Sales'[Date])
-- 筛选当前日期及之前的最近3个非空销售额,按日期倒序
VAR RankedRecentSales = 
    TOPN(
        3,
        FILTER(NonBlankSales, NonBlankSales[Date] <= CurrentDate),
        NonBlankSales[Date], DESC
    )
-- 取倒序后的第1个值
RETURN
    INDEX(1, RankedRecentSales, OrderBy(NonBlankSales[Date], DESC), KeepAllRows())[Amount]

倒数第2个非空销售额(N'th 2)

只需把INDEX的第一个参数改成2即可:

N'th 2 = 
VAR CurrentDate = MAX('Sales'[Date])
VAR RankedRecentSales = 
    TOPN(
        3,
        FILTER(NonBlankSales, NonBlankSales[Date] <= CurrentDate),
        NonBlankSales[Date], DESC
    )
RETURN
    INDEX(2, RankedRecentSales, OrderBy(NonBlankSales[Date], DESC), KeepAllRows())[Amount]

倒数第3个非空销售额(N'th 3)

同理,INDEX参数改为3:

N'th 3 = 
VAR CurrentDate = MAX('Sales'[Date])
VAR RankedRecentSales = 
    TOPN(
        3,
        FILTER(NonBlankSales, NonBlankSales[Date] <= CurrentDate),
        NonBlankSales[Date], DESC
    )
RETURN
    INDEX(3, RankedRecentSales, OrderBy(NonBlankSales[Date], DESC), KeepAllRows())[Amount]

3. 计算预期平均值

最后创建度量值,收集有效非空值并计算平均:

Expected Results = 
VAR Val1 = [N'th 1]
VAR Val2 = [N'th 2]
VAR Val3 = [N'th 3]
-- 过滤掉空值,只保留有效销售额
VAR ValidSalesValues = 
    FILTER(
        {Val1, Val2, Val3},
        NOT(ISBLANK([Value]))
    )
-- 计算有效值得平均值
RETURN
    AVERAGEX(ValidSalesValues, [Value])

方案说明

  • 这个方案支持通用化获取第N个最近非空值:只要调整TOPN的数量(比如要取最近5个就改成5)和INDEX的参数,就能灵活获取倒数第N个值。
  • 即使当前日期之前的非空销售额不足3个(比如示例中的前两行),AVERAGEX会自动忽略空值,只计算现有有效值得平均,结果符合预期。

内容的提问来源于stack exchange,提问作者Przemyslaw Remin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 06:52:33