基于B/S架构的自主生成报表引擎系统设计与实现

2017-04-25 13:27何俊博
电子设计工程 2017年8期
关键词:折线图引擎报表

戚 平,何俊博

(1.中国石油大学(华东)山东 青岛266580;2.中国移动通信集团新疆有限公司博州分公司 新疆 博尔塔拉蒙古自治州833500)

基于B/S架构的自主生成报表引擎系统设计与实现

戚 平1,何俊博2

(1.中国石油大学(华东)山东 青岛266580;2.中国移动通信集团新疆有限公司博州分公司 新疆 博尔塔拉蒙古自治州833500)

基于当前社会对报表应用的需求,为满足开发人员对已有数据库查询显示的不同需要,采用B/S架构,使用JSP编程,设计实现了自主生成报表引擎系统。该系统使用浏览器登录服务器,为用户划分个人工作空间,根据用户需求自由设定报表的查询项目,解决了时间、地点的局限,突破了只能按系统设定好的报表模版查询的桎梏。经测试该系统具有良好的稳定性、兼容性和可扩展性,达到了设计的要求。

自主生成;报表引擎;B/S架构;报表生成器

在信息社会中,各种信息都需要进行处理并直观的展现出来。很多企业的系统中都需要将大量数据以报表的方式显示和分析,报表的重要性越来越得到了企业决策者的肯定。随着时代的变迁,传统纸质报表在社会的进步以及科技的发展中逐渐被电子报表所取代,各大公司也投入了大量资金进行报表设计工具的开发[1-2]。目前大型企业基于B/S的报表系统开发模式越来越成熟,但是很多开发人员仍在根据实际需求直接写代码实现数据的分析、处理、展现功能。这样的实现方式会做很多重复工作,比如很多项目中都需要通过报表数据和图表来展现业务趋势,而展现的时间粒度、地域粒度、数据纬度和指标却各不相同,所以结果也是不同的[3-4]。

报表引擎是用来生成相应的报表并展示给用户的一种工具。报表引擎起源于流行的工作流引擎的原理、报表格式的定义、报表内容的各种算法,产生报表引擎的思想。它主要是引用工作流引擎的流程运转原理,在原始数据的基础上,定义报表的格式、报表的算法,根据定义的算法自动执行计算,并输出计算后的结果,再根据定义的报表格式显示报表的内容[5]。

客户使用的系统中经常需要显示大量的报表,这些报表中的指标随着客户的需求变化也在不断地发生改变,这对管理人员来说当用户需求改变时就要大规模的更改系统,修改显示报表的页面。为了使管理人员解脱束缚,在已有数据的基础上开发一套能够通过自定义来生成报表的系统,这会大大降低管理人员对于系统的维护时间。随着需求的出现,技术人员开发出了很多系统平台,比如:巫乔顺等设计并实现了一种基于XML和Excel技术的自定义动态报表系统,系统由数据层、业务层、定义层及展现层组成[6];潘永才等则提出了一种可定制报表系统的设计方法:给出了可定制报表系统架构与实现方法,并在.NET平台下设计了由报表定制模块、报表解析模块等组成的可定制报表系统[7]。

随着当前网络环境的无处不在,各种电子产品大都具备了连通网络,处理各种信息乃至工作任务的强大功能,直接利用这些工具通过网络浏览器来完成一些报表的定制将会极大地方便从事相关工作的从业人员。基于B/S架构的自主生成报表引擎系统的设计与实现,为解决这样的社会需求提供了一种解决的思路。报表从某种方式上可以划分为两类:用来查询显示的报表,提供数据上报的报表。在这个系统里只涉及用来查询显示的报表。

1 系统设计

自主生成报表引擎系统是一个通过浏览器访问服务器端,调用报表生成工具来完成一系列报表任务的系统平台。它通过Web方式实现报表的生成、预览与打印,为用户提供满足其要求的报表格式。根据不同用户对报表的不同需求,系统中所显示的报表会随着用户的自主设定而不断地变化。由于传统的编写jsp报表页面工作量巨大,因此自定义生成报表引擎系统将功能进行了模块化设计,以提高工作效率。

系统根据用户提供的要求来定制报表,需要实现以下功能:

1)用户名认证:限定用户的工作区间,即用户登录后只能修改其用户权限下定制的报表。

2)定制报表:此功能是本系统的主体功能。一个完整的报表由表名,表头,表格数据,日期组成,用户通过输入表名、表头、数据查询语句,选择时间粒度,即可完成一个简单的报表定制。

3)报表列表:显示用户定制的报表信息(包括报表名,生成时间,定制人id)。

4)预览报表:预览已经定制的报表。

5)修改报表:进入修改界面,可更改表名,表头,数据查询语句,时间粒度。

6)报表下载打印:将报表导出到Excle表格中或者打印。

将以上功能进行归纳,可以将系统划分为3大模块:

1)用户工作区:完成用户的登录验证并设定用户的工作区间,使用户之间不会互相干扰。

2)报表定制、修改模块:使用新建报表功能,填写报表生成器的内容,创建报表。完成后,用户可以查看报表信息内容,进行报表的修改、删除等管理工作。

3)报表显示打印模块:实现将用户生成的报表导出并打印的功能,打印功能使用一款名为iText的开源的免费纯java组件来完成,在本文中就不做介绍了。

2 系统实现

2.1 用户工作区的实现

用户输入用户名和密码后,点击登录按钮,服务器端调用javabean通过jdbc与数据库连接进行用户验证。登录成功后显示index.jsp主页面,框架分为两部分,如图1所示。

图1 主页面框架

页面的顶部,是用于显示含有系统信息的图片,在图1中未做展示。第①部分位于左侧,主要含有报表列表、新建报表、修改报表、报表信息四个按钮供用户选择需要进行的任务;第②部分位于右侧,是在主页中嵌入了一个

由于不同的用户拥有不同的工作区间,所以在登录后,系统会记录当前用户信息进行区分,该用户制作的报表会被标注上该用户信息以区分从属关系。登录时,服务器端会创建一个session对象,将用户名信息保存在session中。session在客户端连接到服务器时创建,session生成后,只要用户继续访问,服务器就会更新session的最后访问时间,并维护该session。用户每访问服务器一次,无论是否读写session,服务器都认为该用户的session活跃(active)了一次[8]。session的信息保存在服务器端,而session的id则保存到客户机的cookie中,由于采用服务器端保持状态的方案在客户端也需要保存一个标识,所以session需要借助于cookie来达到保存标识的目的。要注意,在session中保存的信息是有类型上的限制,基本数据类型如 int,double等是不可以的,在session中的参数类型必须为java的相应的对象,如Integer,Double等。

创建session的过程如图2所示:客户端发出请求,由服务器端响应请求为客户端创建一个session或者使用已有的session。服务器收到客户端的请求后,检查客户端的请求是否存在session标识信息即session id。如果 session id存在,服务器就根据session id检索并使用关联的session。如果session id不存在,则为此客户端创建一个session并生成一个与之关联的session id,id的值为一串特殊的字符串,在本次响应中会被返回给客户端保存到cookie中。

图2 session创建流程

2.2 报表生成、修改功能的实现

报表就是用表格、图表等格式来动态显示数据,可以用公式表示为:“报表=多样的格式+动态的数据”。生成报表则不可避免的涉及到数据的处理。数据存取是指数据库数据存储组织和存贮路径的实现和维护[9]。报表呈现过程中包括两个功能模块,分别是报表统计模块和数据源加载模块。报表统计模块用于报表输出和数据加载,即设计出符合客户要求的报表样式,并设计好数据加载接口。数据源加载模块用于数据的提取、转换及存储,即在业务系统的业务流中选择适当位置设计数据源加载模块,获取流经该业务的原始数据,转换后存储在存储表中,并保持数据的一致性[10]。

在自主生成报表引擎系统中,通过页面调用的报表生成器来实现报表的自主设计,如图3所示。

图3 报表生成页面

报表生成器中需要设定的内容有一下几部分。

报表名称:在文本域内输入想要新建的报表名。

数据集:此功能对数据操作语言能力要求较高,数据库存有数据源,数据是从不同的地方采集入库得到,对于本系统的使用者只拥有数据库的原始数据,用户会随时提出对报表的不同需求,所以不能只是单纯的从数据库取得一个表的数据作为报表的显示,在数据集里输入的是较为复杂的数据查询以及计算语句。

时间粒度选择:报表的表格内数据都是有时间标识的,添加时间粒度来对数据进行动态查询。再输入数据集的时候,所有对时间的查询都要把日期替换为{day},因为要获取时间来替换{day},从而对数据库进行动态查询,选择不同时间来显示报表数据。同时可以选择时间粒度是日粒度还是月粒度的。

查询列:根据输入的数据集来获取对应有多少列,并显示列名,由于数据库里存的列名是自定义的,如果直接以列名显示在报表里用户是无法理解这个列的含义,因此需要自定义每个列的指标名。操作时点击查询列会显示列名,并在列名后提供了输入指标名的文本框以供编辑。在文本框后面设计添加了“链接折线图”选项,当选中该选项后会对指标值进行处理绘制出该指标的近期数据折线图。可以选择任意指标来绘制折线图。

在全部相关设置填写完毕并提交后,系统将所有的设置项提交并进行处理,将设置的内容分类添加入数据库进行保存。相关JavaBean部分代码如下:

设置完成后,生成相应报表如图4所示。

图4 生成报表

报表显示分为3部分内容,报表名称、日期选择、表格数据。报表名称通过前一个页面传值获取,然后在页面显示。日期选择使用了“My97datepicker选择器”,此选择器能够多元化的显示各种类型的时间选项,从年份选择到分钟选择,不会产生手动输入日期不规范等常规性错误,并自带的改正错误系统。表格数据的显示是在报表页面中添加了一个< iframe>进行动态显示,动态数据是根据选择的日期时间生成的,在第一次加载报表页面时,通过如下方法获得系统日期时间:

也可选择日期时间,通过编写JavaScript方法获得日期时间并传给

2.3 绘制折线图功能实现

报表图形化是一种对数据结果直观的展示,非技术开发人员可以通过报表图形化工具自定义报表的查询内容和查询展现方式,并可供其他用户查看分析[11]。在定制报表过程中,一些指标设置了链接折线图(如图3)的选项,在加载数据时程序会进行判断,如果链接折线图功能被选择,则生成相应报表图形,如图5所示。

图5 折线图

折线图的绘制采用的了JFreeChart包来完成。JFreeChart是Java平台上的一个开放的图表绘制类库,它完全使用 Java语言编写,可应用于 Java Applications、Applets、Servlets和JSP等。使用控件的优点是省时、省力并具极大的灵活性,使用非常方便,容易绘制出各种复杂、漂亮的图表[12]。利用JFreeChart可生成饼图、柱状图、折线图、时序图、散点图、甘特图等平时所需的多种图表,并且可以产生PNG和JPEG格式的两种输出[13]。常用的PDF文件以及微软公司的EXCEL表格同样可以与之相接从而传输数据。

3 结束语

优秀的报表可以对基础数据进行过滤、合并、统计、分析,提供直观的表达形式,并为决策提供良好的依据[14]。报表的设计与实现是平台建设中非常重要的、必不可少的组成部分,在应用系统的设计实现中占有十分突出的地位[15]。自主生成报表引擎系统,为定制生成报表提供了一个网络应用思路,通过浏览器访问服务器,根据用户个人需求定制生成报表,这种模式开发成本较低,周期短,应用却十分广泛,在应用中对于用户设备、地点、时间要求不高,具有良好的稳定性,可扩展性,极大解放了相关用户使用的限制,从而提高工作效率,也符合当前时代发展与生活节奏的需求。该系统不足之处在于没有解决非专业技术人员的数据库操作方面的局限,没有做到所见即所得。下一步将会把直接在浏览器页面点选数据库,点选指标放在改进的内容中,让系统能为所有用户服务,用户不需要太多后台数据库操作的技术知识,只需要知道自己要用到哪些数据,要什么样的报表就可以了,以使得该系统受用面更加广泛。

[1]Paul Turley.SQL Server 2005报表服务高级编程[M].谢文亮,译.北京:清华大学出版社,2007.

[2]赵晓辉,张璟,李军怀,等.基于GEF框架的报表设计引擎设计与实现[J].计算机工程与设计,2009(19):4567-4570.

[3]Toffoli G.IReport User Manual[M].San Francisco,Califomia,UnitedStates:JasperSoftCorporation,2006.

[4]马燕,王文发,许淳,等.基于Web的生产统计报表的设计与实现[J].计算机技术与发展,2012,22(2): 213-216.

[5]Tomasedision,360百科词条:报表引擎[EB/OL]. [2012-10-19].[2015-08-03].http://baike.so.com/ doc/4576231-4787425.html.

[6]巫乔顺,彭海波,李杰.一种自定义动态报表系统的设计与应用[J].机械设计与制造工程,2013(1):80-82.

[7]潘永才,刘海龙.可定制报表系统的设计与应用[J].物联网技术,2015(1):104-106.

[8]刘京华,Java Web整合开发王者归来[M].北京:清华大学出版社,2010.

[9]朱文芬,杜志银.基于共词分析的信息构建研究热点分析[J].现代情报,2012,32(8):84-87.

[10]余肖生,汪宏舟.信息系统的报表存取模式研究[J].现代情报,2015(2):53-56.

[11]高涵,周国祥,石雷.B/S下一种报表图形化方法的研究与实现[J].合肥工业大学学报:自然科学版,2015,38(3):341-344.

[12]王征强.利用JfreeChart开发包绘制图表[J].邢台职业技术学院学报,2007(1):39-41.

[13]朱贺新,穆荣,卢建军.JFreeChart的应用开发与改进[J].西安科技大学学报,2008,12(28):789-791.

[14]Lin Qintan,Jun Shan.Designing and Realizing of Web Report Form Based on Struts Framework[J]. Computer Systems&Applications,2006(11):25-28.

[15]李宇,陆倜,邵秀凤.基于XML的Web报表解决方案的研究与实现[J].航空计算技术,2004,34(1): 62-65.

Design and implementation of a self reporting engine system based on B/S

QI Ping1,HE Jun-bo2
(1.China University of Petroleum(East China),Qingdao 266580,China;2.China Mobile group Xinjiang Co.Ltd.Bozhou branch,Bortala Mongolia Autonomous Prefecture 833500,China)

Design and implementation of the system of independent reporting engine are generated to meet different needs of the developers for the present database query and display as well as current social requirements for report.The system employs B/S architecture and JSP programming.It offers the developers to log in server via a browser to get their own work space.According to the users'needs,it sets report query projects,which solve the limitations of time and location and shake off query mode involving report format set by the system.After testing,it indicates good stability,compatibility and scalability,which meets the requirements of design.

self-generate;report Engine;B/S architecture;report builder

TN915.09

:A

:1674-6236(2017)08-0078-05

2016-03-18稿件编号:201603245

戚 平(1975—),男,山东青岛人,工程师。研究方向:计算机网络、计算机应用。

猜你喜欢
折线图引擎报表
Optimization Design of Miniature Air Quality Monitoring System Based on Multi-Sensor Fusion Technology
LabWindows/CVI中Excel报表技术研究
让折线图显示在一个单元格中
再多也不乱 制作按需显示的折线图
从三大报表读懂养猪人的成绩单
蓝谷: “涉蓝”新引擎
美化Excel折线图表
无形的引擎
基于Cocos2d引擎的PuzzleGame开发
月度报表