如何在 SSRS 报告中传递多值字符?

Fas*_*ous 8 sql-server ssrs

我有一份 SSRS 报告,其中有 3 个数据集来自一个数据源。主数据集是一个存储过程,它根据由其他两个数据集提供支持的一组参数聚合一些数据。

支持此报告的主要存储过程有 4 个参数。一个是数据类型的 ID,两个是开始和结束日期,第三个只是一个标志参数。flag 参数是多值参数,我想在其中传递多个也是 VARCHAR 值的标志值。

在我的 @Flag 参数的存储过程中,我有共同点:

WHERE [Flag] IN (@Flag)
Run Code Online (Sandbox Code Playgroud)

然后当然 SSRS 报告上的 @Flag 参数设置为允许“多个值”,这些值也是从从维度表中提取这些 @Flag 值的查询填充的。

我的问题

在大多数情况下,在处理 INT 值时,使用相同的技术是有效的。但是,当我处理字符值时,它失败了。如果我选择一个标志,报告会神奇地工作。如果我选择了多个标志,它似乎不会将这些标志正确地传递给存储过程,并且不会返回任何结果。

直接在存储过程中测试多值标志时:

WHERE [Flag] IN ('A', 'B', 'C')
Run Code Online (Sandbox Code Playgroud)

存储过程正常工作。所以问题不在于存储过程,而在于 SSRS 如何将多值值传递给 @Flag 参数。

尝试的解决方案

我尝试对这个@Flag 参数的 SSRS 数据集进行以下调整:

=join(Parameters!<your param name>.Value,",")
Run Code Online (Sandbox Code Playgroud)

还有这个:

=SPLIT(JOIN(Parameters!<your param name>.Value,","),",")
Run Code Online (Sandbox Code Playgroud)

这些都适用于单个值,但从不适用于多值。

我在这里缺少什么?

Fas*_*ous 7

我找到了解决方案。我没有使用 UDF 正确拆分存储过程中的值。

要在此存储过程中正确传递多值,我需要将以下代码添加到我正在使用的数据集参数中:

=join(Parameters!<your param name>.Value,",")
Run Code Online (Sandbox Code Playgroud)

这基本上是将多个值连接到一个数组中并通过@Flag参数传递它。下一步是将 SQL 添加到存储过程以正确接收和消化值,以便它使用IN子句读取值。

谷歌在线搜索任何 UDF 字符串解析器。有很多可供选择。我dba_parseString_udf从 Michelle Ufford http://sqlfool.com 使用

安装 UDF 后,我现在可以更改IN子句以接收 SSRS 传递的新多值参数,如下所示:

WHERE [Flag] IN (SELECT * FROM dba_parseString_udf(@Flag, ','))
Run Code Online (Sandbox Code Playgroud)

因此,SSRS 将传递以下值:

@Flag = 'A,B,C'
Run Code Online (Sandbox Code Playgroud)

然后我的 UDF 会将该字符串正确解析为:

A
B
C
Run Code Online (Sandbox Code Playgroud)

@Flag正确填充我的参数SELECT * FROM UDF()...