检查SSRS中多个列的多值参数

时间:2017-05-24 18:46:26

标签: sql-server reporting-services sql-server-2014 ssrs-2014

我一直试图让这个功能在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))

1 个答案:

答案 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中,如果您调用存储过程,它将无法正常工作。