优化报表系统结构之报表服务器计算

在报表项目中,常常会碰到数据库压力很大影响整个系统性能的问题。由下面的传统方案的结构示意图可以看出,全部数据存储和源数据计算都放在数据库完成。当并发访问量较大的时候,虽然每个报表的数据量不大,还是会造成数据库压力过大,成为性能的瓶颈。多数数据库厂商提供的jdbc接口传输数据比较缓慢,在并发量较大的情况,对报表系统性能的影响也非常明显。

这种情况时可以考虑采用润乾集算报表提供的本地计算方案。

所谓本地计算,是将一部分计算任务从数据库中移出到报表服务器中完成。大多数有一定规模的应用系统中,数据库和应用服务器通常会部署在不同的物理机器上。其中,数据库处于中心地位,要为各个应用系统提供服务。如果运算大部分由数据库完成,则会导致数据库压力过大,而数据库的扩容成本和难度都相当高。而应用服务器则不同,不同应用会有不同的应用服务器硬件,且容易集群扩容。如果能将一部分运算移出数据库,转而由与应用服务器一起部署的报表服务器完成,则会很大程度地减小数据库压力,并且充分利用应用服务器所在机器的计算能力,提升系统性能。集算报表方案结构示意图如下:

从上图可以看出,润乾集算报表可以将部分数据从数据库转移到报表应用服务器的本地硬盘。这部分数据可以是计算的中间结果,也可以是部分基础数据。集算报表内置了集算引擎,可以通过简洁的脚本进行本地化的数据计算。因此,从数据存储和计算两方面都可以降低数据库压力。

部分数据和计算从数据库转移到报表应用服务器上,可以充分利用应用服务器集群的存储和计算能力。应用服务器无论是单机升级(纵向扩展)或者增加集群数量(横向扩展)都要比数据库服务器的成本低很多。在本地硬盘上读取数据的速度要比数据库jdbc快很多,可以解决这个瓶颈问题。集算引擎还可以进行多线程的并行计算,可以充分发挥应用服务器多cpu、多核的计算能力。因此,润乾集算报表方案是低成本提高报表应用系统性能的优选方案。

下面,通过“某公司客户累计销售额与去年全年销售额对比报表”的制作,来看一下集算报表是如何实现本地化计算的。报表如下图:

这张报表中的客户、订单数、销售额都是直接从数据库中计算的2010年1月-10月的数据。2009年全年的订单数、销售额是从报表应用服务器文件系统中的temp2009sales.b文件中读取。“销售额/去年销售额”则是今年和去年的数据共同计算的。报表上部的查询按钮是集算报表提供的“参数模板”功能,具体做法参见教程,这里不再赘述。

首先,要提前用集算器从数据库中读取2009年等各个年份的销售数据,计算好之后,以集算器的二进制编码导出到temp2009sales.b文件中,每年一个文件。中间数据制作好之后,数据库中2009年的数据就可以移除备份了,不再占用数据库的空间。

第二,编写集算器脚本salesProportion.dfx如下:

注意,脚本的参数是:argyear(要查询的年份),argmonth(要查询的月份)。

A1:连接预先配置好的数据源demo。

A2:从数据库中计算取出要查询的年份订单数、销售额。

A3:从前一年的数据文件中取出数据。

A4:将A3中的数据按照A2中的CLIENT字段对齐,A2中有A3中没有的补空行。

A5:利用A2来生成新的续表。其中增加了A4的对应行数据,比如A4(#).C:lastCOUNT就是A4的对应行(#是A2的当前行号)中取出C字段。

A6:关闭数据库连接。

A7:向报表返回结果集。

第三,在集算报表中定义报表参数(argyear、argmonth)和计算数据集:

上图中,参数名是指dfx定义的参数名称,参数值是指报表提交给集算引擎的值。这里是将报表的两个参数的值传递给集算器的同名参数。

第四,设计报表,如下图:

输入参数计算后,即可得到前面希望的报表。

时间: 2024-11-08 21:20:37

优化报表系统结构之报表服务器计算的相关文章

优化报表系统结构之报表server计算

在报表项目中,经常会碰到数据库压力非常大影响整个系统性能的问题.由以下的传统方案的结构示意图能够看出.所有数据存储和源数据计算都放在数据库完毕.当并发訪问量较大的时候,尽管每一个报表的数据量不大,还是会造成数据库压力过大.成为性能的瓶颈.多数数据库厂商提供的jdbc接口数据传输比較缓慢.在并发量较大的情况,对报表系统性能的影响也非常明显. 这样的情况时能够考虑採用润乾集算报表提供的本地计算方案. 所谓本地计算,是将一部分计算任务从数据库中移出到报表server中完毕. 大多数有一定规模的应用系统

报表系统结构优化之中间数据外置

绝大多数报表项目的数据库中,除了支撑系统运行的业务数据表之外,还有很多中间表.业务数据表是报表系统必须的基础数据表,是支持报表系统运行的持久化数据层,例如:销售报表系统中的订单.客户.产品等等.报表中间表则是计算和生成报表的中间计算过程,中间表的名字经常是五花八门. 按道理说,业务数据表应该是大部分,报表中间表只是小部分.但是,实际情况却恰恰相反.有些运行了较长时间的报表系统中,报表中间表达到几千个或者更多,而业务数据表只有一两百. 关系型数据库的综合成本是和数据表的数量.数据量相关的.数据库中

润乾集算报表优化应用结构之报表复杂数据源的管理

在报表项目中,常常有些复杂数据计算是为一个报表专用的,其它报表用不到.可以用SQL实现写进报表数据源中,但由于SQL无法分步计算,经常会写出非常复杂难懂的长语句,不利于调试和维护.如果用Java或者存储过程来实现,计算程序会和报表模板又会分开,不利于管理.使用润乾集算报表的脚本数据集来实现报表专用计算,既可以写出简单易懂的分步骤计算脚本,又可以将脚本存放在报表模板中利于管理.系统结构的对比如下图: 下面通过一个具体的报表例子来看一下集算报表脚本数据集的用法.<年度客户销售分析报表>可以选择年份

润乾集算报表优化应用结构之报表数据源复用

在报表项目中,经常有多个报表的数据源计算方法有共同的部分.使用润乾集算报表,采用可挂接算法的方案时(可参考[润乾集算报表优化应用结构之可挂接算法]),可以更方便地将这些共同部分用同一个脚本来完成,从而实现算法复用.算法复用的好处是:一个算法只实现一次,不会出现同一个算法多处实现导致不一致的情况.同时也避免一个算法实现很多次的重复劳动,减轻工作量. 下面通过两个报表复用同一个算法的例子来看一下具体的实现方法.报表1是"员工绩效工资明细表",可以按照STATE来选择不同的员工例如:STAT

集算器实现报表中零散的不规则计算

报表中存在的不规则计算往往给报表开发带来很大的困难,使用报表工具往往很难甚至无法直接实现.这里的不规则计算是指报表中存在特殊条件的统计项(计算),如:销售订单金额统计中计算前5名销售金额的合计和占比:学生成绩统计中总成绩排名前10的学生中语数外都超过90分的人数:用户充值统计中充值金额超过充值总额一半的用户数量等. 通过集算器可以很方便完成这类报表的开发,我们通过两个例子来了解一下具体的做法. 1.实例一 1.1 .报表描述 根据员工与订单表统计各销售人员的销售情况,并在报表中计算列出订单总额.

润乾报表整合到Tomcat服务器的部署过程

转载自:http://www.cnblogs.com/avivaye/archive/2012/11/16/2773681.html 使用第三方的报表设计器/服务器来快速的开发报表. 润乾服务器是使用Java语言编写的一个灵活易用的报表服务器和设计器.因此,用它来做Java的报表设计是很快捷的,但是经常报错,而且不好查错. 下面来介绍一下润乾报表4.0在J2EE下的部署[非集成部署] ① 下载一个新的Tomcat ② 新建一个Web应用,基本目录结构如下: |-report |---------

用润乾集算报表提升性能之关联计算

报表开发过程中经常要在报表中完成数据关联计算,有的为了降低报表制作复杂度将关联关系放到可视的报表模板中完成:有的则必须在报表中完成关联,如多数据源.异构数据源的情况.而在报表中做关联往往导致报表效率不高,计算过慢,引发性能问题.润乾集算报表提供了特殊的数据关联方式,可以提升报表性能.这里通过一个常见的多源关联分片报表实例来看一下集算报表的实现过程:     报表说明 根据销售情况等信息表按照时间.地区.销售人员.产品等维度汇总销售额,报表样式如下: 以下为实现过程.     编写计算脚本 首先使

报表也可以根据单元格计算后结果进行排序

熟悉报表的人都知道,报表中实现数据排序通常有三种方法: 1. 在 sql 语句中增加 order by,如 order by id asc 2. select 函数取数时,指定排序字段,如 ds1.select(name:-1),或者按照其他字段排序,如 ds1.select(EMPID, ,,;NAME:1) 按照 NAME 字段升序排序 3. 还可以按照某字段汇总后的结果进行排序,如:ds1.group(省份; 省份:1; ds1.sum( 工业产值):-1),对数据集 ds1 按照省份进行

报表工具与报表性能的关系

在选择报表工具时,性能指标一向是用户非常关心的,但是,报表工具的性能和整个报表系统的性能会有多大关系呢? 要回答这个问题,首先要分析一下报表的处理过程包含哪些环节,其中有哪些环节容易出现性能问题,如何优化这些环节. 一.报表处理的一般过程分析 1.用户选择报表输入参数后,报表引擎会根据报表模板和输入参数来解析报表,并将数据计算和读取请求以SQL的方式发送给数据库. 2.数据层负责读取.计算和返回数据.数据层一般都是传统关系数据库:如Oracle.DB2等. 3.数据层通过JDBC等接口将结果数据