我会尽量通过过度简化报告结构来尽可能地解释这个问题。报告一包含1个名为ResourceCenter的组,然后包含一行总计。总计实际上是一个组,但分组是在SQL中完成的,并在详细信息组中显示。报告看起来像这样:
Report 1
ResourceCenter 1
Total1 11
Total2 4
Total3 8
ResourceCenter2
Total1 12
Total2 11
Total3 6
从这份报告中,我需要深入研究另一个包含多个多值参数的报告。对于钻取,我可以为除EmployeeNumber之外的所有内容使用单个值。为此,我需要能够将EmployeeNumbers列表传递给报表2中的多值参数。当前,任何DataSet或参数中的EmployeeNumbers都不存在,但它们基于ResourceCenter。因此,如果用户运行了报告1并单击了ResourceCenter 1,我需要能够以报告2正确处理它的方式将与ResourceCenter 1关联的EmployeeNumbers列表传递给报告2中的多值参数。
注意:我应该补充一点,我创建了两个接受ResourceCenter输入的SQL函数,然后返回一个员工列表。一个是表值函数,它返回一列EmployeeNumbers。另一个是标量值函数,它将EmployeeNumbers作为逗号分隔值返回。然后我有一些自定义代码在后台运行SQL函数并返回列表。我没有取得任何成功返回SSRS可以使用的数据集,但我已经能够使标量值函数“工作”,因为我可以在虚拟报表上创建一个字段并查看输出。不过,我没有幸运获得报告2来接受以逗号分隔的列表。
答案 0 :(得分:7)
This person正在进行演练,似乎已经解决了多值参数的类似问题。在这种情况下,必须为IN子句格式化。
=SPLIT(JOIN(Parameters!SomeParameterName.Value,","),",")
如果Report2不采用这种格式,您可能需要添加一个单独的单值参数,该参数将接受以逗号分隔的字符串,然后您必须解析该字符串。
答案 1 :(得分:0)
我正在使用SSRS 2016,并且我的数据集基于存储过程,但是将多值参数传递给向下钻取似乎不再是问题。默认情况下,当您选择一个多值参数时,它会为您提供类似Parameters!ParName(0).Value之类的内容,该参数只会传递第一个值。但是,如果删除(0)并将其保留为Parameters!ParName.Value,则似乎可以很好地传递所有值。