我做了其中有一个文本字段参数,用户将进入字符串值的逗号分隔列表中的SSRS报告。 该清单将被送入该报告的数据集的SQL查询具有:... WHERE TheField在(@myCSVParam)。
如果我在一个单一的值传递来自外地,它的工作原理,但如果我从外地通过一个CSV文件列表,则该报告说,这些值不存在。
我认为这是治疗的csv列表作为一个值,因此没有数据回来。
如何转换是CSV列表,并转换为可用的参数有关过滤器一个SQL?
我做了其中有一个文本字段参数,用户将进入字符串值的逗号分隔列表中的SSRS报告。 该清单将被送入该报告的数据集的SQL查询具有:... WHERE TheField在(@myCSVParam)。
如果我在一个单一的值传递来自外地,它的工作原理,但如果我从外地通过一个CSV文件列表,则该报告说,这些值不存在。
我认为这是治疗的csv列表作为一个值,因此没有数据回来。
如何转换是CSV列表,并转换为可用的参数有关过滤器一个SQL?
我正在寻找一种方式来做到这一点的今天,有很多这需要建立一个存储过程来处理这个建议,但我发现这个解决方案是一个有点乱。 我终于想出了我自己的,很简单的解决方案。
因此,可以说你希望用户能够在一个单一的文本框中输入多个销售订单,以逗号分隔,例如: 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报告优选的方法进行过滤。 你只需要检索报告所需的数据。
我希望这可以帮助,因为它是一个救星我为我的销售订单表有成千上万行的。
而不是2个参数,我用像=分割( 参数!Category.Value,“”)
并设置在SQL [在(@Category)]设置为表达式中使用的参数。 唯一的缺点是它埋在数据集参数选项卡。
我终于把它改为=拆分(更换(参数!Category.Value,””,‘’),‘’),像您这样的:)你的,如果你宁愿有1个参数,并有参数等于表达式,或有2个参数,并通过1至另一个。
我不能发表图片,但我的是这里http://i.stack.imgur.com/rhnWt.png
这听起来像@myCSVParam
是单值字符串参数。 因此,SSRS将在SQL语句中使用时,它把周围的引号。 因此,对于一个值你得到'First'
(这是一个比赛),但多个值你得到'First, Second, Third'
(即一个较大的值不匹配任何东西),而不是'First', 'Second', 'Third'
(即三个独立的值的列表),这是你所追求的。
你有两个选择:
通过引用逗号替换逗号,像这样手动创建列表:
=替换(参数!myCSVParam.Value, “”, “ ''”)
您可以尝试为以下查询:
WHERE TheField在(SELECT REGEXP_SUBSTR(@myCSVParamt, '[^,] +',1,电平)的FROM DUAL CONNECT BY REGEXP_SUBSTR(@myCSVParam, '[^,] +',1,电平)不为空)
希望它能帮助!