我从一位开发人员那里继承了一份报告,他将 5 个报告合并为一个 SSRS 报告。看起来他只是将原始报告中的每个 tablix 复制并粘贴到另一个下方。这样做是为了当用户导出到 Excel 时,他们可以将每个报告放在单独的选项卡上。我以前从未做过这样的多重 SSRS 报告,所以我现在正在分析整个事情是如何运作的。我发现的一个主要问题是它运行速度非常慢,大约 10 分钟,似乎是因为它必须运行所有 5 个查询。每个存储过程都作为一个数据集单独列出。有谁知道在一个页面上创建多个 SSRS 报告的更好方法,或者至少如何让这件事变得更快?
1 回答
提高 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 年。
试一试,如果遇到困难,请在此处回复更具体的问题。