SSRS报表如何提高性能?

0
当一张报表的数据量很大时,会有很长的响应时间,请教下 SSRS里面有什么办法可以解决此问题吗?
已邀请:
3

brucelu - 大数据、数据仓库、数据挖掘均有涉猎 2013-07-10 回答

我理解的报表数据量很大分两个情况:
一、报表所取数据的表数据量很大,
(1)可以通过做进Cube,这样子报表取数速度会有很大的提高
(2)在设计数据表的时候,合理冗余减少关联表,利用sql查询的报表速度也会较快。
(3)对数据量较大的表进行分区存储数据。
二、报表需要展示的数据量很大
(1)设定参数限定打开报表展示的维度尽量较少,比如 大区-部门-组,可以限定到某个组。
(2)减少报表的数据集、控件、优化报表的计算步骤和SQL查询语句(尽量少关联表)。
(3)可以采取降维的方式来展现数据,比如:钻取、明细报表等方式。
以上是我了解的一些方法了。
2

梁勇 - 天道酬勤、上善若水。爱好商业智能 2013-07-10 回答

在SSRS里面有个缓存刷新计划可以解决此问题。
具体步骤如下:
1、报表管理器里面新建缓存刷新计划
2、先修改数据源 点击数据源,选择管理,修改数据源的连接方式,如果cube没有用户名和密码,默认就是访问windows的用户名密码
3、 修改完以后,点击报表,点击管理,如图1,新建缓存刷新计划,可以定时每天刷新
4、 新建缓存刷新计划有个弊端就是如果cube更新,缓存计划没
1

superboyli520 - 微软BI技术达人 2013-07-23 回答

1、可以设置缓存,但缓存数据只为默认值报表数据,参数变化后,缓存不会启作用。

2、在数据源层进行过滤,不要把条件写在展现层,会提高报表加载速度。
1

BIWORK - 热衷于微软BI技术,技术架构和解决方案! 2015-10-28 回答

优化报表速度可以从这几个方面入手:
1. 减少数据集查询返回到报表的数量,比如返回 10W条和返回 1000 条到报表端的效果是不一样的。从源端查询的数据保存在 Dataset 数据集中,数据集中的数据实际上是保存在报表服务器中的 ReportServer / ReportServerTemp 其中一个数据库。返回的量越少,IO开销越少,速度越快。

2. 返回到数据集中的数据越大,报表的加载速度就越慢,特别是你放入了大量的KPI计算表达式计算在报表端,这个过程也非常的耗费时间。

所以通常的做法是:
1. 能在 SQL 查询完成的计算就在 SQL 查询端完成,即使这个过程比较长但是总比在报表前端通过页面表达式计算要效率更高一些。

2. 尽量控制和减少数据集的大小,返回量的大小,这样报表前端渲染的就更快一些。

3. 把 ReportServerTemp 数据库调整大一些,包括自动增长,因为大量的基于 Dataset 在报表端的汇总会在这个数据库中做聚合计算。

4. 包括 Group by 这种报表聚合表中不要通过表达式实现,而是直接取数据集中的字段列,宁愿这种计算列现在查询阶段做好。

5. 如果这种查询聚合仍然很慢,建议把这个数据集固化,即创建表先把所有计算好的数据、聚合的数据写到表中,然后这张表直接作为数据集的源,这样减少中间的计算环节。本身数据仓库的处理通常就是每天晚上执行的,完全可以把这部分的处理放到 JOB 中,先把数据计算好,报表直接引用而不是查询再聚合再计算。

6. 认真看看 ReportServer 数据库中的 ExecutionLogN (N 找最大的那个数字),里面有3个时间段分表表示查询、渲染、加载的时间,以及返回的数据量大小和条数。

通过我上面说的几个阶段的优化,你就能明显看到这几个时间段包括数据量条数的大小变化,报表的速度会明显提高。
 
参考这个帖子 http://www.flybi.net/question/12417

要回复问题请先登录注册