![](/img/trans.png)
[英]I'm trying to filter a SQL dataset by today's date in SSRS using Report Builder
[英]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.