date: 2019/1/24 11:17:16
前言
之前在做报表时没有注意那么多细节,上次给甲方公司做他们总公司汇总,明细报表,这种报表动辄几十万上百万的数据量,明细表还好使用控件进行分批查询的策略可以解决问题,但是汇总,统计的报表没办法进行分批或者限制查询量进行处理,因为那样处理必定导致统计结果和表达运算不够准确。因此找到了帆软官方中对于报表性能优化的多个文章,进行仔细查看和对SQL优化处理,最后达到还算满意的查询速度。
文章内容来源自帆软官方多篇文章:如需阅读官方教程,可自行忽略本文内容,地址如下
http://help.finereport.com/category-view-230.html
一 报表执行过程
帆软报表的执行过程大致分为两步: 1、报表计算 2、页面转换
**报表计算过程:**先读取我们的sql语句,将完整的sql语句传至数据库服务器,由数据库返回数据给报表服务器,报表服务器进行数据列的扩展、汇总、关联、公式运算等计算,最终生成报表结果。
**页面转换过程:**报表计算完成后生成xml页面,需要转换为html页面才能在浏览器中查看。
帆软通过log日志进行监控这一执行过程
二 优化报表取数
1、描述
报表的核心是数据,数据集是否合理决定了报表的质量
1、每一张表都应该有一个主数据集,为了降低维护工作量,尽量将所有字段置于主数据集下。
2、在制作报表之前,尽量考虑到所有需要展示的数据字段,在数据库软件中,合理编写sql语句,大数据情况尽量对sql做优化,以及添加索引
2、取数原理
设计器拼出最终的SQL,将SQL语句传给数据库,数据库执行,将数据返回给设计器。
由于计算过程首先要通过SQL语句从数据库中取数据,我们可以通过控制数据量的大小和对数据的提前预处理来提高报表的性能。
3、优化SQL
1、SQL中取用具体的字段
2、SQL中直接分组代替报表中分组
3、SQL中直接排序代替报表中排序
4、SQL中直接过滤代替报表中过滤
报表计算过程中很多时候并不需要对表中的所有记录进行操作,而只是需要对部分满足条件的记录进行操作,虽然可以在报表设计器中对数据过滤,不过我们建议在SQL中对数据提前过滤,这样数据库返回的数据就减少了,既加快了取数速度,也加快了报表的运算速度
4、使用视图、存出过程
视图是由