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

DAX滚动平均值在表格总计行无值的原因及相关疑问

DAX滚动平均度量值总计行无结果的原因及卡片快照实现

一、总计行无结果的原因分析

针对Rolling 6M Sales Amount度量值

总计行计算时,MAX(Dim_DateTable[dte])会返回整个日期表的最大日期,而lastSalesDate是销售表的最大交易日期。如果日期表的最大日期晚于销售数据的最后日期,IF(firstVisibleDate <= lastSalesDate)这个条件就不成立,直接返回空值。另外就算条件成立,AVERAGEX(VALUES(Dim_DateTable[Month Of Year]), [Sales Amount])在总计行是计算所有月份的销售金额平均值,但如果某些月份没有销售数据,[Sales Amount]返回空,也会导致最终结果为空。

针对Rolling 6M Sales Amount B度量值

总计行上下文里,MAX(Dim_DateTable[dte])取的是日期表全局最大日期,DATESINPERIOD生成的区间是从这个全局最大日期往前推6个月。如果这个区间里没有任何销售数据,[Sales Amount]返回空,除以6之后还是空值。另外,就算区间内有数据,这个度量值的逻辑是“滚动总和除以固定6”,但总计行的滚动总和是整个区间的所有销售总和,本身逻辑就不符合常规总计的预期,同时如果区间超出销售数据范围,也会返回空。

对比SUM函数能正常显示总计,是因为SUM在总计行直接计算所有销售数据的总和,不受日期表上下文的限制,只要有销售数据就会返回结果。

二、卡片视觉对象显示滚动平均值快照值的方法

要在卡片里显示最新的滚动平均值快照,核心是让度量值计算最新销售日期对应的6个月滚动平均,可以通过以下方式修改:

基于第一个度量值修改

Rolling 6M Sales Snapshot = 
VAR numOfMonths = 6
VAR lastSalesDate = MAX(Fact_SalesInvoice[Value Date])
VAR period = DATESINPERIOD(Dim_DateTable[dte], lastSalesDate,-numOfMonths,MONTH)

VAR result =
    CALCULATE(
        AVERAGEX(
            VALUES(Dim_DateTable[Month Of Year]),
            [Sales Amount]
        ),
        period
    )

RETURN result

基于第二个度量值修改

Rolling 6M Sales Snapshot B = 
VAR numOfMonths = 6
VAR lastSalesDate = MAX(Fact_SalesInvoice[Value Date])
VAR rollingSum =
    CALCULATE(
        [Sales Amount],
        DATESINPERIOD(Dim_DateTable[dte], lastSalesDate, -numOfMonths, MONTH)
    )

RETURN rollingSum/numOfMonths

修改后,卡片会直接取销售数据的最后日期,计算该日期往前6个月的滚动平均值,得到快照值。

三、修复总计行显示的可选方案

如果需要表格总计行显示合理的滚动平均(比如最新日期的滚动平均),可以用ISINSCOPE函数判断是否在总计行,指定总计行的计算逻辑:

以第一个度量值为例:

Rolling 6M Sales Amount (Fixed Total) = 
VAR numOfMonths = 6
VAR lastSelectedDate = MAX(Dim_DateTable[dte])
VAR period = DATESINPERIOD(Dim_DateTable[dte], lastSelectedDate,-numOfMonths,MONTH)

VAR result =
    CALCULATE(
        AVERAGEX(
            VALUES(Dim_DateTable[Month Of Year]),
            [Sales Amount]
        ),
        period
    )

VAR lastSalesDate = MAX(Fact_SalesInvoice[Value Date])
VAR firstVisibleDate = MAX(Dim_DateTable[dte])

-- 总计行时返回最新日期的滚动平均
VAR totalResult = 
    CALCULATE(
        AVERAGEX(
            VALUES(Dim_DateTable[Month Of Year]),
            [Sales Amount]
        ),
        DATESINPERIOD(Dim_DateTable[dte], lastSalesDate,-numOfMonths,MONTH)
    )

RETURN
    IF(
        ISINSCOPE(Dim_DateTable[Month Of Year]), -- 判断是否在行级(非总计)
        IF(firstVisibleDate <= lastSalesDate, result),
        totalResult -- 总计行返回最新快照值
    )

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 16:22:19