针对 SSRS 中的多列检查多值参数

Checking a multi-value parameter against multiple columns in SSRS

一段时间以来,我一直在尝试让此功能在 SQL Server Reporting Studio 2014 中运行,但通过大量搜索我未能在这里找到解决方法。

我是 SSRS 的新手,但我发现您无法在 2014 年创建在它们之间使用 OR 的过滤器(在早期版本中曾经是可能的)。我有一种情况,我想使用单个多值参数 (@IDs) 来检查相同 table(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 = '',return 数据集中的所有行,否则检查 [ID 1]、[ID 2]、[ID 3] 或 [ ID 4] 和 return 正确的行。

更新答案

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))

在你的数据集中这样做,会容易得多。您的 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))

不要在您的数据集中声明@IDs 并确保@IDs 与您的报表参数名称完全区分大小写匹配。

SSRS 会自动将报告参数中的值(不是标签)作为逗号分隔的字符串传递,并将其注入到 SQL 语句中。

注意您需要将查询代码放在数据集中而不是stroed proc,如果您调用存储过程,它不会起作用它很神奇。