提问人:Fame th 提问时间:3/1/2022 最后编辑:Fame th 更新时间:3/2/2022 访问量:199
显示/隐藏子报表使渲染速度太慢
Show/Hide sub-reports make a rendering is so slow
问:
我做这样的报告
此报告与 Tablix 复合。每行显示不同的图表和布局。 所以每一行都是子报告(我称之为subreport_all)。内部subreport_all包括所有图案。( 30 个模式 , 30 个子报告)
主报告将发送参数,例如模式编号。并使用此参数仅选择一个以显示和隐藏其他参数。 通过这个表达。
=iif(Parameters!pPatternNo.Value="A",false,true)
例如。 如果subreport_all包括子报告A、B、C、D,...等。 如果行是模式 A,则仅显示 A 并隐藏 B、C、D,...等。
在子报告A,B,C之前,此案例的表现很好,...其中必须显示两列。
所以我必须在subreport_all里面创造subreport_all。它使多个负载。
但是渲染报告非常慢,只有 3 分钟,占用的 RAM 内存超过 2GB。 用户不能接受这种性能。如何解决。动态选择子报表有什么想法。
编辑:对不起,艾伦·斯科菲尔德(Alan Schofield),我解释不清楚Two Column。 模式包括 3 种布局
- 图案 1 (w , h)
- 模式 2 (w/2,h)
- 图案 3 (w/2, h/2)
两列是模式 2 或 3。它们的宽度是模式 1 的一半。 因此,Tablix 只能使用一列。在这种情况下,将数据集准备为两列是不兼容的。
答:
据我所知,您不能将子报表名称动态设置为表达式。
但是,如果所有图表/表都处于subreport_all状态,则即使子报表不可见,SSRS 也会执行每个数据集。
您可以为每个数据集查询设置一个参数,该参数的设置方式与决定可见性的方式相同,以便它快速返回不需要的数据集的空数据集。
例如,如果您有一个类似于的数据集。
SELECT ColumnA, Column B
FROM myTable
WHERE ColumnC = @someParameter
然后你可以把它重写成类似的东西
SELECT ColumnA, Column B
FROM myTable
WHERE ColumnC = @someParameter AND @pPatternNo = "A"
甚至
IF @pPatternNo != "A"
BEGIN
SELECT CAST(NULL AS int) AS ColumnA, CAST(NULL AS INT) AS ColumnB
END
ELSE
BEGIN
SELECT ColumnA, Column B
FROM myTable
WHERE ColumnC = @someParameter
END
需要换出部件以匹配现有数据类型,这是为了确保 SSRS 始终从数据集中获取相同的结构。AS INT
这并不理想,但如果应该提高性能。
评论