报表开发FineReport优化报表取数

报表开发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语句而是直接调用视图或存储过程了,一方面减少网络传输量,减轻数据库的压力,另一方面加快了报表的运算速度。

时间: 2024-08-25 10:38:30

报表开发FineReport优化报表取数的相关文章

web报表开发FineReport教程之父子格设置

下面通过web报表开发FineReport来简单介绍一下. 工具/原料 web报表开发 大小:148.2M 适用平台:windows/linux 1. 描述 在上一节中介绍了单元格的扩展,单元格的扩展是针对具体的某一个单元格,当报表主体中绑定了多个单元格时,单元格与单元格之间是否存在联系,其扩展方向是否会相互影响呢? 如下图,在单元格中拖曳两个2个字段,在web端预览的时候,可以看到后面的单元格根据前面的单元格数据进行分组显示: 表明当报表主体中绑定了多个单元格的时候,单元格间会天然存在某种关系

润乾集算报表利用并行计算提高JDBC取数性能示例

实际应用中数据量较大的报表在展现或导出时往往需要一次性将数据从数据库中取出来,而JDBC的取数速度过慢使得整个进程效率极低.如何优化取数速度成为了提升报表性能的关键.在润乾集算报表中可以通过并行计算提高JDBC的取数性能.本文以oracle为例说明实现过程. 报表描述 用户状态表展现的是明细数据,由于需要导出,需要一次性读取数据表中所有数据.单表数据量为360万,报表样式为: 实现步骤 编写脚本 首先使用集算器编写脚本(parallel.dfx),实现并行取数逻辑: A1:连接oracle数据源

润乾集算报表提升性能之并行取数

有时报表在展现或导出时需要从数据库中取出较多数据,而JDBC的取数速度一向比较慢,有可能超过报表其它运算环节的耗时,导致整个报表的生成过程效率极低.下面我们看如何利用润乾集算报表的并行计算机制提高JDBC的取数性能. 所谓并行取数是指,使用多线程技术在报表工具与数据库建立多个连接,同时读取一份源数据,这需要将源数据分段,每个线程(数据库连接)读取其中一段内容,最后将所有线程的结果合并得到总目标数据的过程. 集算报表内置了并行机制可以很容易完成并行取数任务,从而提升报表性能,这里以oracle为例

如何利用报表工具FineReport实现报表列的动态展示

相信动态列的实现困扰了很多人,大数据量,多字段的加载将会非常耗时,数据又做不到真正的动态灵活.现有的方式都是通过变向的隐藏等方式来实现. 那该如何解决呢?这里分享帆软报表设计器FineReport的实现方案,结合实际工作中遇到的的相关内容. 我本地常用数据库是MYSQL,所以比较了解一点,所以实现方式也是基于mysql的.首先了解一下MySQL自带的information_schema数据库使用. 大家在安装或使用MYSQL时,会发现除了自己安装的数据库以外,还有一个 information_s

报表应用结构优化之数据分库存储

报表项目中,可能会出现报表源数据来自于不同数据库的情况. 这是由于同一张报表可能会从多个业务系统取数据.比如:员工信息从人力资源系统中取出,销售数据从销售系统中取出.另一种可能是,同一应用系统的数据库负载太大,不得已分成多个数据库的情况.比如:销售系统数据分成当前库和历史库. 报表工具须要连接的可能是相同类型的数据库.比方都是oracle或者db2:也可能是不同类型的数据库. 报表应用中,数据分库存储的解决的方法有:1.建设专门的数据仓库.2.利用跨库訪问的技术. 专门数据仓库的建设和管理比較复

WIN8 Metro UI 风格下的微软报表开发与设计 - BIWORK

导语 - 作为 BI 系统前端展现的报表,其重要性不言而喻,我们对于一个好的报表的要求也无非主要包含以下几点: 1. 数据完整和正确,数据质量没有问题 2. 友好的清晰的界面,整洁美观,有得体的格式 3. 有很好的交互性和用户体验感,用户能够很容易找到需要的重要的数据 但是在微软体系下的 BI 开发人员,特别是 SSRS 报表开发人员对于报表的设计我想都有一个共同的感受:"报表设计出来了,很难看!交互性差!". 也就是说,在上面提到的 3 点中,微软 SSRS 报表的非常直观的缺陷就是

报表性能优化方案之报表取数

1. 取数原理 设计器拼出最终的SQL,将SQL语句传给数据库,数据库执行,将数据返回给设计器. 由于计算过程首先要通过SQL语句从数据库中取数据,我们可以通过控制数据量的大小和对数据的提前预处理来提高报表的性能.下面是一些优化的方法. 2. 优化SQL FineReport报表的数据集采用的是表模型,也就是说通过SQL这种DSL语言,从数据库通过简单查询或各种组合关联查询得到一个关系表,而这部分SQL查询根据各种数据库产商长时间的优化(比如建立索引),已经非常成熟.数据集一般要通过FineRe

如何基于报表工具FineReport进行二次开发

随着FineReport的发展,它提供的设计器和服务器应该能够满足绝大部分的需求,完全实现零编码的软件开发.革命性地加快软件的开发以及提高软件的稳定性.但是需求千变万化,而FineReport本身所具备的功能是报表中比较典型的,一些比较有个性的功能无法实现,那么就需要应用开发人间使用网页脚本.API接口等进行深入的开发,而这一点,FineReport报表工具是支持的,那么如何来实现插件开发呢? Ant打包 Ant是一个构建工具,它可以帮助我们将项目开发过程中需要完成的各种步骤组织起来,通过一个简

报表开发工具对比系列之smartbi电子表格 vs 帆软finereport

报表是所有软件项目中的基础功能,市场上有不少报表工具,例如国外产品水晶报表.JasperReport.BIRT.jFreeReport等.不过由于国内市场的特殊性,报表格式通常比较复杂,老外的产品不太适应,现在开发者已逐渐转向国产的报表工具,例如Smartbi电子表格.润乾报表.帆软Finereport.久其报表等. 在国产的报表软件中,FineReport是老牌子,Smartbi电子表格是广州思迈特公司推出的新一代报表软件,这个“新一代”新在何处?有什么新的特色? Demo初体验两个产品都提供