基于参数隐藏SSRS中的子报告(并且不执行存储过程)

时间:2012-04-13 11:21:28

标签: stored-procedures reporting-services hide subreport

我有一个问题,我希望隐藏/显示基于传递给主报告的参数的子报告。

我可以使用隐藏/显示子报表的表达式来设置隐藏属性,但是我使用SQL Profiler发现的是,即使子报表被隐藏,子报表存储过程仍然会被执行

除了更改存储过程本身之外,是否有人知道避免这种情况的方法。 如果没有,是否有人知道存储过程被执行的原因,即使隐藏了子报告?

3 个答案:

答案 0 :(得分:7)

SSRS中的隐藏报表元素仍在处理中 - 隐藏属性只是确定它们是否显示在输出中。

确保仅有条件地执行过程的一种方法是将数据集中存储过程的名称更改为表达式 - 如:

=iif(Parameters!RunMyDataset.Value="Y","sp_MyDataSet","sp_Dummy")

- 其中sp_Dummy是执行最少处理的存储过程(例如SELECT NULL)。

答案 1 :(得分:1)

有一种方法可以解决这个问题。根据您对问题的描述。例如,您有4个子报表,并将它们命名为page1到page4。并且主报告将参数“Investor_ID”值传递给所有这4页。在主报表中,您需要创建4个布尔参数并设置子报表的隐藏属性,以控制这4个子报表是否可见。

例如,使用表达式=iif(Parameters!Page1.Value = true, false, true,这样当您为参数page1选择true时,将显示page1,否则将隐藏它。

然后,您需要在子报表的“子报表属性”中配置参数。

对于子报告所需的参数Investor_ID,在值中选择表达并使用=IIF(Parameters!Page1.Value = true, Fields!Investor_ID.Value, nothing)。这意味着如果您选择隐藏page1,那么mainreport将不会传递给子报告page1。然后Page1将不会运行并显示“错误:子报表无法显示”,因为Investor_ID参数为null。但是我们隐藏了那个子报告。所以page1不会出现。

通过这种方式,您可以控制隐藏的子报表是否执行。

答案 2 :(得分:0)

  1. 右键单击主报表中的子报表对象,然后选择“格式化子报表...”。这将打开格式编辑器。

  2. 在格式编辑器中选择“子报告”选项卡。

  3. 勾选“抑制空白子报表”复选框。