求SSRS表达式:判断员工姓名是否存在于管理者列中
解决SSRS中判断员工是否为管理者的表达式问题
问题核心
你需要判断当前员工的Names值是否在整个数据集的Mngr列中出现过(即该员工是否是其他人的管理者),而非检查当前行的Mngr字段是否包含当前员工姓名。
方法一:单数据集直接实现(无需额外数据集)
直接基于现有数据集,用LookupSet函数查找整个Mngr列中是否存在匹配当前Names的值,再通过集合长度判断结果:
=IIF(LookupSet(Fields!Names.Value, Fields!Mngr.Value, Fields!Mngr.Value, "DataSet1").Length > 0, "Y", "N")
如果需要返回布尔值:
=LookupSet(Fields!Names.Value, Fields!Mngr.Value, Fields!Mngr.Value, "DataSet1").Length > 0
说明:
LookupSet会返回数据集里所有Mngr等于当前Names的记录集合- 集合长度大于0,就说明该员工是至少一个人的管理者
方法二:利用你已创建的DataSet2(仅存管理者)
你之前的表达式存在语法错误(括号不匹配、字段名可能有误),修正后的正确表达式如下(确认DataSet2里的管理者字段为Mngr,如果实际字段是Mngrs则替换):
=IIF(LookupSet(Fields!Names.Value, Fields!Mngr.Value, Fields!Mngr.Value, "DataSet2").Length > 0, "Y", "N")
简化逻辑:LookupSet找不到匹配时会返回空集合,此时长度为0,直接判断长度即可,无需额外判断IsNothing。
你之前的表达式无效原因
- InStr方法逻辑错误:
InStr(Fields!Mngr.Value, Fields!Names.Value)仅检查当前行的管理者字段是否包含当前员工姓名,并非遍历整个Mngr列判断该员工是否为管理者,逻辑完全不符合需求。 - LookupSet表达式语法错误:你之前的代码括号不匹配(
Not IsNothing(未闭合),且字段名可能与DataSet2实际字段不符,导致无法运行。
内容的提问来源于stack exchange,提问作者ttratl
相关产品推荐
相关产品推荐

