繁体   English   中英

使用SSRS报告传递参数值,这是SQL数据集的csv列表

[英]Using SSRS report to pass in a param value the is a csv list to SQL Dataset

我已经制作了一个SSRS报告,其中有一个文本字段参数,用户将在其中输入以逗号分隔的字符串值列表。 该列表将被输入到报表的数据集中的SQL查询中,该数据集中包含:... WHERE TheField(@myCSVParam)。

如果我从字段传入单个值,它可以工作,但是如果我从字段中传递csv列表,那么报告会说这样的值不存在。

我认为它将csv列表视为单个值,因此没有数据返回。

如何转换该csv列表并转换为sql IN过滤器的可用参数?

我今天正在寻找一种方法来做这个,并且有很多建议需要构建一个存储过程来处理这个,但我发现这个解决方案有点混乱。 我终于提出了自己的,非常简单的解决方案。

因此,假设您希望用户能够在单个文本框中输入多个销售订单,以逗号分隔,例如: 61JF073, 61SW073, 61SW074

我的第一个报告参数名为“OrderNo”,描述“订单号(用逗号分隔)”。 数据类型=“文本”,没有选中任何内容。

我的第二个参数是从第一个参数中获取列表并创建一个“多值”列表,您可以在SQL查询中使用该列表。

第二个参数:Name =“OrderNos”,type =“Text”。 选中“允许多个值”。 参数visibility =“Internal”(用户不需要看到这个)。 可用值=无默认值=指定值添加值: =Split(Replace(Parameters!OrderNo.Value," ",""),",")

我正在使用“替换”功能删除所有空格,因为用户可能会在逗号后输入空格,这将影响输出。

现在,您的SQL查询可以包含“IN”子句来过滤结果。

SELECT OrderNo, SalesID, SalesName FROM SalesOrders WHERE OrderNo IN (@OrderNos)

数据将在SQL服务器而不是SSRS报告中进行过滤,这是在应用过滤器之前保存SSRS报告以检索整个表的首选方法。 您只想检索报告所需的数据。

我希望这对我来说很有帮助,因为我的销售订单表有数千行。

而不是2个参数,我使用了类似= split( 参数!Category.Value ,“,”)的东西

并将SQL [In(@Category)]中使用的参数设置为该表达式。 唯一的缺点是它隐藏在数据集参数选项卡中。

我最终将它更改为= split(替换(参数!Category.Value,“”,“”),“,”)和你的一样:)由你决定,如果你想要一个参数并让参数等于一个表达式,或有2个参数,并传递1到另一个。

我无法发布图片,但我的是http://i.stack.imgur.com/rhnWt.png

听起来@myCSVParam是一个单值字符串参数。 因此,SSRS将在SQL语句中使用它时引用它。 所以对于一个值你得到'First' (这是一个匹配)但是对于多个值你得到'First, Second, Third' (即,一个大的值与任何东西不匹配)而不是'First', 'Second', 'Third' (即三个单独值的列表)就是您所追求的。

您有两种选择:

  • 使用多值参数,这自然会做你的意思。 如果用户可以从列表中选择值,这是最佳选项
  • 通过用引号替换逗号来手动创建列表,如下所示:

    =替换(参数!myCSVParam.Value,“,”,“','”)

您可以尝试以下查询:

WHERE TheField in(SELECT regexp_substr(@myCSVParamt,'[^,] +',1,level)A FROM DUAL CONNECT BY regexp_substr(@myCSVParam,'[^,] +',1,level)不为null)

希望它有所帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM