【问题标题】:Checking a multi-value parameter against multiple columns in SSRS针对 SSRS 中的多个列检查多值参数
【发布时间】:2017-05-24 18:46:26
【问题描述】:

一段时间以来,我一直试图让这个函数在 SQL Server Reporting Studio 2014 中工作,但通过大量搜索我无法在此处找到解决方法。

我对 SSRS 还很陌生,但我发现在 2014 年您无法在它们之间创建带有 OR 的过滤器(以前在早期版本中是可能的)。我有一种情况,我想使用单个多值参数 (@IDs) 来检查一个值是否存在于同一个表的 4 个单独的列(ID 1、ID 2、ID 3 和 ID 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))

【问题讨论】:

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


    【解决方案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))
    

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

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

    注意您需要将查询代码放在数据集中而不是存储过程中,如果您调用存储过程,它将无法正常工作。

    【讨论】:

    • 感谢您的回复!它几乎适用于我正在尝试做的事情,但是我仍然缺少一些数据,尽管数量非常少,但仍然很重要。我在这里缺少的唯一情况是参数留空为“”。此方法会遗漏所有 4 列中都有数据的行,并且只返回 [ID 1]、[ID 2]、[ID 3] 或 [ID 4] 包含 '' 作为其数据的行。有什么方法可以合并类似于我在原始问题中的 IIF() 语句的内容吗?
    • 我想更新这个,因为我找到了我需要的答案。 WHERE 子句应如下所示:WHERE ('' IN (@IDs) OR [ID 1] IN (@IDs) OR [ID 2] IN (@IDs) OR [ID 3] IN (@IDs) OR [ID 4] IN (@IDs)) 如果@IDs 为空,第一个子句允许返回所有行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-20
    • 1970-01-01
    • 2012-02-11
    • 1970-01-01
    相关资源
    最近更新 更多