1

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

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

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

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

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

4

3 回答 3

4

使您的子报表上的参数为非多值,删除任何“可用值”集。使用 join 方法将父报表中的多值参数作为字符串传递

=Join(Parameters!Emp_ID,",")

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

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

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

于 2012-11-15T08:46:36.603 回答
0

我猜您没有将子报告中的参数设置为多选。如果您已将子报表中的参数设置为多选,那么您可以直接将参数从主报表发送到子报表。在这里查看更多

于 2013-12-11T15:29:31.660 回答
0

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

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

Join(Parameters!EmpID, ",")

  1. 在您的子报表中,接受参数作为文本。
  2. 在子报表的 SQL 中,使用string_splitSQL 2016 的函数返回值表,然后将其连接到主查询。所以基本上如果你的参数被命名为“EmpID_Multi”

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

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

于 2020-04-23T09:00:10.903 回答