将多值参数传递给子报表

时间:2012-12-05 14:38:38

标签: sql reporting-services parameters subreport multivalue

在报告之间使用multivalue参数时,我遇到了问题。

我有一个主要报告,其中我定义了一个多值参数,我用它来运行SQL查询来填充其数据集。该参数在WHERE子句中以下列方式使用:

WHERE values IN (@parameter)

它工作正常,它可以检索预期的数据。

然后,此主报告将此参数传递给子报表。该参数在子报表中也被定义为多值,并且我可以在参数的下拉列表中看到它以正确的方式接收值。像这样:A,B,C

问题是填充子报表的数据集的查询什么都不返回。 它还有一个在主报告中定义的WHERE子句(已经在工作中)

WHERE values IN (@parameter)

如果我手动运行查询,请将值硬编码为以下内容:

WHERE values IN ('A', 'B', 'C')

它可以工作,但是当我尝试使用参数时它没有。所以,不知怎的,它正在失去格式或价值观。

我在子报表的数据集定义中尝试了这个解决方案,这是在另一个线程中提出的:

 =join(Parameters!<your param name>.Value,",")

但它对我不起作用,数据集仍然是空的。

关于我缺少什么的任何想法?

谢谢! :)

3 个答案:

答案 0 :(得分:12)

这应该“正常工作”。确保子报表中的参数设置为多值,并且我通常使用与父报表中完全相同的查询来提供“可用值”。

检查是否将整个参数传递给子报表:在父报表的子报表属性中,参数的值应为[@MyParamName]而不是<<Expr>>。如果它作为后者读取,则编辑表达式并确保它最后没有(0)。但是=Parameters!MyParamName.Value是正确的,不是 =Parameters!MyParamName.Value(0)

答案 1 :(得分:3)

刚刚从头开始创建报告并且它有效。我一定忘记了中间的事情。

无论如何,只要有人需要它,必须将两个参数(主报告中的参数和子报告中的参数)定义为多值。 然后在您的查询中,您应该在IN段中使用WHERE,如下所示:

WHERE field IN (@parameter)

不需要其他任何东西。我不需要做以下事情:

=join(Parameters!<your param name>.Value,",")

它对我有用

答案 2 :(得分:2)

我想我知道你做了什么,因为我在这里遇到了同样的问题。 子报表设置正常,但在父报表中输入参数绑定时,Value下拉列表确实提供了我的参数,因此我使用表达式构建器来选择它。这会在值中留下灰色的<< Expr >>标记,并且只有在我从列表中选择了一个值时才会起作用。当我用[@MyParam]替换它时,无论选择多少值,它都能正常工作。当我看到值表达式构建器创建得更近一点时它有=Parameters!MyParam.Value(0)。删除(0)也会修复它。