使用 (Select 全部) 时不显示 SSRS 记录,但在 Selecting 特定值时显示

SSRS Records Not Showing Up When (Select All) Is Used But Is When Selecting A Particular Value

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

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

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

我制作了一个文本框来输出参数的值,当它被单独选中或与其他值一起选中时,它显示为空白。

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

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

在报告本身中,您不会在用于显示的精美包装字符串中获得值列表。我不得不使用代码来迭代参数中的值。

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

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,.

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

参见 SP 中的示例 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,','))