问题描述
我想在 tablix 中动态显示/隐藏子报表。理想情况下,隐藏子报表中的内容不会执行以节省资源。有人知道这是如何工作的吗?
谢谢
解决方法
据我所知,查询仍将运行。您可以在运行报告并捕获执行的查询时通过运行 SQL Server Profiler 进行双重检查。
在 SQL 2008 中,查询肯定会运行。我们遇到过这样的情况,我们只希望根据传递给报告的参数显示子报告,因此我们所做的是将参数传递给子报告并使用这些参数来确定是否应该运行查询。
如果查询不需要运行,我们将返回一个空数据集,但是,由于 SSRS 坚持始终返回相同的结构,查询最终看起来像这样......
DECLARE @results TABLE(EmplID int,EmpName varchar(50))
IF @hidden = 0 -- sub report needs to show
BEGIN
INSERT INTO @results
SELECT EmpID,EmpName FROM myTable
END
SELECT * FROM @results
因此,虽然查询运行,但如果不需要数据,所有发生的事情就是创建一个表变量,它是如此之快,您不会注意到。