使用SSRS报告的参数值的方式的传递是一个CSV列表SQL数据集(Using SSRS report

2019-10-18 07:10发布

我做了其中有一个文本字段参数,用户将进入字符串值的逗号分隔列表中的SSRS报告。 该清单将被送入该报告的数据集的SQL查询具有:... WHERE TheField在(@myCSVParam)。

如果我在一个单一的值传递来自外地,它的工作原理,但如果我从外地通过一个CSV文件列表,则该报告说,这些值不存在。

我认为这是治疗的csv列表作为一个值,因此没有数据回来。

如何转换是CSV列表,并转换为可用的参数有关过滤器一个SQL?

Answer 1:

我正在寻找一种方式来做到这一点的今天,有很多这需要建立一个存储过程来处理这个建议,但我发现这个解决方案是一个有点乱。 我终于想出了我自己的,很简单的解决方案。

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

我的第一个报表参数名为“OrderNo”,说明“订单号(用逗号分隔)”。 数据类型=“文本”,并没有被选中。

我的第二个参数是要采取从第一个参数列表,让您可以在您的SQL查询使用“多值”列表中。

第二个参数:NAME = “OrderNos”,类型= “文本”。 “允许多个值”被选中。 参数知名度=“内部”(用户并不需要看到这一点)。 可用值=无默认值=指定值添加值: =Split(Replace(Parameters!OrderNo.Value," ",""),",")

我使用的是“替换”功能删除所有的空格,因为用户可以将影响输出的逗号后面输入空格。

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

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

这些数据将在SQL服务器,而不是在SSRS报告,该报告是从应用滤波器之前检索整个表保存SSRS报告优选的方法进行过滤。 你只需要检索报告所需的数据。

我希望这可以帮助,因为它是一个救星我为我的销售订单表有成千上万行的。



Answer 2:

而不是2个参数,我用像=分割( 参数!Category.Value,“”)

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

我终于把它改为=拆分(更换(参数!Category.Value,””,‘’),‘’),像您这样的:)你的,如果你宁愿有1个参数,并有参数等于表达式,或有2个参数,并通过1至另一个。

我不能发表图片,但我的是这里http://i.stack.imgur.com/rhnWt.png



Answer 3:

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

你有两个选择:

  • 使用多值参数,这自然做了你什么。 这是最好的选择,如果用户可以从列表中选择值
  • 通过引用逗号替换逗号,像这样手动创建列表:

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



Answer 4:

您可以尝试为以下查询:

WHERE TheField在(SELECT REGEXP_SUBSTR(@myCSVParamt, '[^,] +',1,电平)的FROM DUAL CONNECT BY REGEXP_SUBSTR(@myCSVParam, '[^,] +',1,电平)不为空)

希望它能帮助!



文章来源: Using SSRS report to pass in a param value the is a csv list to SQL Dataset