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


8

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

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

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

WHERE [Flag] IN (@Flag)

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

我的问题

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

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

WHERE [Flag] IN ('A', 'B', 'C')

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

尝试过的解决方案

我尝试为此@Flag参数对SSRS数据集进行以下调整:

=join(Parameters!<your param name>.Value,",")

还有这个:

=SPLIT(JOIN(Parameters!<your param name>.Value,","),",")

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

我在这里想念什么?

Answers:


7

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

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

=join(Parameters!<your param name>.Value,",")

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

Google在线搜索任何UDF字符串解析器。有很多选择。我使用dba_parseString_udf了Michelle Ufford的http://sqlfool.com

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

WHERE [Flag] IN (SELECT * FROM dba_parseString_udf(@Flag, ','))

因此,SSRS将传递以下值:

@Flag = 'A,B,C'

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

A
B
C

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


如果这对其他人有帮助:可以将联接表达式(=join(Parameters!<your param name>.Value,","))添加到读取参数的数据集中,在“参数”选项卡下:在“参数值”下拉菜单的右侧有一个用于添加表达式的“ fx”按钮-下。
Doug_Ivison

另外,如果数据库值和参数值可靠地是唯一的并且彼此之间没有子集,则不要创建要解析的UDF,而是跳过解析并仅使用CHARINDEX:例如,如果读取嵌入式SQL中的参数的代码为: WHERE <Table>.[<Column>] IN (@MultiValueParm),那么存储过程中的代码可能是WHERE CHARINDEX(<Table>.[<Column>], @MultiValueParmAsText) > 0
Doug_Ivison

很好的问答,谢谢!仅供参考,SQLFool.com似乎已关闭。:本ParseString()函数可以被发现在github.com/MichelleUfford/sql-scripts/blob/master/dev/...
ĴWeezy
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.