如何让TEXT SLICER返回精确匹配而非执行搜索功能?
实现Text Slicer的精确匹配(替代默认包含搜索)
默认Text Slicer的搜索逻辑是包含匹配(类似SEARCH函数),输入部分内容会拉出所有含该内容的行——比如输入名字,会显示所有用户名带这个名字的邮箱。要改成精确匹配,也就是只有当输入内容和邮箱列的完整值完全一致时才显示对应数据,可按以下方法实现:
方法1:用DAX度量值配合筛选器
这是无需额外插件的原生实现方式:
- 在数据模型中创建如下DAX度量值:
精确匹配筛选 = VAR 切片器输入值 = SELECTEDVALUE('你的表名'[邮箱列]) RETURN IF( ISBLANK(切片器输入值), 1, COUNTROWS(FILTER('你的表名', '你的表名'[邮箱列] = 切片器输入值)) )
- 逻辑说明:切片器为空时返回1(显示所有数据),否则仅计算与输入值完全匹配的行数。
- 将这个度量值拖到「筛选器」面板,设置筛选条件为大于0,并应用到当前页面或整个报表。
- 保持Text Slicer绑定到邮箱列,此时只有输入完整的邮箱地址才会筛选出对应数据,输入部分内容(比如名字)不会返回结果。
方法2:用文本参数替代切片器(更灵活的输入控制)
如果需要更独立的输入框,可通过参数实现:
- 创建一个文本参数(比如命名为「精确匹配邮箱」),设置为允许任意输入值。
- 创建DAX度量值:
参数精确匹配 = VAR 参数输入值 = '精确匹配邮箱'[精确匹配邮箱值] RETURN IF( ISBLANK(参数输入值), 1, COUNTROWS(FILTER('你的表名', '你的表名'[邮箱列] = 参数输入值)) )
- 同样将该度量值添加到筛选器,设置为大于0,之后用参数的输入框来替代原Text Slicer即可。
补充:如果要精确匹配邮箱的用户名部分
若需求是输入名字时,仅匹配邮箱中@符号前的用户名(比如输入「张三」只匹配zhangsan@xxx.com,不匹配lizhangsan@xxx.com),可修改度量值提取用户名后再精确匹配:
用户名精确匹配筛选 = VAR 切片器输入值 = SELECTEDVALUE('你的表名'[邮箱列]) VAR 提取用户名 = LEFT('你的表名'[邮箱列], FIND("@", '你的表名'[邮箱列]) - 1) RETURN IF( ISBLANK(切片器输入值), 1, COUNTROWS(FILTER('你的表名', 提取用户名 = 切片器输入值)) )
内容的提问来源于stack exchange,提问作者Jacek Sierajewski
相关产品推荐
相关产品推荐

