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

DAX中计算度量值最大值的问题求助

DAX 问题排查与解决方案

问题原因分析

  1. 原公式失效原因
    MAXX(ALL(EventDetail[TimelinessBreak]),[RunningTotal*])仅清除了TimelinessBreak列的筛选,但RunningTotal*度量值中使用的ALLSELECTED('EventDetail')会保留当前可视化的其他筛选上下文(如切片器、其他列筛选)。此时MAXX遍历TimelinessBreak所有值时,每个值对应的RunningTotal*是当前筛选上下文+清除TimelinessBreak筛选后的结果,并非当前可视化中RunningTotal*的全局最大值。

  2. Marcus公式返回错误值原因
    CALCULATE([RunningTotal*], ALL(EventDetail))清除了EventDetail表的所有筛选,导致RunningTotal*中的ALLSELECTED('EventDetail')等效于ALL(EventDetail),计算的是全表所有行的累计总和(3587177),而非当前可视化范围内的目标最大值1982。

解决方案

方案一:遍历当前可视化所有分组取最大值

Pareto%* = 
MAXX(
    // 获取当前可视化中所有TimelinessBreak分组(保留其他筛选)
    CALCULATETABLE(
        VALUES(EventDetail[TimelinessBreak]),
        ALLSELECTED(EventDetail)
    ),
    // 计算每个分组对应的RunningTotal*
    CALCULATE(
        [RunningTotal*],
        EventDetail[TimelinessBreak] = EARLIER(EventDetail[TimelinessBreak])
    )
)

方案二:直接取排序最后一个分组的累计值(更高效)

由于RunningTotal*是按TimelinessBreakSort降序累计的,最大值必然是排序最后一个分组的累计值,可直接定位计算:

Pareto%* = 
CALCULATE(
    [RunningTotal*],
    FILTER(
        ALLSELECTED(EventDetail[TimelinessBreakSort], EventDetail[TimelinessBreak]),
        EventDetail[TimelinessBreakSort] = MAX(ALLSELECTED(EventDetail[TimelinessBreakSort]))
    )
)

验证逻辑

两个方案均保留了当前可视化的筛选上下文(与你移除TimelinessBreak列时的筛选一致),确保计算的是当前范围内RunningTotal*的最大值1982,且每行都返回该值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 00:57:24