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

DAX使用LOOKUPVALUE返回多值错误,如何填充全表Measure_id字段

DAX多匹配场景下填充Measure_ID的实现方案

错误原因说明

LOOKUPVALUE函数要求返回唯一值,当同一筛选条件下匹配到多条数据时,就会触发A table of multiple values was supplied where a single value was expected报错。

需求规则梳理

从示例数据可以得出填充规则:每个Group_ID对应的Measure_ID等于该分组下Desc为open的行对应的ID值,同分组下所有行统一填充该值。

实现方案

可以实现类似Excel的INDEX+MATCH逻辑,以下是两种常用的计算列实现方式:

方案1:CALCULATE+聚合函数组合(最简写法)

Measure_ID = 
CALCULATE (
    MAX ( '你的表名'[ID] ),
    ALLEXCEPT ( '你的表名', '你的表名'[Group_ID] ),
    '你的表名'[Desc] = "open"
)

说明:ALLEXCEPT保留当前行的Group_ID筛选上下文,筛选出同分组下Desc为open的行,用MAX聚合保证返回唯一值,避免多匹配报错。如果确认每个分组下只有1条Desc=open的行,也可以将MAX替换为VALUES。

方案2:模拟Excel INDEX+MATCH逻辑

Measure_ID = 
VAR CurrentGroup = '你的表名'[Group_ID]
// 匹配同分组下Desc为open的所有行,对应Excel的MATCH逻辑
VAR MatchRows = 
    FILTER (
        ALL ( '你的表名' ),
        '你的表名'[Group_ID] = CurrentGroup && '你的表名'[Desc] = "open"
    )
// 取第一条匹配结果的ID值,对应Excel的INDEX逻辑
RETURN
SELECTCOLUMNS ( TOPN ( 1, MatchRows, '你的表名'[ID] ), "MeasureID", [ID] )

说明:该写法逻辑和Excel INDEX+MATCH完全一致,TOPN(1)会取匹配到的第一条结果,即使存在多匹配场景也不会报错。

注意事项

  • 以上均为计算列写法,如果需要实现度量值,调整上下文筛选规则即可
  • 如果存在同一个Group_ID下有多个不同ID的open行,可根据实际需求调整聚合逻辑,比如按时间排序取最早/最晚的ID值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 16:27:04