报表性能优化方案之报表计算时间

1. 问题描述

完成报表取数后,设计器会对数据库返回的数据进行扩展、分组、列表、汇总等运算,好的模板制作习惯往往可以优化报表的计算时间。

以下示例报表开发工具:FineReport。

2. 解决方案

2.1 空白单元格应用

报表中,只要一个单元格里有设置就会占用一份内存,而空白的单元格几乎是不占任何内存的。报表中由于布局的需要,不可避免地会出现一些只起到占位作用而无需其他的设置的单元格;尽量将这些单元格设成空白单元格,这样能够有效的减少内存的占用,加快报表的运算速度。

2.2 慎用隐藏行列

报表中为了进行一些复杂的运算,往往需用到隐藏行列来处理中间的运算,而这些隐藏行列中被用到的单元格,往往只有一两个格子,此时被隐藏行列中没被用到的单元格里有设置的话会额外浪费内存,因此建议把没用的单元格设为空白单元格,减少内存的占用,加快报表的运算速度。

2.3 慎用合并单元格

报表中,常常会用到合并单元格,合并单元格的所有属性都是保存在左上角的格子中的,而合并区域中的其他被合并的单元格,并不保存任何属性也不占用内存。

虽然合并单元格的应用能够减少内存,不过因合并单元格的运算涉及到多个单元间的主被动关系,所以运算比较复杂,反而会降低运算速度。因此,我们建议慎用合并单元格,尽量将没用的单元格设成空白单元格。

2.4 相同效果的条件属性

同一行(列)中的单元格需要设置相同效果的条件属性时,只需在该行(列)中的某个单元格设置一下条件属性便可,这样能够加快报表的运算速度。如下图,需要隐藏某行时只需要在一个单元格中设置条件属性即可,不要每个单元格都设置。

2.5 相同效果的数据列基本属性设置

报表制作过程中,我们将数据集中的字段拖入单元格时,数据列>基本>数据设置,(分组、列表、汇总)中计算最快的是列表。如制作明细表时有两种设置方法,结果是一样的。 设置方式一:地区列数据设置为列表,后面其他跟随其扩展的数据列的数据设置还是采用默认的设置(即分组普通)。

设置方式二:地区列数据设置为列表,后面其他跟随其扩展的数据列的数据设置也修改为列表。

上面两种设计方式的数据展示结果是一样的,不过报表的计算速度却不一样;第二种方式的报表计算速度明显会比第一种快。

这是因为数据列设为分组时,报表会将取出的数据进行一次分组聚集的计算,而不管数据有没有重复。因此,对于可实现相同效果的应优先设置其数据列属性为列表。

2.6 父格设置

FR中设计报表的最重要的思想,就是数据列的扩展,而跟随哪一个单元格扩展是必须要注意的问题。所以父格的设置是很重要的,父格设置不恰当会影响报表的计算速度,甚至导致结果错误。另外,父子格层次树高度,对报表性能也有影响,所以尽量减少父子格层次树高度。如对下图模板:

注:将所有单元格的数据显示方式设置为列表显示。

设置方式一:销量父格为产品名称,产品名称父格为产品类型,产品类型父格为销售员、销售员父格为地区,父子格层次树为4层。

设置方式二:销量、产品名称、产品类型、销售员的父格都为地区,父子格层次为1层。

上面两种设计方式的数据展示结果是一样的,不过报表的计算速度却不一样;第二种方式的报表计算速度明显会比第一种快。

2.7 取消自动调整行高或列宽

若已设置自动调整列宽的话,那么在报表展示前会先去计算单元格中数据的宽度或高度,这样就增加了报表的运算时间,所以尽量取消自动调整行高或列宽。

2.8 优化过滤条件

查看模板中是否重复设置了过滤条件,删除多余的过滤条件,即若数据列来自相同的数据集,只需在最左父格设置过滤条件并勾选将父格子作为过滤条件(默认是勾选的)即可。

时间: 2024-08-13 20:18:25

报表性能优化方案之报表计算时间的相关文章

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

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

报表性能优化方案之报表服务器优化基础讲解

一.内存 JVM堆栈内存是决定应用服务器性能的关键指标,一般服务器默认的内存配置都比较小,在较大型的应用项目中,这点内存是不够的,因此需要进行查看与修改Web服务器内存大小,接下来就介绍服务器内存查看的方法以及不同服务器内存的修改方式. 各应用服务器的内存配置方法不尽相同,如下列出了常用服务器的JVM参数(-Xms,-Xmx)配置方法. JVM参数定义: - Xms: 初始化内存大小 - Xmx: 可以使用的最大内存 以下示例工具:报表开发工具FineReport 二.服务器内存的查看 如果您想

报表性能优化方案之报表缓存路径

1. 问题描述 若启用了磁盘缓存,默认的会在C:\Documents and Settings\Administrator\.FineReport80(windows下)下创建cache即缓存文件夹,一般呢,C盘的空间会很小,如保存在C盘会增加对C盘的压力,那么有没有方法让其保存到别的盘符下呢? 解决方案提供工具:报表开发工具FineReport. 2. 解决方案 通过修改%FR_HOME%\WebReport\WEB-INF\resources\目录下的cache.xml文件(报表管理平台中设

报表性能优化方案之行引擎执行层式报表

1. 问题描述 这样一种报表:报表形式非常简单,只是简单的单数据源明细报表,但是数据量非常大,百万.千万甚至更多.报表取数及计算时间相当长. 希望能够提高报表展示速度,对于用户来说,查询报表不会有滞后的感觉. 解决方案提供工具:报表开发工具FineReport. 2. 解决方案 2.1 解决方案 对于单数据源明细报表,可以启用行引擎来执行报表,提高报表展示速度,优化用户体验. 2.2 原理 普通报表:取出全部数据后再执行报表,最后返回整体的报表结果给浏览器,用户访问到看到结果的时间=报表取数时间

报表性能优化方案之巧用相邻连续分组

1. 问题描述 在数据显示方式章节内容中,我们已介绍分组的两个不同使用场景:普通分组和相邻连续分组.但其使用相邻连续分组功能,更主要原因是能够提高其报表的性能. 示例报表开发工具:FineReport 2. 原理 相邻连续分组的操作,是将数据集中连在一起的相同数据才进行合并的.尤其是,在配合SQL中已排好序的列,对其实现的分组时,使用此分组方式其性能比普通分组快些.如下简单示例,查看其报表执行数据信息,可看出其分组方式比普通分组方式更能提高其报表的性能. 3. 实现步骤 3.1 新建报表 3.2

报表性能优化方案之善用参数注入

1. 问题描述 对于多数据集关联报表,当数据很大时报表的展现速度就会很慢,或通过写sql语句又很复杂.为此FineReport提供一种,既可加快报表的展现速度,又不用编写复杂的sql语句的方案.即使用动态参数注入功能. 2. 原理 动态参数注入,是通过注入的值对数据库中的数据进行操作的,只是取对应的数据,所以会提高报表的性能. 3. 示例 新建模板 展现多个关联数据表的数据 SQL语句,ds1:SELECT * FROM [订单] SQL语句,ds2:SELECT * FROM 订单明细 报表样

报表性能优化方案之数据集缓存与共享

1. 问题描述 对于大数据量报表,若每次直接从数据库中查询数据,不仅增加数据库服务器的压力,也极大的影响了取数的速度从而降低了报表的执行速度,为此FineReport提供了数据集缓存与共享功能. FineReport可先将其数据集查询的结果缓存下来,对于缓存下来的数据,再次使用到相同数据集时,无需再次连接数据库重新查询数据,直接使用缓存下来的结果,即使用FineReport的数据集共享机制,达到资源复用,减少取数时间从而提高了报表的展现速度. 2. 数据集缓存 缓存分为缓存至内存和缓存至磁盘.

报表性能优化方案之多数据集实现层式报表

1. 问题描述若报表使用的数据量是上百万条的话,觉得报表展现的速度慢,可以使用层式报表来提高报表展现速度.但由层式报表章节可以得知,层式报表必须是单数据集,若是多数据集的模板且数据量又很大,想要提高报表的查询速度要如何实现呢? 2. 实现思路在定义数据集时通过使用数据库本身的行序号或者使用数据库函数生成行序号(即行号)并且在where条件中通过页码参数使得行号在一定范围内显示,点击自定义的上一页下一页按钮时重新传入页码参数取出相应的数据. 注:SQL Server2000无法生成行号,因此需要定

报表性能优化方案之多种报表服务器内存修改方法

服务器内存修改 各应用服务器的内存配置方法不尽相同,如下列出了常用服务器的JVM参数(-Xms,-Xmx)配置方法. JVM参数定义: - Xms: 初始化内存大小 - Xmx: 可以使用的最大内存 示例工具 以下示例工具:报表开发工具FineReport Tomcat服务器内存修改 1. 问题描述 java应用程序运行过程中会使用web应用服务器的内存,如执行报表获取的数据,运算的中间数据等都需要暂存在服务器内存中. 当没有空内存可用时,就会出现内存溢出错误:java.lang.OutOfMe