我制作了一个 SSRS 报告,其中有一个文本字段参数,用户将在其中输入逗号分隔的字符串值列表。该列表将被输入到报表数据集中的 SQL 查询中,其中包含: ...WHERE TheField in (@myCSVParam)。
如果我从字段中传递单个值,它会起作用,但如果我从字段中传递 csv 列表,则报告会说该值不存在。
我认为它将 csv 列表视为单个值,因此没有数据返回。
如何转换该 csv 列表并转换为 sql IN 过滤器的可用参数?
最佳答案
我今天正在寻找一种方法来做到这一点,并且有很多建议需要构建一个存储过程来处理这个问题,但我发现这个解决方案有点困惑。我终于想出了自己的、非常简单的解决方案。
因此,假设您希望用户能够在单个文本框中输入多个销售订单,并以逗号分隔,例如:61JF073, 61SW073, 61SW074
我的第一个报告参数名为“OrderNo”,描述“Order Nos(以逗号分隔)”。数据类型=“文本”,并且不检查任何内容。
我的第二个参数将从第一个参数中获取列表,并创建一个“多个值”列表,您将能够在 SQL 查询中使用该列表。
第二个参数:名称=“OrderNos”,类型=“Text”。选中“允许多个值”。参数可见性=“内部”(用户不需要看到这个)。
可用值 = 无
默认值 = 指定值
添加一个值:
=Split(Replace(Parameters!OrderNo.Value,"",""),",")
我正在使用“替换”功能来删除所有空格,因为用户可能会在逗号后输入空格,这会影响输出。
现在您的 SQL 查询可以包含“IN”子句来过滤结果。
选择订单号、销售 ID、销售名称
来自销售订单
WHERE OrderNo IN (@OrderNos)
数据将在 SQL Server 中进行过滤,而不是在 SSRS 报告中进行过滤,这是在应用过滤器之前保存 SSRS 报告以检索整个表的首选方法。您只想检索报告所需的数据。
我希望这会有所帮助,因为它对我来说是一个救星,因为我的销售订单表有数千行。
关于sql - 使用 SSRS 报告将 csv 列表传入 SQL 数据集的参数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17244656/