将多个SSRS报告添加到一个报告中的速度非常慢

时间:2017-03-14 01:50:09

标签: ssrs-2012 subreports

我继承了开发者的报告,他将5份报告合并为一份SSRS报告。看起来他只是将原始报告中的每个Tablix复制并粘贴到另一个下面。这样做是为了当用户导出到Excel时,他们可以在单独的选项卡上显示每个报表。我之前从未做过这样的多重SSRS报告,因此我现在正在分析这一切是如何运作的。我发现的一个主要问题是它运行速度极慢,大约10分钟,似乎是因为它必须运行所有5个查询。每个存储过程都作为数据集单独列出。有没有人知道在一个页面上创建多个SSRS报告的更好方法,或者至少如何使这个更快?

1 个答案:

答案 0 :(得分:0)

提高SSRS报告性能的第一步是确定瓶颈是什么。对ReportServer数据库中名为ExecutionLog4的视图运行查询。对于每个最近执行的报告,该视图将为您提供包含3个关键字段的记录:TimeDataRetrieval,TimeProcessing和TimeRendering。

TimeDataRetrieval指示所有查询运行和返回数据集所需的时间(以毫秒为单位)。如果此数字很高,那么您需要调整查询或删除其中的一些以提高性能。您可以运行探查器跟踪以确定哪些过程运行缓慢。

请记住,子报表每次在报表中呈现时都会触发数据集查询。因此,即使是子报表数据集中的次要性能打嗝也会被执行次数放大。

TimeProcessing指示报表服务器花费多长时间处理检索到的数据。如果此数字很高,您可能需要考虑执行在报表中多次运行的聚合计算以在SQL端运行。

TimeRendering指示服务器实际呈现报告所需的时间。如果此数字很高,请考虑避免或简化在一次又一次重复的视觉属性上使用的表达式。根据我的经验,这种情况不像其他两种情况那么常见。

此外,我还提到了一些有助于避免性能问题的提示:

- 如果您希望返回大量行,则避免使用行可见性表达式。 - 隐藏对象不会阻止数据集执行。如果您的数据集具有相似的结构,请考虑将它们组合使用并使用对象过滤器来限制不同部分中显示的内容。如果您只打算根据数据或参数显示多个选项之一,请在存储过程中使用IF语句。 - 尝试限制大Tablix中的列分组数。对于Tablix中的每个分组,您可以将可以返回的数据行数乘以这些分组。

有关SSRS表现的更多信息,请访问: https://technet.microsoft.com/en-us/library/bb522806(v=sql.105).aspx 这是为2008R2编写的,但似乎也适用于2012年。

尽一切努力,如果你遇到问题,请在这里回复一个更具体的问题。