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

时间:2013-06-21 21:34:34

标签: sql csv reporting-services param

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

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

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

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

4 个答案:

答案 0 :(得分:2)

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

因此,假设您希望用户能够在单个文本框中输入多个销售订单,以逗号分隔,例如: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报告是在应用过滤器之前保存SSRS报告以检索整个表的首选方法。您只想检索报告所需的数据。

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

答案 1 :(得分:1)

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

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

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

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

答案 2 :(得分:0)

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

您有两种选择:

  • 使用多值参数,这自然可以完成您的工作。如果用户可以从列表中选择值,这是最佳选择
  • 通过用引号替换逗号来手动创建列表,如下所示:

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

答案 3 :(得分:0)

您可以尝试以下查询:

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

希望有所帮助!