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

DAX中CONTAINS()函数匹配多值拼接列异常问题求助

问题描述

创建了如下DAX度量值:

Contains = IF(CONTAINS(Flags, Flags[FlagsConcat], SELECTEDVALUE(SlicerFlags[FlagNames])),1,-1)

Flags表的FlagsConcat列是多值拼接结果,示例数据如下:

idBcoNatGurGaAnSimOakOrtFlagsConcat
182600000011Oakpoint,Orthoselect
178400000011Oakpoint,Orthoselect
150300010000Guardian
150200010000Guardian
150000010000Guardian
149900010000Guardian
132600010000Guardian
92500010000Guardian

切片器SlicerFlags的FlagNames值包括:

  • Benco
  • National
  • Guardian-Simply Clear
  • Guardian
  • Angel Align
  • Simply Clear
  • Oakpoint
  • Orthoselect
  • None

当前问题:在切片器中选中Guardian时,度量值返回1;但选中Oakpoint或Orthoselect时,尽管表中有对应行包含这些值,度量值却返回-1。调整逗号前后的空格后问题仍未解决。

问题原因与解决方法

原因

CONTAINS函数执行的是精确字符串匹配,它会检查Flags表中是否存在某一行的FlagsConcat列值与切片器选中的FlagNames值完全相等:

  • 选中Guardian时,Flags表中存在FlagsConcat值为Guardian的行,精确匹配成功,返回1。
  • 选中Oakpoint时,Flags表中对应的FlagsConcat值是Oakpoint,Orthoselect,与Oakpoint并非完全相同的字符串,因此匹配失败,返回-1。

解决方法

需要改用支持子字符串包含匹配的函数,以下两种方案均可:

方案1:使用CONTAINSSTRING

CONTAINSSTRING专门用于检查一个字符串是否包含另一个子字符串,直接替换原度量值即可:

Contains = IF(CONTAINSSTRING(Flags[FlagsConcat], SELECTEDVALUE(SlicerFlags[FlagNames])), 1, -1)

方案2:使用SEARCH

SEARCH会返回子字符串在目标字符串中的起始位置,若不存在则返回错误,结合ISERROR判断即可:

Contains = IF(NOT(ISERROR(SEARCH(SELECTEDVALUE(SlicerFlags[FlagNames]), Flags[FlagsConcat]))), 1, -1)

注:SEARCH不区分大小写,若需要区分大小写的匹配,可改用FIND函数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 11:25:21