显示/隐藏子报表使渲染速度太慢

Show/Hide sub-reports make a rendering is so slow

提问人:Fame th 提问时间:3/1/2022 最后编辑:Fame th 更新时间:3/2/2022 访问量:199

问:

我做这样的报告

enter image description here

此报告与 Tablix 复合。每行显示不同的图表和布局。 所以每一行都是子报告(我称之为subreport_all)。内部subreport_all包括所有图案。( 30 个模式 , 30 个子报告)enter image description here

主报告将发送参数,例如模式编号。并使用此参数仅选择一个以显示和隐藏其他参数。 通过这个表达。

=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。它使多个负载。enter image description here

我是这样设计的enter image description here

但是渲染报告非常慢,只有 3 分钟,占用的 RAM 内存超过 2GB。 用户不能接受这种性能。如何解决。动态选择子报表有什么想法。

编辑:对不起,艾伦·斯科菲尔德(Alan Schofield),我解释不清楚Two Column。 模式包括 3 种布局

  1. 图案 1 (w , h)
  2. 模式 2 (w/2,h)
  3. 图案 3 (w/2, h/2)

enter image description here

两列是模式 2 或 3。它们的宽度是模式 1 的一半。 因此,Tablix 只能使用一列。在这种情况下,将数据集准备为两列是不兼容的。

报告服务 动态 RDLC 生成

评论


答:

0赞 Alan Schofield 3/1/2022 #1

据我所知,您不能将子报表名称动态设置为表达式。

但是,如果所有图表/表都处于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

这并不理想,但如果应该提高性能。

评论

0赞 Fame th 3/2/2022
对不起,我给出了一些信息不清楚。每个模式的宽度都不相同,但我需要将其作为 tablix 的同一列。