SSRS REPORT BUILDER:Tablix中用表达式比较两数据集报错求助
修正你的数据集比较表达式问题
看起来你的表达式里有几个关键错误导致了ONGRADE行返回Error,咱们一步步拆解问题并修正:
问题分析
你的表达式存在三个核心问题:
- LookupSet参数完全不符合语法:LookupSet的正确用法是
LookupSet(查找值, 源数据集匹配字段, 源数据集返回字段, "源数据集名称"),你把条件表达式(比如Fields!Grade.Value = "ONGRADE")直接塞进去,报表引擎根本无法解析这种格式。 - 比较逻辑完全混乱:
Fields!Grade.Value = "ONGRADE" > LookupSet(...)这种写法是把「判断Grade是否为ONGRADE的布尔值」和LookupSet返回的集合做比较,逻辑上完全说不通,而且集合本身也不能直接用来做大于判断。 - 错误选择了LookupSet函数:如果你只是要获取上三周数据集中对应ONGRADE的单个值(比如计数、数值),应该用
Lookup而不是LookupSet——LookupSet是用来返回多个匹配值的集合,只有当你需要批量结果时才用它。
修正后的表达式
假设你的需求是:当当前行的Grade为ONGRADE时,比较当前数据集里该Grade的数值(比如计数)和上三周数据集里同Grade的对应数值,当前值更大返回UP,否则返回DOWN,这里分两种场景给出修正方案:
场景1:行级数值比较(每行对应一个Grade的数值)
如果你的表格每行对应一个Grade,且有对应的数值字段(比如Count),可以用这个表达式:
=IIf( Fields!Grade.Value = "ONGRADE", IIf( Fields!Count.Value > Nz(Lookup("ONGRADE", Fields!grade.Value, Fields!Count.Value, "Previous3Week"), 0), "UP", "DOWN" ), "" ' 非ONGRADE行可以返回空或自定义内容 )
- 用
Nz(..., 0)是为了避免上三周数据集没有ONGRADE记录时出现空值错误,自动把空值转为0。
场景2:聚合值比较(比较两个数据集里ONGRADE的总数量)
如果是要统计两个数据集里ONGRADE的总数量再做比较,表达式可以这样写:
=IIf( Fields!Grade.Value = "ONGRADE", IIf( Sum(IIf(Fields!Grade.Value = "ONGRADE", 1, 0), "当前数据集名称") > Sum(IIf(Fields!grade.Value = "ONGRADE", 1, 0), "Previous3Week"), "UP", "DOWN" ), "" )
- 记得把
当前数据集名称替换成你实际使用的当前数据集的名字。
额外提示
如果你确实需要使用LookupSet(比如上三周数据集里有多个匹配ONGRADE的记录),那必须先对返回的集合做聚合处理(比如求和、取最大值)才能和当前值比较,示例:
=IIf( Fields!Grade.Value = "ONGRADE", IIf( Fields!Count.Value > Sum(LookupSet("ONGRADE", Fields!grade.Value, Fields!Count.Value, "Previous3Week")), "UP", "DOWN" ), "" )
内容的提问来源于stack exchange,提问作者Curteze
相关产品推荐
相关产品推荐

