html5 动态图表FineReport优化报表取数

1. 取数原理

设计器拼出最终的SQL,将SQL语句传给数据库,数据库执行,将数据返回给设计器。

由于计算过程首先要通过SQL语句从数据库中取数据,我们可以通过控制数据量的大小和对数据的提前预处理来提高报表的性能。下面是一些优化的方法。

2. 优化SQL

FineReport报表的数据集采用的是表模型,也就是说通过SQL这种DSL语言,从数据库通过简单查询或各种组合关联查询得到一个关系表,而这部分SQL查询根据各种数据库产商长时间的优化(比如建立索引),已经非常成熟。数据集一般要通过FineReport报表模型的复杂处理才能生成最终的表样。因此,从数据库SQL查询取出数据量越少,FineReport报表模型需要做的复杂处理和计算就越少,所花的时间和内存就少,从而可以提高性能。

2.1 SQL语句取具体的字段

我们一般会用select * from 这样的形式将一个数据库表中所有的字段都取出来,而其中一些字段是报表中不需要用到的,例如报表中只需要用到三个字段,但是数据库中实际的表有十个字段,一些初学者习惯性的用select * from table1,这样相当于把十个字段的数据都取到报表服务器端,增加了报表服务器端的内存占用以及减慢了运算速度,所以SQL语句中尽量不要用“*”号,而是写上具体的字段,能够减少报表服务器端的内存占用,加快报表的运算速度。

2.2 SQL中直接分组代替报表中分组

一些汇总类型的报表,例如制作一张订单总额的表,可能会从订单明细表中取出大量的数据记录,然后进行数据汇总,即进行分组聚集运算,报表计算过程中我们可以在SQL中提前进行一次分组聚集,能够大大减少取到的报表服务器的记录数,加快取数和报表运算的速度。

SQL语句:SELECT 成本价,类别ID FROM 产品

从数据库中选择如上两个字段,然后根据类别ID进行成本价的汇总,此时数据库返回给报表处理的数据就有77条。如下:

优化的SQL语句:SELECT sum(成本价),类别ID FROM 产品 group by 类别ID

经过SQL优化后,报表需要处理的数据就只剩8条了。如下:

优化分析:

第一种做法,不仅仅取到报表服务器上记录数多了,取数速度慢,而且报表模型需要对表数据列进行分组运算,增加了报表运行时间;

第二种做法,数据库虽然要进行分组运算,但是数据库中有索引,运算速度快,且取到报表服务器端的记录数大大减少,取数速度大大加快,因此在报表模型进行分组运算的时候只要对很少的记录数进行,报表的运算速度大大加快了。

实验结果以及分析表明,第二种做法的性能远优于第一种。所以,分组应该尽量在sql里进行。

2.3 SQL中直接排序代替报表中排序

报表计算过程中很多时候需要对数据进行排序,虽然排序运算可以在报表端进行,不过我们还是建议在SQL中提前将数据排序,这是因为数据库中索引功能,通常是C/C++语言(往往在效率上比Java好)写的,会使得排序运算的速度很快。

2.4 SQL中直接过滤代替报表中过滤

报表计算过程中很多时候并不需要对表中的所有记录进行操作,而只是需要对部分满足条件的记录进行操作,虽然可以在报表设计器中对数据过滤,不过我们建议在SQL中对数据提前过滤,这样数据库返回的数据就减少了,既加快了取数速度,也加快了报表的运算速度。

3. 使用视图、存储过程

视图是由SELECT语句组成的查询定义的虚拟表,由一张或多张数据库实际的表中的数据组成的,从数据库系统外部来看,视图就如同一张表一样。

存储过程通过流控制与SQL语句,可以对数据进行强大的运算与处理,对于业务比较复杂的应用,常常需要将原始数据通过存储过程处理后再供报表使用。另外存储过程运行前,数据库会对其进行语法和句法的分析,并进行优化,这种已经编译好的存储过程极大地改善SQL语句的性能。在报表端也只需要书写较短的调用语句来获得结果,从而降低网络的通信量。

所以表与表的连接、复杂的SQL尽量在数据库中使用视图或者存储过程直接进行,这样将复杂的SQL语句直接保存于数据库服务器端(数据库本身会对SQL语句进行语法分析并进行优化),在报表设计器端就不需要写大段的SQL语句而是直接调用视图或存储过程了,一方面减少网络传输量,减轻数据库的压力,另一方面加快了报表的运算速度。

转载于:https://blog.51cto.com/9774383/1650480

html5 动态图表FineReport优化报表取数相关推荐

  1. 金蝶EAS BOS合并报表取数公式(二次开发取数公式)在调整分录模板和抵消分录模板显示

    合并报表取数公式(二次开发取数公式)在不同的情形下想显示 标准产品自定义汇率取数公式是在这里不显示的 通过对标准产品的类进行扩展或者新增一个代码逻辑完全一样的类 //需要扩展的类 com.kingde ...

  2. 帆软报表列表_动态图表 - FineReport报表官网

    阅读提示: 文章中与FineReport软件使用的相关内容,基于软件的V7.0旧版本编写,不代表软件最新的使用方式. FineReport最新版免费试用:https://www.finereport. ...

  3. Excel表从多期报表取数中INDIRECT公式的万金油作用

    在日常工作中,常需要将逐月报表以工作表Sheet形式积攒到一个Excel工作簿Book中去,这些月报表的特点是结构大体相同,至少字段排序是基本相同的.(如下图示例) 需求是不定期对非指定的月报表进行取 ...

  4. BI取数者的职业发展之路?

    点击上方蓝字关注公众号! 请您点击"与数据同行"以"关注",关于数据的实践与思考,每周一我在这里等你! 作者:傅一平  博士  浙江大学毕业 目前就职于浙江移动 ...

  5. 对于数据给定范围sql取数_SQL Server中的报表–根据给定日期范围内提取的数据创建图表

    对于数据给定范围sql取数 介绍 ( Introduction ) I recently heard from a lady from overseas who wanted to find a qu ...

  6. 动态图表揭秘:“动”的关键——取数

    这一节内容介绍动态交互图表制作的核心内容,就是取数.没看过前两节的朋友可移步<这样用Excel动态交互图表,还要什么前端?>.<动态图表交互揭秘:制作选择器的奥秘>.首先要理解 ...

  7. 【DP优化】【P1430】序列取数

    传送门 Description 给定一个长为n的整数序列,由A和B轮流取数(A先取).每个人可从序列的左端或右端取若干个数(至少一个),但不能两端都取.所有数都被取走后,两人分别统计所取数的和作为各自 ...

  8. [性能] SAP销售订单取数逻辑优化---索引表

    我也分享了许多篇性能优化的帖子,主要集中在sql.语法及合理的索引方面.我们在表上加索引确实能大幅提升性能,但是索引的数量.所需字段及利用率都是我们在新建索引时需要考虑的,对于大多数abaper而言, ...

  9. 关于NC6.X企业报表取不了数的问题及其解决方法。

    关于NC6.X的企业报表取不了数,通常会遇到的问题如下几个: 1.点击"计算"之后数字为空 遇到这种问题需要先进行排查.最一开始的就是检查公式是否错误,这里说的错误并不是指公式的语 ...

  10. c++ 快排优化(三数取中法)

    快排优化(三数取中法) 文章目录 快排优化(三数取中法) 前言 一.三数取中法 二.递归思想 三.程序实现过程(代码) 1.取基准数(三数取中) 2.快速排序(递归) 总结 前言 作为刚刚入门c和c+ ...

最新文章

  1. Oracle Study之--Oracle等待事件(3)
  2. android开发技术博客
  3. 关于数据存储的那些事1
  4. word中图片超出页边距_如何在Word中更改页边距
  5. python中一个对象只能被一个变量引用吗_Python中for循环里的变量无法被引用的解决方法...
  6. php 回收png,关于php:从其他Png中减去Png,保留透明度,ImageMagick
  7. Three.js Scene Graph
  8. [bzoj5158][Tjoi2014]Alice and Bob
  9. 百度Hi Csrf蠕虫攻击
  10. WPF - 属性系统 (4 of 4)
  11. 路由器去广告 去除 免刷路由系统 手机网页去广告 安卓去广告 苹果iOS去广告
  12. 什么是钉钉项目施工和工程管理系统?
  13. python表格控件_python--excel操作插件openpyxl
  14. 池化层MaxPool函数详解及反向传播的公式推导
  15. 利用SQL查询扶贫对象医保报销比率的审计方法
  16. Problem 1 : Multiples of 3 and 5
  17. 【SuperMap】SuperMap.Geometry转GeoJSON
  18. 什么是长连接和短连接,他们的定义区别及应用场景?
  19. html5响应式布案例,HTML5响应式布局案例
  20. 笔记本英雄联盟界面服务器停止运行,关于LOL选完大区(主界面)后马上闪退的正确解决方法...

热门文章

  1. eclipse修改编码方式
  2. Bernoulli-Gaussian分布
  3. SVM入门(四)线性分类器的求解——问题的描述Part1
  4. 【ML小结12】隐马尔科夫模型HMM
  5. 【POJ 2689】Prime Distance【埃氏筛与线性筛】
  6. 【ccpc网络赛】Tree and Permutation【1009】【树上+组合数学】
  7. Java 并发编程常识 —— by 梁飞
  8. python基本使用时常见错误
  9. window下的git工具msysgit的使用
  10. Linux部署Web项目小记