使用(全选)时SSRS记录不显示但选择特定值时是

时间:2015-10-20 16:32:14

标签: sql-server reporting-services ssms ssrs-2012 sql-server-data-tools

我的报告有一个多值参数。它有可用的值(1,2,3,4,5和空白)。空白值不是NULL,它只是一个空单元格。

出于测试目的,应该只显示一条记录。该记录在我用于在我的存储过程中过滤的单元格中有一个空白值。

在参数下拉列表中,我看到了所有选项。如果我选择(全选)选项,我不会得到我想要的记录。但是,如果我只选择空白值,我会得到我想要的记录。我手动将记录更新为“2”。我选择(全选)并获得记录。我只选择“2”值并得到记录。如果我再次删除该值以使值为空,我只会在下拉列表中选择“空白”选项时获取记录。

我创建了一个文本框来输出参数的值,当它被自己或其他值选中时,它显示为空白。

我的存储过程或报告中缺少什么?提前谢谢。

2 个答案:

答案 0 :(得分:1)

如果您有多个select参数,SSRS应该以逗号分隔的值列表发送到您的存储过程。您有责任将这些内容拆分为可以加入的内容。

在报告本身中,您没有在一个包装精美的字符串中获取值列表以供显示。我不得不使用代码来迭代参数中的值。

当我有空白可用值时,我测试了SSRS正在做什么。我创建了一个测试报告,其中包含六个可用选项,然后是一个存储过程,用于强制输出所选值:

CREATE PROCEDURE dbo.Test_RPT
(
 @TestMultiSelect varchar(1000)
)
AS
SELECT @TestMultiSelect RVAL

在报告中,我只有一个显示此RVAL字段的文本框。

如果我在开头放置空白选项,则输出为1,2,3,4,5。如果空白选项位于任何其他位置,则其中包含:1,2,3,,4,51,2,3,4,5,

答案 1 :(得分:0)

如果要在SSRS报告数据集的存储过程中将多个值传递给Sql IN子句,则存储过程中需要进行细微更改:

请参阅SP

中的Sample WHERE子句
...  
AND Courses.Type_Code IN (@Type_Code)

添加一个SplitString()函数,根据分隔符拆分传递的参数。

SplitString()的主体看起来像:

CREATE FUNCTION [dbo].[SplitString]
(
    @pString VARCHAR(8000), 
    @pDelimiter CHAR(1)
)
RETURNS @Values TABLE (Value VARCHAR(50))
AS
BEGIN

        DECLARE @xml as XML;

        SET @xml = cast(('<X>'+replace(@pString, @pDelimiter, '</X><X>')+'</X>') as xml);

        INSERT @Values
        SELECT N.value('.', 'varchar(50)') as value 
        FROM @xml.nodes('X') as T(N);

        RETURN
END;

最后,IN子句将如下所示:

...
AND Courses.Type_Code IN (SELECT * FROM dbo.SplitString(@type_code,','))