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

DAX问题:从文本列提取匹配用户值的度量值返回空值

问题

我创建了两个虚拟表:Narrative表和User表,二者为一对多(1-*)关系。我编写了一段DAX度量值,用于识别Narrative列中提及的User列用户,但该度量值始终返回空值。尝试过使用FIND函数和CONTAINSSTRING函数,均无法从User列返回匹配值。

度量值代码如下:

MatchedUsers = 
  VAR NarrativeText = MAX('Narrative'[Narrative])
  RETURN 
    CALCULATE(
      CONCATENATEX(
        FILTER(
          VALUES('User'[User]),
          NOT(ISBLANK(NarrativeText)) && 
          CONTAINSSTRING(NarrativeText, 'User'[User])
        ),
      'User'[User], ", "
    )
  )

期望该度量值返回Narrative列中提及的User列用户名称,预期效果如下:

NarrativeUser
The tree is green
Tim's tree is green
Tim, Sarah, Anne, FredSarah, Anne
Jack, SarahJack, Sarah
It is sunny outside

问题原因与解决方案

你的度量值返回空值的核心原因是一对多表关系的上下文筛选限制:在Narrative表的行上下文环境中,CALCULATE会自动应用表间的关系筛选,导致VALUES('User'[User])只能返回当前Narrative行关联的用户,而非全部用户列表,因此无法匹配文本中提及的其他用户。

修正后的度量值需要绕开关系筛选的影响,同时优化逻辑严谨性:

MatchedUsers = 
VAR NarrativeText = MAX('Narrative'[Narrative])
RETURN
    IF(
        ISBLANK(NarrativeText),
        BLANK(),
        CONCATENATEX(
            FILTER(
                ALL('User'[User]),  // 获取所有用户的唯一值,不受关系筛选限制
                NOT(ISBLANK('User'[User])) &&  // 排除空用户条目
                CONTAINSSTRING(NarrativeText, 'User'[User])
            ),
            'User'[User],
            ", "
        )
    )

关键修正说明

  • 替换VALUES('User'[User])为ALL('User'[User]):解除表关系带来的筛选限制,确保能遍历所有用户进行匹配。
  • 增加空用户判断:避免User表中的空值被误判为匹配结果。
  • 外层IF判断:提前处理空文本场景,让度量值逻辑更清晰高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 01:20:55