我一直试图让这个功能在SQL Server Reporting Studio 2014中工作一段时间,而且我还没有通过大量搜索找到解决方法。
我对SSRS相当新,但我已经看到你在2014年无法在它们之间创建带过OR的过滤器(以前版本中曾经有过这种过滤器)。我有一种情况,我想使用单个多值参数(@IDs)来检查同一个表(ID 1,ID 2,ID 3和ID 4)的4个单独列中是否存在值。
理论上,这将是:
WHERE [ID 1] IN @IDs
OR [ID 2] IN @IDs
OR [ID 3] IN @IDs
OR [ID 4] IN @IDs
如果参数中有单个值输入,则此方法有效。但是,当参数具有多个值或为空('')时,这显然不起作用。在其他参数中,我使用表达式:
[column_name] IN =IIF(Parameters!parameter.Value(0) = "",Fields!column_name.Value,Parameters!parameter_name.Value)
在检查单个列时,这为我提供了正确的结果。我还没有找到一种方法将其翻译成我需要对4列的其他参数检查所做的事情。
总之,如果@IDs ='',则返回数据集中的所有行,否则请检查[ID 1],[ID 2],[ID 3]或[中的有效值] ID 4]并返回正确的行。
以答案更新
Alan Schofield提供了大部分答案,稍作调整。数据集查询应如下所示:
SELECT *
FROM myTable
WHERE
('' IN (@IDs) OR
[ID 1] IN (@IDs) OR
[ID 2] IN (@IDs) OR
[ID 3] IN (@IDs) OR
[ID 4] IN (@IDs))
答案 0 :(得分:1)
在数据集中执行此操作会更容易。你的WHERE子句基本上是正确的,除非你需要在@IDs参数周围添加括号。
所以你的数据集查询看起来像
SELECT *
FROM myTable
WHERE
([ID 1] IN (@IDs) OR
[ID 2] IN (@IDs) OR
[ID 3] IN (@IDs) OR
[ID 4] IN (@IDs))
不要在您的数据集中声明@ID,并确保@ID是与您的报告参数名称区分大小写的精确匹配。
SSRS会自动将报告参数中的值(而不是标签)作为逗号分隔的字符串传递给SQL语句。
注意您需要将查询代码放在数据集中而不是stroed proc中,如果您调用存储过程,它将无法正常工作。