文/王浩严
随着海油销售公司的不断发展,对信息化管理的要求逐渐提高,进一步发挥信息化管理的优势变得十分重要。企业信息化管理是依托信息化系统,整合企业的数据要素,通过数据价值的有效挖掘,提升企业从产品设计到管理的各个流程的效率,充分发挥企业的信息资源的作用。通过数据资源的整合,利用先进的数据挖掘等技术,提高决策的科学性,更加精准的定位客户群体。最终达到提高企业效率、科学管理库存、快速响应市场变化、提升企业竞争力的目的。
本系统支持根据用户需求,记录用户录入数据,并最终以报表形式呈现,支持数据录入与修改、数据查询、批量导入、报表导出、图表查看;同时报表需要支持自定义功能,为保证数据的准确性,报表中很多通过公式计算的数据不是每次有数据输入时就计算好存储在数据库系统中,而是实时计算并呈现给用户,支持用户自己配置公式程序自动计算。
目前大部分系统的报表都是以二维表格的形式呈现数据。一般数据都是在后台已经计算好,只是在前台进行展现。这种报表形式具有以下的缺点:
报表采用固定的形式进行设计,无法灵活进行修改和扩展。由于业务发展较快,对报表的需求变化也较快,因此这种固定的报表形式无法满足业务的需求。由于调整需要耗费开发资源,也为软件开发人员带来了较大的压力。
由于固定形式的报表不能支持公式计算等功能,因此业务在进一步分析数据时需要将报表进行导出,然后在EXCEL上进行处理,降低了业务的效率。
固定形式的报表很难实现结构的复用,两张报表之间有细微差异都将导致重新开发。
固定形式的报表很难支持复杂的自定义查询。
为了解决以上问题,满足业务人员的报表需求,本系统实现了智能报表功能,允许用户进行自定义查询,提高业务的效率。
本系统的智能报表基于语义模型,通过语义模型解耦报表数据与报表位置的映射,重新采用语义建立二者的映射关系,进而支持对报表的结构与数据的自定义。假设P代表报表、T代表数据、Ο代表数据所有人,则报表的语义模型S由如下公式所定义:
通过该语义能够对报表进行最小完备的描述,比如s={凝析油,190101-190601,营口}表示2019年1月1日至2019年6月1日营口的凝析油库存量。报表中的数据单元格可定义为:
其中D代表了报表中的数据值域。同理,单元格可定义为:
其中PosX、PosY代表单元格所在位置。允许单元格上进行公示运算,则单元格的公式定义为:
其中F表示用户可自定义的各类公式。
以表1的报表形式为例,本文将进行形式化描述:
其中可以A1(代表列坐标,1代表行坐标)、B1、C1、D1为主栏,对应报表的列标题。可以用形式化描述为SA1={null、月份、null}、SB1={产品、null、null}、SC1={地区、null、null}、SC1={null、null、销量},则可定义单元信息如下:
则D5的数据可以表达为:
SD5=SD,×S,5={<产品,地区>,月份,销量}={<凝析油,营口>,1月,销量}
则该单元格的数据便能通过形式化语义被描述出来。
图1:智能报表实现架构图
在公式的自定义上,F支持各种表内公式、表间公式,同时支持若干内置函数。公式的形式化语言定义如下:
其中VT代表各类终结符,VN代表终结符,P代表产生式集合,S代表开始符号。则本系统的自定义语法如下:
可以看到函数自定义表示说支持加减乘除及乘方等运算,运行用户自定义表达式对报表进行自定义。
如图1所示,智能报表的实现共分为四层结构,最底层是存储层、然后依次是数据处理层、语义层以及交互层,其中:
存储层:本层实现对报表元数据的存储,包括报表结构数据、公式数据、元祖数据以及报表的其他记录数据。
数据处理层:本层对各类报表数据进行处理,包括结构数据、公式数据的存储于维护,各类元数据的提取。
语义层:本层包括对各类语义的正向以及逆向解析,对语言元素进行定义与操作,对公式进行解析。
交互层:本层实现报表的展示与交互,包括交互式的结构设计、查询分析以及权限定义等辅助功能。
本报表的开发基于Spring-boot架构,其中语法解析使用LEX工具按照语法形式化表达式定义解析语言。对公式的解析使用commons-jexl3,该库能够支持jexl表达式语言引擎,commons-jexl3提供了该语言引擎的Java支持。本系统的实现效果如图2所示。
本文详细的分析了油气数据采集测评及风险预警系统中智能报表的形式化语义的设计与实现方案,从数学原理对该系统的实现进行了描述。通过智能报表的实现有力的提升了海油销售公司的数据整合能力,提高了报表系统的智能化与扩展性,提升了公司的市场竞争力。
图2:智能报表实现效果