将ssrs参数中的多个值发送到子报表

问题描述 投票:1回答:3

当前有三个子报表,一个主报表。

主报告具有两个参数-SELECTDATEEMP_ID。主报表将Order_Nbr发送到所有子报表。

当我仅选择1个Employee和1个日期时,所有子报表都可以正常工作,但是如果我选择多个值,它会爆炸。

SQL将列作为INT。我在主报表和子报表中都具​​有参数,SELECTDATE设置为具有多个值的文本,EMP_ID设置为具有多个值的整数。我的查询包含日期IN(@SELECTDATE)和emp_id IN(@EMP_ID)。

显然,它可以将正确的信息发送到子报表,因为它可以工作,但是我希望它与更多的值一起使用。喜欢当前检查和取消检查雇员以及月底日期的功能,就像当前使用查询中的IN函数设置它一样。

reporting-services parameters sql-server-2008-r2 bids subreport
3个回答
4
投票

将子报表上的参数设置为非多值,删除所有“可用值”设置。使用连接方法将父报告中的多值参数作为字符串传递给您]

=Join(Parameters!Emp_ID,",")

EMP_ID参数将设置为逗号分隔的列表,这是多值参数发送给查询的内容

我不确定这在文本查询中如何工作,但是在存储过程中工作。

如果子报告还用作独立报告,则需要添加一个新参数,以允许用户将参数值从用户可以设置的参数发送到@Emp_Id。>

我想您尚未在子报表中将参数设置为“多选”。如果您已将子报表中的参数设置为多选,则可以直接将其从主报表发送到子报表。在here中查看更多信息>

我使用了以下解决方案,该解决方案在SSRS2016中有效。这也适用于文本参数。

  1. 像上面建议的,通过加入值将参数作为字符串传递给子报表。

Join(Parameters!EmpID, ",")

  1. 在您的子报表中,接受参数作为文本。
  2. 在子报表的SQL中,使用SQL 2016的string_split函数返回值表并将其简单地连接到主查询中。因此,基本上,如果您的参数名为“ EmpID_Multi”,请执行

... JOIN (SELECT value FROM string_split ( @EmpID_Multi, ",")) mv ON mv.value= ...

注意:您可能会考虑将值放入临时表中以进行SQL优化(有时优化器会做一些有趣的事情……)。


0
投票

我想您尚未在子报表中将参数设置为“多选”。如果您已将子报表中的参数设置为多选,则可以直接将其从主报表发送到子报表。在here中查看更多信息>


0
投票

我使用了以下解决方案,该解决方案在SSRS2016中有效。这也适用于文本参数。

  1. 像上面建议的,通过加入值将参数作为字符串传递给子报表。
© www.soinside.com 2019 - 2024. All rights reserved.