【问题标题】:How to have a multi value parameter text box in SSRS that also allows blanks?如何在 SSRS 中拥有一个允许空格的多值参数文本框?
【发布时间】:2016-10-11 22:49:27
【问题描述】:

我有一份 SSRS 报告,用户希望能够在多个网站上进行搜索,而应该只是该报告通常接受的一个网站。

如果他们没有在参数文本框中输入站点,则报告会搜索所有站点。

我已经在 where 子句中的 SQL 查询中成功处理了这个问题,如下所示

在哪里 ( ( LEN(@ProjectId) > 0 AND p.ProjectId = @ProjectId ) OR ( LEN(@ProjectId) = 0))

如果没有输入值,这适用于仅搜索一个站点或所有站点。

他们希望能够输入多个站点并用逗号分隔它们。

我在我的 SSRS 报告中处理了这个问题,将我的数据集中的参数定义为

=JOIN(Parameters!ProjectId.Value, ",")

但是,这不适用于预期的空白值或空值。

我已经做了一些花哨的表达来尝试解决这个问题

=IIF(ISNothing(Parameters!ProjectId.Value), "", JOIN(Parameters!ProjectId.Value))

将传递给 SQL 查询的参数设置为空白,如果没有遇到值则不进行连接。

基本上我想知道是否有一种方法可以让多组参数用逗号分隔,但如果未选择值则作为空白传递。

目前我尝试将参数设置为允许多值但也不起作用,我收到如下所示的错误消息

【问题讨论】:

  • 您是否有理由不使用报告中参数选项卡的复选框功能?在参数选项卡中,用户可以选择多个位置和空白值。

标签: sql sql-server reporting-services


【解决方案1】:

首先设置你的多值参数:

然后在您的数据集中定义一个新参数,在这种情况下我称之为@PCount

@PCount 使用以下表达式定义:

=IIF(Parameters!P1.Count=0 Or 
    (Parameters!P1.Count = 1 And Parameters!P1.Value(0) = ""),
        0,
        Parameters!P1.Count)

如果没有输入值,或者输入了一个空白值,这将返回 0。然后你的查询变成这样:

SELECT Col1, Col2, Col3
FROM YourTable
WHERE ProjectID IN (@P1)
UNION ALL
SELECT Col1, Col2, Col3
FROM YourTable
WHERE @PCount = 0

您可以使用OR 执行此操作,如下所示:

SELECT Col1, Col2, Col3
FROM YourTable
WHERE ProjectID IN (@P1)
OR @PCount = 0

但我认为这更有可能遇到性能问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-28
    • 2014-11-17
    • 1970-01-01
    • 1970-01-01
    • 2011-03-21
    相关资源
    最近更新 更多