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

时间:2012-11-14 21:49:39

标签: reporting-services parameters sql-server-2008-r2 bids subreport

目前有三个子报告,一个主要报告。

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

当我只选择1个员工和1个日期时,所有子报表都能正常工作,但如果我选择多个值,它会爆炸。

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

它显然将正确的信息发送到子报表,因为它可以正常工作,但我希望它能够处理更多传递的值。喜欢检查和取消选中员工和月末日期的当前能力,就像当前使用查询中的IN功能设置一样。

3 个答案:

答案 0 :(得分:4)

使子报表上的参数为非多值,删除任何“可用值”集。 使用join方法

将来自父报表的多值参数作为字符串传递
=Join(Parameters!Emp_ID,",")

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

我不确定它如何与文本查询一起使用,但它适用于存储过程。

如果子报告也用作独立报告,则需要添加新参数以允许用户从用户可以设置的参数向@Emp_Id发送参数值

答案 1 :(得分:0)

我猜您没有将子报告中的参数设置为Multi Select。如果您已将子报表中的参数设置为多选,那么您只需将参数从主报表发送到子报表即可。请点击here

了解更多信息

答案 2 :(得分:0)

我使用了以下解决方案,该解决方案在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优化(有时优化器会做一些有趣的事情...)。