如何使用LIKE比较竖线分隔文本字段与指定列(SSRS场景)
SSRS 竖线分隔文本全匹配解决方案
需求说明
通过Lookup/LookupSet生成竖线(|)分隔的文本(示例:Bobo Vera|Bobo Vera|Bob Veras|Bobos Veras| Bob, Verra),需将Column A的内容(示例:bobo vera)与分隔后的每个元素用LIKE运算符匹配:
- 所有元素均匹配Column A → 输出
Success - 任意元素不匹配 → 输出
Not same - 分隔元素的数量、长度无固定限制
实现步骤
1. 添加自定义代码
打开报表属性 → 切换到「代码」标签页,粘贴以下VB代码:
Function CheckAllMatches(columnA As String, pipeSeparatedText As String) As String ' 处理空文本的情况 If String.IsNullOrEmpty(pipeSeparatedText) Then Return "Not same" End If ' 拆分竖线分隔的文本为数组 Dim items As String() = pipeSeparatedText.Split("|"c) ' 清理Column A:去首尾空格、合并连续多空格、转小写(忽略大小写匹配) Dim cleanTarget As String = Replace(columnA.Trim(), " ", " ").Trim().ToLower() ' 遍历每个元素进行匹配 For Each item As String In items ' 清理当前元素:去首尾空格、合并连续多空格、转小写 Dim cleanItem As String = Replace(item.Trim(), " ", " ").Trim().ToLower() ' 使用LIKE模糊匹配,只要有一个元素不匹配就返回Not same If Not cleanItem Like "*" & cleanTarget & "*" Then Return "Not same" End If Next ' 所有元素都匹配则返回Success Return "Success" End Function
2. 调用自定义代码的表达式
在需要输出结果的文本框中,使用以下表达式:
=Code.CheckAllMatches(Fields!ColumnA.Value, IIf(Lookup(Fields!IDa1.Value, Fields!ID.Value, Fields!givenName.Value, "Brother_Sister")<>"", Join(LookupSet(CStr(Fields!FamilyID.Value), Fields!BrotherGrpID.Value, CStr(Fields!givenName.Value), "Brother_Sister"), "|"), ""))
逻辑说明
- 文本清理:统一处理Column A和分隔元素的空格问题(合并多空格、去首尾空格),转小写实现大小写不敏感匹配
- 匹配规则:使用
LIKE运算符结合通配符*实现模糊匹配,若需精确匹配可修改为cleanItem = cleanTarget - 终止逻辑:遍历中只要发现不匹配的元素,立即返回
Not same,无需继续检查剩余元素
内容的提问来源于stack exchange,提问作者EMPOWER EXCEL
相关产品推荐
相关产品推荐

