我可以使用将隐藏/显示子报告的表达式设置隐藏属性,但我使用 SQL Profiler 发现,即使子报告被隐藏,子报告存储过程仍会执行。
除了更改存储过程本身之外,是否有人知道避免这种情况的方法。如果没有,即使隐藏子报告,是否有人知道执行存储过程的原因?
这与此问题相同,但没有答案,所以我再次询问任何帮助都会很棒
我可以使用将隐藏/显示子报告的表达式设置隐藏属性,但我使用 SQL Profiler 发现,即使子报告被隐藏,子报告存储过程仍会执行。
除了更改存储过程本身之外,是否有人知道避免这种情况的方法。如果没有,即使隐藏子报告,是否有人知道执行存储过程的原因?
这与此问题相同,但没有答案,所以我再次询问任何帮助都会很棒
我有一个大型复杂报告(最多 10k 控制行),其中 7 个子报告中有 1:n 行。除非您可以抑制子报表中的 SQL 执行(因为大多数子报表大部分时间都是隐藏的),否则这会像狗一样运行。
经过一番痛苦,我发现抑制子报表渲染和数据集执行真的很容易。您所需要的只是子报表中的必需报表参数。通常有一个 ID 字段传递给子报表,所以这应该没有问题。
在主报告中,参数通过类似于以下的表达式传递:
=Iif(Fields!SubReportXisHidden.Value,Nothing,Fields!ID.Value)
子报表将提示缺少参数,不会呈现并且不会执行 SQL。
深深的喜悦!
只需在 SQL Management Studio 中执行该逻辑即可。SSRS 并不是一个真正的事件驱动系统,您可以在代码块中和使用 Visual Basic 做一些小事情,但不多。它并不意味着在复杂的 if then else 场景上编写执行计划级别的编码,以便在运行时执行计划。事实上,如果您尝试进行高级循环和索引,它会变得很疯狂,因为这对于服务器来说不仅仅是这个附加功能。它旨在展示您提供给它的数据以及一些非常基本的元素条件。如果您真的想进行查询及其成本,或者不只是向 SQL Management Studio 中创建的 proc 添加一点翻转,例如:
create procedure dbo.ToCreateOrNotToCreate
(
@input varchar(32)
, @Run bit
)
as
BEGIN
if @Run = 1
Select 'You selected to run "' + @input + '" at a cost!'
else
Select 'Don''t run and save performance'
END
exec dbo.ToCreateOrNotToCreate @input = 'My Input', @Run = 1
exec dbo.ToCreateOrNotToCreate @input = 'My Input', @Run = 0