CN101071413A - 交叉报表中自动分组的办法 - Google Patents
交叉报表中自动分组的办法 Download PDFInfo
- Publication number
- CN101071413A CN101071413A CN 200710024408 CN200710024408A CN101071413A CN 101071413 A CN101071413 A CN 101071413A CN 200710024408 CN200710024408 CN 200710024408 CN 200710024408 A CN200710024408 A CN 200710024408A CN 101071413 A CN101071413 A CN 101071413A
- Authority
- CN
- China
- Prior art keywords
- grouping
- height
- width
- statistics
- data
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
交叉报表中自动分组的办法,以第三方开源项目作为开发基础的,以java语言进行报表系统开发,采用了由内到外,逐次计算的方法:即用一个数组列表结构,行、列的数组列表是分开的,按照行列的分组,每次都从外层到内层将组添加进来,重新计算各个行列的宽度、高度,并调用已有函数设置四周的边框,这样当所有的行列都加进来时,分组的确定信息已经统计完了,这就达到了自动分组的目的。
Description
技术领域
本发明属于流程系统方面的软件技术,利用关系数据库或内存中的数据获得各种符合要求的报表格式文件的方法。
背景技术
报表系统是重要的工具。很多系统需要报表系统支持其工作。
目前市场上主流的Web报表工具,典型代表有如下四种:水晶报表(Crystal Reports)、Style Report、数巨报表(Max@X Reports)、润乾报表。
水晶报表是最早进入中国市场的,在早期微软的开发工具VB中集成了该产品,故而是目前知名度最高的报表产品,无论是在国际还是国内市场,均有大量的用户。其设计模型采用带状分布设计模型,通过在不同带状区域中放置控件的方式进行报表绘制,具有非常好的扩展性和适应能力。
Style Report是最早出现的Java报表产品,可以算是Java报表的开山鼻祖,同时也是目前国际市场上知名度最高的纯Java报表工具。具有出色的大并发实时性能表现,曾经在奥运会期间为来自世界各地的成千上万的访问者提供了实时、快捷的成绩发布系统。因其进入中国市场较晚,在国内用户中名气不大,目前主要集中在一些大型高端的报表应用领域,如银行、通讯等领域。其设计模型采用表格设计模型,类似Excel。
数巨报表是一款经历多年市场锤炼的国产报表产品,是国内报表工具市场上主要产品之一。其设计端采用C++开发,服务器采用Java开发,同时兼顾了设计的人性化和可移植性。在其设计模型中则同时采用了带状分布+表格的设计模型,充分发挥了带状模型的扩展性和表格模型的快速设计能力。
润乾报表是近两年在报表市场上突起的一匹黑马,纯Java报表(设计器和服务器均采用Java开发),采用表格设计模型。润乾报表是国内第一个把多数据源关联交叉功能,提升到产品战略高度来宣传的产品,从而迅速在业界名声鹊起。
这些报表都是专业性的产品,需要收费,主要是面向大众需求,所以无法或很难根据本发明系统自身的特点进行改进。
IReport与JasperReport:Jasperreport是一个报表制作工具,用户须按照它编写的规则编写一个XML,然后得到用户所要的报表文件。Jasperreport程序库是一个灵活,功能强大的报表产生工具,可以以PDF,HTML或XML等多种形式产生报表,并支持CSV,XLS,等格式报表。该引擎由java编写,支持多种形式应用程序产生动态报表。打印的报表文档,Jasperreport是按照一个预定义的xml文档来组织报表的数据,这些数据来源多样,包括关系数据库、java容器对象,用户通过简单的接口来实现数据源与报表引擎的使用。
本申请人的无线网管的TOPTEA自1.0以来,一直没有实现自己的报表系统,所有的报表都是根据需要由开发人员单独写一个,对那些不懂或不是很懂技术的客户来说,添加一个报表是件非常困难的事情。为了减少开发人员编写报表的工作量,同时满足客户日新月异的需求变化,在2.0以后本发明决定自己开发出一套适合本发明产品的报表系统,让它所有的元素都可达到页面配置,同时具备删除,修改,新增和订阅的基本功能,这样客户就可以在不了解技术的情况下独立定制出一张符合自己要求的报表。
鉴于此,本发明选择第三方开源项目Jasperreport作为本发明的报表基础进行二次开发,它完全用Java编写的,并可在各种Java应用(包括J2EE或WEB应用)中用来产生动态内容。它的主要目的是以一种简单而灵活的方式来帮助创建导向的页面。它依照事先定义好的报表设计,利用关系数据库或内存中的数据,将其填充进去,得到各种符合要求的报表格式文件。基本实现流程如图1。
通过上面的介绍,应该对交叉表有所了解,因为报表格式文件是通过配置自动生成的,所以每个分组的位置都是需要根据下一个分组来自动调整,否则显示出来的报表会杂乱无章。
发明内容
本发明目的是提出一种交叉报表中自动分组的办法,解决报表系统开发过程中所碰到的问题,
交叉报表中自动分组的办法,以第三方开源项目作为开发基础的,以java语言进行报表系统开发,采用了由内到外,逐次计算的方法:即用一个数组列表结构,行、列的数组列表是分开的,按照行列的分组,每次都从外层到内层将组添加进来,重新计算各个行列的宽度、高度,并调用已有函数设置四周的边框,这样当所有的行列都加进来时,分组的确定信息已经统计完了,这就达到了自动分组的目的。
因为jasperreport要求给出每个元素打印的起始位置,以及需要打印的宽度和高度,例如,如果报表行维为2,即行上有2个分组,如上面所示,第一个分组为产品种类,第二个分组为产品名称,列维为1,即只有一个分组,就是地域,一个交叉报表把行维和列维分清楚了,基本一张报表的雏形就已经确定了。假设每个单元格都是宽80,高20,那个上面的那个报表,第一个行组分为2个,一个是数据的宽度和高度,一个是统计的宽度和高度,数据的宽度是80,高度是40,统计的宽度是160,高度是20,第二个行组也分为2个,其中数据和统计的宽度都是80,高度都是20。那个列组的宽度是240,高度是20。
这些数字的计算方法如下:列组比较好解释,宽度是3个地域的和,就是80*3,高度就是20,至于行,计算是从里到外的,如产品名称,虽说有各种车,但是不管多少都算一个,因为那个数据有多少之前是不知道的,所以数据的宽度是80,高度是20,统计也是一样,但是到了产品种类,计算有点变化了,数据的宽度是80,高度确是20*2,是由下一个分组的数据高度+统计高度,所以是40,统计的宽度是80*2,是由下一个分组的数据宽度+本次分组的数据宽度,高度是20,这么算是比较简单的情况,有的时候分组很多,或是不是每个分组都一定有统计,所以在自动分组的时候自动计算宽度高度是一个很复杂的事情。同时,因为每个单元格都有自己的左右上下边框,所以如果相邻的2个单元格如果一个有右边框,一个有左边框,或是一个有下边框,一个有上边框,就可能导致页面边框线变粗,显的很难看。
本发明是基于交叉表来开发的。交叉表:数据在纵、横两个方向进行展开(扩展),行和列都不是固定的。下面作了一个简单的表格说明:
原始数据如图2
交叉后的数据如图3
交叉表的特点归纳如下:
数据在横、纵两个方向扩展,即行、列均不固定。
左边、上边都有一个表头,而中间是明细区。后面往往还有合计之类。
数据明细区中的每一格数据都是由行维和列维来唯一确定(故每一格数据概念相同,如图二,都是产品名称和产地的交叉,有的仅仅是值的不同),并在交叉表中会且只会出现一次。
项:项就是原始数据表格中的列。如图一所示,产品种类是项,产品名称也是项。
维:来自于原始数据中的项。可以对交叉表中数据进行多重筛选分组并进行统计,分为行维和列维。如图二交叉表中,数据在横向进行了两次分组(列维为2),先是对产品种类进行分组(产品种类就是交叉数据的一个维,是来自原始数据中的产品种类这一项),在值相同的情况下第二次即对产品名称进行分组;横向只对产地进行分组(行维为1)。
本发明针对这个问题,采用了由内到外,逐次计算的方法:即用一个数组列表结构(行、列的数组列表是分开的),按照行列的分组,从外层到内层将分组按顺序添加进来,每成功的添加一个进来,就按照从内层到外层的顺序重新计算各个分组的宽度、高度,并通过jasperreport提供的函数对四周的边框进行设置,这样当所有的行列都加进来时,分组的确定信息已经统计完了,这就达到了自动分组的目的了,本发明所谓的自动分组,就是在报表定制的时候不考虑它每个分组实际需要的宽度和高度,只给它需要显示出来,然后通过算法,自动算出报表实际需要的宽度和高度值。
附图说明
图1报表格式文件的基本实现流程
图2原始数据
图3交叉后的数据
图4-6是本发明操作界面的配置图
图7是本发明的流程图
图8是本发明实际报表的效果图
具体实施方式
交叉报表的自动分组,是用来专门解决报表系统开发过程中所碰到的问题,用第三方开源项目作为开发基础的,用java语言实现。具体介绍如下:
1.准备好即将加入到数组列表中的分组R。
2.如果数组列表为空,将分组R的数据高度赋给统计高度(主要是为了美观,保证每个单元格的高度一致)。
3.如果数组列表不为空,进入4
4.对数组列表从后往前,即从最后一个分组往第一个分组反向循环。如当前分组为C,用已有的函数设置分组C的左边框和下边框宽度为1,右边框和上边框宽度为0,即不显示(如果显示了的话,必然右边框会与右边单元格的左边框重合,边框会变粗)。如果C是最后一个分组,进入5;否则,进入6。
5.将R的总高度赋给C的数据高度,R的数据高度赋给C的统计高度,R的总宽度与C的数据宽度之和赋给C的统计宽度。
6.取出R的后一个分组N,将N的总高度赋给C的数据高度,N的数据高度赋给C的统计高度,N的统计宽度与C的数据宽度之和赋给C统计高度。
7.将R添加到数据列表中。
就这样,每添加一个分组,都从内到外层层修改宽度和高度的信息。
流程图如图7所示。图8是本发明实际报表的效果图。
Claims (3)
1、交叉报表中自动分组的办法,以第三方开源项目作为开发基础的,以java语言进行报表系统开发,其特征是采用了由内到外,逐次计算的方法:即用一个数组列表结构,行、列的数组列表是分开的,按照行列的分组,每次都从外层到内层将组添加进来,重新计算各个行列的宽度、高度,并调用已有函数设置四周的边框,这样当所有的行列都加进来时,分组的确定信息已经统计完了,这就达到了自动分组的目的。
2、根据权利要求1所述的交叉报表中自动分组的办法,其特征是采用了由内到外,逐次计算的方法:即用一个数组列表结构,其中行、列的数组列表是分开的,按照行列的分组,从外层到内层将分组按顺序添加进来,每成功的添加一个进来,就按照从内层到外层的顺序重新计算各个分组的宽度、高度,并通过jasperreport提供的函数对四周的边框进行设置,这样当所有的行列都加进来时,分组的确定信息已经统计完了,达到了自动分组的目的。
3、根据权利要求1所述的交叉报表中自动分组的办法,其特征是算法步骤为:
1)准备好即将加入到数组列表中的分组R。
2)如果数组列表为空,将分组R的数据高度赋给统计高度(主要是为了美观,保证每个单元格的高度一致)。
3)如果数组列表不为空,进入4
4)对数组列表从后往前,即从最后一个分组往第一个分组反向循环。如当前分组为C,用已有的函数设置分组C的左边框和下边框宽度为1,右边框和上边框宽度为0,即不显示。如果C是最后一个分组,进入5;否则,进入6。
5)将R的总高度赋给C的数据高度,R的数据高度赋给C的统计高度,R的总宽度与C的数据宽度之和赋给C的统计宽度。
6)取出R的后一个分组N,将N的总高度赋给C的数据高度,N的数据高度赋给C的统计高度,N的统计宽度与C的数据宽度之和赋给C统计高度。
7)将R添加到数据列表中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 200710024408 CN101071413A (zh) | 2007-06-15 | 2007-06-15 | 交叉报表中自动分组的办法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 200710024408 CN101071413A (zh) | 2007-06-15 | 2007-06-15 | 交叉报表中自动分组的办法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101071413A true CN101071413A (zh) | 2007-11-14 |
Family
ID=38898641
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 200710024408 Pending CN101071413A (zh) | 2007-06-15 | 2007-06-15 | 交叉报表中自动分组的办法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101071413A (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102479341A (zh) * | 2010-11-24 | 2012-05-30 | 商业对象软件有限公司 | 具有语义指导的报表设计 |
CN104504048A (zh) * | 2014-12-19 | 2015-04-08 | 南京信息工程大学 | 一种交叉报表生成方法 |
CN104715357A (zh) * | 2013-12-17 | 2015-06-17 | 远光软件股份有限公司 | 一种单据配置的方法及装置 |
CN109829147A (zh) * | 2019-01-31 | 2019-05-31 | 恒生电子股份有限公司 | 报表导出方法及装置 |
CN110502555A (zh) * | 2019-08-23 | 2019-11-26 | 浪潮软件集团有限公司 | 一种动态生成交叉表格的方法及工具 |
-
2007
- 2007-06-15 CN CN 200710024408 patent/CN101071413A/zh active Pending
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102479341A (zh) * | 2010-11-24 | 2012-05-30 | 商业对象软件有限公司 | 具有语义指导的报表设计 |
CN102479341B (zh) * | 2010-11-24 | 2016-06-29 | 商业对象软件有限公司 | 具有语义指导的报表设计 |
CN104715357A (zh) * | 2013-12-17 | 2015-06-17 | 远光软件股份有限公司 | 一种单据配置的方法及装置 |
CN104504048A (zh) * | 2014-12-19 | 2015-04-08 | 南京信息工程大学 | 一种交叉报表生成方法 |
CN104504048B (zh) * | 2014-12-19 | 2017-07-11 | 南京信息工程大学 | 一种交叉报表生成方法 |
CN109829147A (zh) * | 2019-01-31 | 2019-05-31 | 恒生电子股份有限公司 | 报表导出方法及装置 |
CN109829147B (zh) * | 2019-01-31 | 2023-06-30 | 恒生电子股份有限公司 | 报表导出方法及装置 |
CN110502555A (zh) * | 2019-08-23 | 2019-11-26 | 浪潮软件集团有限公司 | 一种动态生成交叉表格的方法及工具 |
CN110502555B (zh) * | 2019-08-23 | 2023-06-02 | 浪潮软件集团有限公司 | 一种动态生成交叉表格的方法及工具 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105653644B (zh) | 一种页面构造器及页面构造方法 | |
CN102207872B (zh) | 按照用户需求定制Web UI控件的方法和系统 | |
CN101308490B (zh) | 一种动态报表生成方法及平台 | |
CN104239044A (zh) | 一种图形用户界面动态生成方法 | |
CN101071413A (zh) | 交叉报表中自动分组的办法 | |
CN102646039A (zh) | 基于XML Schema的软件界面生成系统及方法 | |
US20060048044A1 (en) | Logical spreadsheets | |
CN105487864A (zh) | 代码自动生成的方法和装置 | |
CN103019728A (zh) | 一种高效复杂报表解析引擎及其解析方法 | |
CN102339291B (zh) | 一种列表生成方法及设备 | |
CN106528070B (zh) | 一种数据表生成方法及设备 | |
CN102467378A (zh) | 基于二维矩阵的html表格处理方法及计算机 | |
MXPA05007071A (es) | Metodo, arreglo y programa de computadora para generar base de datos de disenos de manojos de combustible para reactores nucleares. | |
CN104375818A (zh) | 一种通过配置文件实现通用数据格式录入的系统及方法 | |
CN101246471A (zh) | 一种不规则复杂报表的生成方法 | |
CN103488537A (zh) | 一种数据抽取、转换和加载etl的执行方法及装置 | |
CN103257959A (zh) | 生成电子表格报表的方法和装置 | |
CN102722912A (zh) | 一种三维虚拟现实场景中物体按层级加卸载的方法和装置 | |
CN110489117A (zh) | 一种网页布局方法及装置 | |
CN105279269A (zh) | 一种支持表自由关联的sql生成方法和系统 | |
CN105868289A (zh) | 一种多媒体课件生成方法及装置 | |
CN100531070C (zh) | 网络资源调度仿真系统 | |
Liu et al. | A computational approach for knitting 3D composites preforms | |
CN106250110A (zh) | 建立模型的方法及装置 | |
CN108846101B (zh) | 一种自动生成sql语句的方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C12 | Rejection of a patent application after its publication | ||
RJ01 | Rejection of invention patent application after publication |