我有一个问题,我希望根据传递给主报告的参数隐藏/显示子报告。
我可以使用将隐藏/显示子报告的表达式设置隐藏属性,但是我使用 SQL Profiler 发现的是,即使子报告被隐藏,子报告存储过程仍然会被执行。
除了更改存储过程本身之外,是否有人知道避免这种情况的方法。如果没有,即使隐藏子报告,是否有人知道执行存储过程的原因?
我有一个问题,我希望根据传递给主报告的参数隐藏/显示子报告。
我可以使用将隐藏/显示子报告的表达式设置隐藏属性,但是我使用 SQL Profiler 发现的是,即使子报告被隐藏,子报告存储过程仍然会被执行。
除了更改存储过程本身之外,是否有人知道避免这种情况的方法。如果没有,即使隐藏子报告,是否有人知道执行存储过程的原因?
SSRS 中的隐藏报表元素仍在处理中 - hidden 属性仅确定它们是否显示在输出中。
确保过程仅有条件地执行的一种方法是将数据集中存储过程的名称更改为表达式 - 例如:
=iif(Parameters!RunMyDataset.Value="Y","sp_MyDataSet","sp_Dummy")
- 其中 sp_Dummy 是执行最少处理的存储过程(例如SELECT NULL
)。
有一种方法可以解决这个问题。根据您对问题的描述。例如,您有 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 参数为空。但是我们隐藏了那个子报告。所以 page1 不会出现。
通过这种方式,您可以控制隐藏的子报表是否执行。
右键单击主报表中的子报表对象,然后选择“格式化子报表...”。这将打开格式编辑器。
在格式编辑器中选择“子报表”选项卡。
勾选“禁止空白子报表”复选框。