在SSRS中隐藏子报告(而不是执行存储过程)

时间:2013-08-14 11:13:51

标签: reporting-services ssrs-2008 ssrs-tablix ssrs-grouping

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

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

这个问题与This one相同,但没有答案,所以我再次要求任何帮助都会很棒

2 个答案:

答案 0 :(得分:6)

我有一个大型的复杂报告(最多10k控制行),其中7个子报告中有1:n行。除非您可以在子报表中禁止SQL执行,因此它会像狗一样运行(因为大多数时候大多数子报表都是隐藏的)。

经过多次痛苦之后,我发现抑制子报表渲染和数据集执行非常容易。您所需要的只是子报表中的必需报表参数。通常会有一个ID字段传递给子报表,所以这应该没问题。

在主报告中,参数通过类似于:

的表达式传递

= IIF(字段!SubReportXisHidden.Value,没什么,字段!ID.Value)

子报表将对缺少的参数进行barf,不会渲染,也不会执行SQL。

深深的喜悦!

答案 1 :(得分:0)

在SQL Management Studio中执行该逻辑。 SSRS实际上不是一个事件驱动的系统,你可以在代码块和Visual Basic中做一些小事,但不是很多。如果在运行时执行计划中执行其他方案,则无意对复杂的程序执行计划级编码进行编程。事实上,如果你尝试进行高级循环和索引,它就会生气,因为这对于服务器来说比这个更多。它旨在呈现您提供给它的数据以及一些非常基本的元素条件。如果你真的想要查询它或者它的成本是否只是添加一点翻转到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
相关问题