如何编写DAX度量值返回最小求和值对应的ID?
问题修复与DAX度量值优化
原度量值问题分析
你尝试的Min_value_id报错,核心原因是CALCULATE的筛选条件不能直接使用聚合函数(如SUM(count))与变量做比较——CALCULATE的筛选器作用于行级数据,无法直接识别聚合后的结果。
另外,原Min_value硬编码了id=1和id=2,后续若新增ID,度量值会失效,建议先优化为通用写法。
优化后的Min_value度量值
Min_value = VAR ID_Summary = SUMMARIZE('你的表名', '你的表名'[id], "@TotalCount", SUM('你的表名'[count])) RETURN MINX(ID_Summary, [@TotalCount])
该写法通过SUMMARIZE生成每个ID对应的count求和表,再用MINX提取最小值,适配任意数量的ID。
正确的Min_value_id度量值
场景1:仅存在一个ID对应最小值
Min_value_id = VAR ID_Summary = SUMMARIZE('你的表名', '你的表名'[id], "@TotalCount", SUM('你的表名'[count])) VAR Min_Total = MINX(ID_Summary, [@TotalCount]) RETURN MAXX(FILTER(ID_Summary, [@TotalCount] = Min_Total), [id])
逻辑说明:
- 用
SUMMARIZE生成每个ID的count求和表 - 计算最小求和值
Min_Total - 筛选出求和值等于
Min_Total的ID,用MAXX返回对应的ID(若有多个匹配,返回最大的ID)
场景2:存在多个ID对应最小值(返回所有匹配ID)
如果需要处理多个ID求和相同且均为最小值的情况,可使用CONCATENATEX拼接结果:
Min_value_ids = VAR ID_Summary = SUMMARIZE('你的表名', '你的表名'[id], "@TotalCount", SUM('你的表名'[count])) VAR Min_Total = MINX(ID_Summary, [@TotalCount]) RETURN CONCATENATEX(FILTER(ID_Summary, [@TotalCount] = Min_Total), [id], ", ")
测试验证
基于你提供的数据集:
| count | id |
|---|---|
| 200 | 1 |
| 400 | 2 |
| 400 | 1 |
| 500 | 2 |
Min_value返回600(ID=1的求和结果)Min_value_id返回1,符合预期
内容的提问来源于stack exchange,提问作者user9230962
相关产品推荐
相关产品推荐

