在SSRS中使用行组表达式导致预览运行速度非常慢

时间:2017-01-26 18:57:32

标签: reporting-services ssrs-tablix ssrs-2016

我有一个包含5个行组的报告。每个都使用表达式作为要分组的值。用户最多选择5个不同参数的值,并根据这些参数分组报告的方式。

使用某些参数组合,报表可能需要2分钟才能在Visual Studio的预览窗格中运行。当我将报告部署到SSRS服务器时,相同的参数组合在10秒或更短的时间内运行。出于好奇,我创建了报告的副本,并从每个行组中删除了表达式,并指定了要分组的字段。在这种情况下,它的预览速度与在服务器上查看时一样快。

任何人都知道这里会发生什么?

我目前正在使用Visual Studio Enterprise Update 3。

2 个答案:

答案 0 :(得分:0)

首先,有点显而易见的是,如果您在开发机器中运行报表,它将无法获得与服务器相同的计算能力。即使您从服务器运行VS,它也不会像部署的报告那样快速运行。

原因 - 您可能会注意到 - 性能缓慢是分组表达式。您的报告似乎需要很长时间才能处理,因此请查看Technet帖子中的这篇文章。我复制并粘贴了以下段落:

  

Tablix数据区域中的许多级别的嵌套和相邻组都可以   影响报告处理性能。考虑两者的水平   分组,组实例的数量和聚合的使用   需要在分组,过滤和排序后进行评估的函数   表达式被应用。

我建议您尝试在SQL级别的数据源中执行分组,也可以将参数传递给查询以在那里设置所需的分组。

如果这有帮助,请告诉我。

答案 1 :(得分:0)

我意识到这是一个较老的问题,但也许这对你有所帮助。

我遇到了与您描述的相似的症状,归结为在分组语句中使用动态字段。显然,任何其他语句都可以使用动态字段而不会出现问题,但分组会产生巨大的性能损失。

link概述了症状和原因。

我不知道它是否在该特定链接中,但是我读到了一些关于ReportViewer控件何时呈现为HTML的错误信息,只有当控件在.Net 4.0下运行时才会发生错误或更高。在.Net 3.5中,性能几乎与您在Report Viewer应用程序中运行RDL时的性能相同。

如果能够这样做,让报表查看器组件工作的最快方法是让应用程序池IIS用于在.Net 2.0下运行(如果存在该选项,则为3.5,因为它们是&#39 ;基本上是一样的。)

如果您的应用程序使用.Net 4.0或更高版本来实现其他功能,我还没有多少能够找到,除了重写报告以从分组中删除动态引用,但这显着降低了报告的交互性(表格行/列中没有展开/折叠选项)。

作为参考,我有一个报告,其中查询花了大约2分钟执行,然后如果我在SSRS中加载RDL则几乎立即呈现。使用.Net 2.0中的ReportViewer控件呈现的同一报表大约需要2分30秒才能完全呈现。使用完全相同的代码,但更改应用程序池以使用.Net 4.0,报告已经"呈现"现在大约15分钟,但仍然没有回来。