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

DAX技术求助:按GroupId分组取指定日期前最大HistoryId对应的Value

问题修正:DAX度量值实现指定日期前分组取最大HistoryId对应Value

需求回顾

获取指定日期(来自calendar表选中值)之前的historyTable记录,按GroupId分组后,取每组最大HistoryId对应的Value字段值,最终返回各分组值的汇总(或按分组返回对应值)。

原代码问题分析

  1. SummarizeColumns筛选器参数使用错误:筛选逻辑未正确作用于分组上下文
  2. 全局最大值而非分组最大值:max(historyTable[HistoryId])是整个筛选表的最大值,而非每个GroupId分组后的最大值
  3. 字段名不匹配:原代码中ToNumberValue与表结构定义的Value字段不符
  4. 值获取逻辑风险:VALUES(...)在存在多值时会报错,未确保唯一值匹配

修正后的度量值代码(方案一)

_m = 
VAR SelectedDate = SELECTEDVALUE(calendar[Date])
-- 筛选指定日期前的历史记录
VAR FilteredHistory = FILTER(historyTable, historyTable[Created] < SelectedDate)
-- 按GroupId分组,计算每组的最大HistoryId
VAR GroupMaxHistory = 
    SUMMARIZE(
        FilteredHistory,
        historyTable[GroupId],
        "MaxHistoryId", MAX(historyTable[HistoryId])
    )
-- 关联原表获取对应GroupId和最大HistoryId的Value值
VAR GroupValue = 
    ADDCOLUMNS(
        GroupMaxHistory,
        "HistoryValue", 
            LOOKUPVALUE(
                historyTable[Value],
                historyTable[GroupId], [GroupId],
                historyTable[HistoryId], [MaxHistoryId]
            )
    )
-- 汇总所有分组的Value值,若需按分组展示可直接返回GroupValue(需配合矩阵等可视化)
RETURN SUMX(GroupValue, [HistoryValue])

简化版度量值(方案二)

_m = 
VAR SelectedDate = SELECTEDVALUE(calendar[Date])
RETURN
SUMX(
    VALUES(groupTable[GroupId]), -- 遍历每个GroupId
    VAR CurrentGroup = groupTable[GroupId]
    -- 获取当前分组下指定日期前的最大HistoryId
    VAR MaxHistoryId = 
        CALCULATE(
            MAX(historyTable[HistoryId]),
            historyTable[GroupId] = CurrentGroup,
            historyTable[Created] < SelectedDate,
            ALL(groupTable) -- 清除分组上下文干扰
        )
    -- 获取对应最大HistoryId的Value值
    VAR CorrespondingValue = 
        CALCULATE(
            SELECTEDVALUE(historyTable[Value]),
            historyTable[GroupId] = CurrentGroup,
            historyTable[HistoryId] = MaxHistoryId
        )
    RETURN CorrespondingValue
)

代码说明

  1. SelectedDate:获取calendar表中选中的目标日期,与原逻辑一致但命名更清晰
  2. FilteredHistory:精准筛选出目标日期之前的所有历史记录
  3. 分组取最大HistoryId:通过SUMMARIZE或CALCULATE+ALL确保每个GroupId获取自身分组内的最大HistoryId
  4. 值匹配:使用LOOKUPVALUE或SELECTEDVALUE确保唯一匹配对应GroupId和HistoryId的Value值,避免多值报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 09:33:07