时间:2024-05-04
张欢
(中海油研究总院有限责任公司 北京市 100028)
石油天然气储量是石油企业的核心资产,储量报表的设计和应用显得尤为重要。公司使用的上市储量评估专业软件是一套根据国际石油公司储量资产化管理的需求,利用Java语言设计开发的油气储量资产评估与管理系统,主要用于油气储量计算、储量资产评估和储量管理。上市储量报表是要将储量计算和评估的多个成果数项混合显示在单个报表中,有的数据项是单个字符串,有的数据项是字符集(一定年限中各年度的数据)。上市储量报表数据项的逻辑结构和层级比较简单,但是数据项多,还涉及到数据对象的单位转换问题,实现起来比较复杂。上市储量评估专业软件之前使用Actuate报表开发工具。该报表工具设计开发比较困难,在数据显示上也有一些不足。而BIRT报表具有很好的国际化支持,可以很方便地在一个报表中混合展现概要数据和详细数据,容易和应用系统集成结合等优点,非常适合设计和生成上市储量报表。
BIRT(Business Intelligence and Reporting Tool)是Eclipse平台的商业智能和报表工具项目,它是一个基于开放源代码的报表系统,主要用在基于Java,J2EE的Web应用程序上。BIRT报表基于Eclipse的开源报表工具,开发环境与Eclipse的天然结合非常适合程序员使用。BIRT非常容易集成,引入相应TLD(标签库)和JAR包就能搞定,十分方便。同时拥有和Dreamweaver一般的操作界面,可以像画table一样画报表,生成图片,导出word,html分页样样齐全,样式和script设置简单。上市储量评估系统是一个基于Java的C/S应用程序。BIRT给上市储量评估系统创建美观实用的PDF、XLSX、DOCX、PPTX等格式的报表插件。
上市储量评估系统主要包括储量评估和经济评价两大功能。上市储量报表集中展示这两项功能的成果数据。上市储量评估系统是C/S架构,采用的是典型的MVC框架。M是指业务模型,V是指用户界面,C则是控制器,使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。比如一批统计数据可以分别用不同的BIRT报表来表示。C存在的目的则是确保M和V的同步,一旦M改变,V应该同步更新。整体的系统架构图如图1所示,系统主要有表示层、业务逻辑层和数据服务层组成。在表示层中,用户在统一入口开展所有的业务研究工作,包括油藏储量计算、气藏储量计算、经济评价等,计算结果按照单一资产输出和多资产汇总展示BIRT报表。在业务逻辑层中,基于Eclipse定制BIRT报表模板,采用基于MVC模式的请求转发,决定访问的目标,应用程序接受普通业务处理。在数据服务层按照BIRT报表格式要求建立数据规范,提供统一的数交换接口。
图1:系统架构图
在设计报表时,首先需要确定报表的数据源。BIRT报表支持定义不同类型的数据源,如JDBC数据源、平面文件数据源、XML数据源、脚本化数据源、POJO数据源等。数据库中的数据通常是企业报表的最主要的来源,因此BIRT最常用的数据源是JDBC数据源。而上市储量评估系统根据系统的实际架构,选择使用POJO数据源。
POJO(Plain Old Java Object)是指简单java对象。POJO的内在含义是指那些没有从任何类继承、也没有实现任何接口,更没有被其它框架侵入的java对象。简单理解为不包含业务逻辑的单纯用来存储数据的 java类,一般POJO没有实现任何接口,没有集成任何父类(java.lang.Object除外)。对于对JAVA语言不熟悉的,可能比较难以理解POJO对象。在上市储量评估系统中,POJO对象指的是系统中定义的变量,包括基础变量和过程变量,都能作为POJO对象进行输出。
在用户界面定义并录入了储量评估和储量计算的基础数据,同时能够记录经过业务模型运算后形成的结果数据。基础数据包括评估单位、评估日期、税率、储量级别、储量状态等单个字符串的变量,同时包括油价、毛产量、费用、费率等字符集数据。在业务模型部分基于产量递减法、数模法的方法编写了产量预测模型,同时按照既定规则编写了自营油气田和合作油气田经济评价模型。控制器利用基础数据来运行业务模型,最终得到出储量评估和经济评价的结果数据。在上市储量评估系统中,基础数据项、计算后的结果数据项、以及计算过程中的数据项,都可以视为POJO对象,能够在BIRT报表中输出。
与用户打交道的是报表定制层,因此定制层的质量直接决定了用户的体验。上市储量评估系统包括研究项目的建立、资产管理单元的建立、数据的导入导出和备份、储量评估参数的录入、储量图形分析工具的运用、评估模型的的运行、评估结果的预览和打印。资产建立遵循:油气田、开发状态、预测单元三级的原则。根据SEC相关要求,信息单包含了油气田及其各状态的总产量、净产量、价格、公司未来总收入、产品税、成本项、税前未来净现金流等关键分年数据。报表主要包括两种模板类型,general类型和summary类型,分别对应单一资产报表和多资产汇总报表。
在general类型报表模板中,是单个油田或者分状态的资产的相关数据项在报表中输出。数据项包括单个的字符串以及字符集。因此,需要建立两个数据集合(SingleData和TableData),分别用以存储各种类型的字符串和字符集。确定好了报表的模板类型后,下一步需要构建报表的框架布局,大部分的布局都可以直接使用Eclipse的table组件来组合实现。Eclipse提供的属性也很丰富,能够规范报表中数据项的显示。接下来需要根据报表的数据项导入储量评估系统中的POJO对象。导入的功能类就是写在引入的JAR包中。导入的POJO对象包括三类:常量对象,比如年度信息(使用getDate()函数);单个字符串对象,包括中方权益、缩水系数、经济年限、弃置费等,使用getValue()函数;分年的字符集:比如2021年至2035的原油总产量、净产量、税费、成本、税前净现金流等,使用getStreamValue()函数。掌握好三类导入函数的使用,基本掌握额general类型报表的定制。导入POJO对象后,可以很方便的将相关对象拖入模板中相应的位置即可。接下来,需要设置模板数据项的属性,包括字符长度,字体、保留小数位数等。最后,在软件环境中测试,检查生成的报表是否符合预期要求。
选择合适模板,建立框架,匹配POJO对象,测试完成后,报表显示的数据还缺少有效的单位。作为一个企业集的应用,数据项的单位统一以及转换不可缺少。比如在储量评估系统中原油净产量的单位是吨,BIRT报表中要求原油净产量统一显示为桶。这就需要在报表生成时,需要有一个单位转换的过程。作为专业软件,系统中已有单位转换的功能函数,在导入POJO对象时调用相关功能函数即可。
Summary类型报表比General类型更加复杂,本质是将多个资产的数据显示在同一个表单中,每个资产占用一行或多行数据(单一字符串或分年的字符集)。不同于General类型,布局时可仅使用Table组件进行组合。Summary类型报表需要在Table中插入一个Group组件,同时增加一个Group字符集。将导入的POJO对象拖入Group组件的相应方框后,同时将POJO对象与Group字符集的AbsoluteName进行绑定,然后选择多个资产后,即可导出多条记录。
需要注意的是,如果Group组件中的数据项混合有单一字符串和分年的字符集,需要将单一字符串导入至TableData字符集。这样单一字符串才能与分年的字符集显示多行,不过每行的数据都是相同的,与分年的字符集进行匹配。
实际工作中,Summary类型报表使用更广泛,它能够反映季度或者年度储量评估的一个整体情况。Summary类型报表模板的设计开发的难度也更大。
上市储量评估系统的建设和应用的时间比较长,之前一直视为一个储量评估和经济评价的工具软件(类似一个复杂的计算器)。随着用户和资产数量的增长,系统也被外部审计纳入了审计的范围。报表的输出作为数据的一个出口,按照审计要求,需要通过角色对员工的权限进行限制。在BIRT中,这个功能实现起来比较困难。BIRT没有权限方面的辅助功能,想要实现权限,需要另外开发模块来实现此项功能。这也是接下来需要解决的问题。
其次,上市储量BIRT报表交互性比较差。上市储量评估系统中引入的JAR包中的数据导入函数,很好的起到了报表表格数据项与系统POJO对象的匹配关系,但是缺少异常处理和提示机制,不能与用户进行交互。在开发报表的时候,只要有一处语法错误,整个报表的数据都无法显示,无法进行调试。由于BIRT的报表数据的动态生成的,调试起来比较困难,只能逐个数据项手动检查,不可避免会走很多弯路。但是一旦BIRT报表开发完成,在具体的应该过程还是比较稳定的,除非需要增加新的需求,需要更改报表的功能,其他方面基本不需要维护。
另外,BIRT的报表设计界面是传统的条带式界面,在设计报表样式,需要的行和列需要画出,对表头比较复杂的中国式报表来说,实现起来有困难。上市储量报表中的现金流相关数据需要按照15种分状态,按照分公司、总部层层汇总统计。这类处理简单数据关系的统计分析功能在关系型数据库中非常容易实现,但是BIRT报表中难以实现。为解决这个问题,只能将上市储量报表涉及的数据项导入基于关系型数据库的储量成果管理系统中,再通过编写SQL语句来实现统计分析功能。
最后,BIRT报表相关教程和资料的获取也比较困难,难以进一步深入学习相关知识。笔者也是在使用国外的石油专业软件时,才接触到BIRT报表。国内没有BIRT的官方技术交流平台和技术支持人员,仅有的几个网友自发组建平台上,问题的更新还停留在2012年以前,活跃度很低。可能这也是BIRT报表在国内企业中的使用率却远远低于FineReport等报表工具的主要原因。笔者在设计上市储量BIRT报表时,资料主要也是从外方工程师获取。学习的进度也比较缓慢,经常遇到问题迟迟得不到有效的解决方案。
上市储量评估系统通过单井和油气田的历史产量数据计算出分年预测的毛产量和净产量,再结合油价、税费、费用等基础数据,计算经济评价的各项现金流,并最终通过BIRT报表输出计算成果。利用BIRT报表生成的上市储量报表使用简单,数据呈现效果好,在公司上市储量工作中得到了广泛的应用。相比较其他的报表工具,BIRT报表的功能比较简单,能够快速与系统集成,最大的优点还是免费,在报表数量不多且报表简单的项目里建议选用。
我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!