报表没完没了怎么办?

发布时间:2017-12-14 分类:产品文章 Tag:,

报表没完没了-01

应用系统软件项目中有一个普遍现象,就是报表总也做不完。不管是领导需要的宏观数据统计重点的变化,还是业务部门的计算口径的变化,都会造成报表需求的频繁变更。报表项目组就要不断修改现有报表,还会新增很多报表。润乾的很多用户提出,能不能发明一种软件工具,来解决报表永远做不完的问题?

从本质上说,报表本身就存在业务稳定性差的特点,这是造成报表开发没完没了的本质原因。也就是说,这个问题是需求频繁变化造成的,是一种常态。因此,要试图适应而不是解决这个问题,具体的办法就是建立长期应对机制。也就是说,在应用系统开发完成之后,保持最低成本的报表维护人员来解决报表需求的变更和新增。

如果能够不依赖于开发商的专业程序员来解决没完没了的报表需求,对于甲方和开发商而言,都是最佳方案。非专业的程序员,或者是甲方自己的技术人员兼职来做这件事,成本很低,可持续性却很高。

但是,要实现这样的长期机制,还有几个难题需要解决:

1、 由于有报表工具的支持,报表的呈现环节开发已经很容易了。但是,报表数据计算环节还需要编程序(Java、C#、复杂SQL、存储过程等),是低成本维护人员很难完成的任务。
2、 开发商为报表的数据计算部分编写的代码,和应用系统的其他部分是耦合在一起的。一旦调整,还需要开发商的专业程序员才能解决。
3、 Java等编程工具的环境配置复杂,低成本维护人员没办法自主完成。
4、 SQL对于复杂计算实现起来是比较困难的,存储过程本身也比较难写,还需要较高的数据库权限,存在安全风险。遇到库外文件的情况,比如Excel等,SQL和存储过程也没办法直接计算。

所以,建立长期机制必须要做到:

1、 报表开发要彻底工具化。不仅是呈现层的工具化,报表数据计算层也要工具化,降低对开发人员的要求。不必做复杂的环境配置(数据源等),也可以编写简单的代码来实现复杂计算。对于多样性数据源,比如Excel、文本文件等,也必须支持简单脚本计算。

2、 报表模块要彻底独立化。数据计算层也要和呈现层一样,完全和应用系统解耦合,实现独立维护。报表需求变更和新增的时候,仅仅修改报表模块就可以了,不会影响应用系统其他部分。

有了报表工具,报表的呈现层已经可以做到工具化和独立化了。结合润乾的专业计算产品集算器,可以实现报表开发过程的彻底工具化和报表模块的彻底独立化,建立长期应对机制,完美解决报表没完没了的难题。

报表工具集合集算器的方案结构图如下:

bbmwml1

集算器可以降低报表后端计算的开发难度,彻底实现报表开发过程工具化。

集算器是一种高级语言,润乾公司提供了集算器的集成开发环境IDE。类似于Java的集成开发环境Eclipse,集算器的IDE也提供了调试执行、单步执行、设置断点等代码调试方式:

bbmwml2

图中的脚本,是从oracle数据库取部分的订单数据,和Excel中的部分数据合并分组汇总后过滤出订单金额小于10000的数据,返回给报表。从图中可以看到,集算器采用了过程计算编程方式,相比SQL无法严格分步骤写脚本的方式要更容易编写。有经验的程序员都知道,SQL用来实现很零碎的多步运算很不方便,特别是与次序相关的运算,程序员常常要把数据从数据库中取出来用Java等完成。而集算器则正好在这方面做了强化,在分步计算、集合化、有序计算和对象引用等几方面做了完善,对于常用的日期和字串等运算,也比大部分SQL提供了更丰富的方法。B1单元格只需要一个函数就可以读取Excel文件中的数据,这是SQL无法直接实现的。

Java等高级语言没有提供批量数据计算的类库,写个简单的SUM也要好几行,更何况分组、连接等运算,而对于过滤、汇总用到的通用表达式计算,基本上是大多数应用程序员无法完成的任务了。而且Java其实也没有通行的结构化数据对象,只JDBC有个几乎没有计算能力的ResultSet。直接用Java实现报表数据准备非常繁琐。集算器则提供了大量与结构化计算相关的基础对象和方法,分组汇总这些只要一句,而且是解析执行的动态语言,可以进行随意的表达式计算。使用集算器完成报表数据准备工作要比Java容易得多,代码也要短小很多,实现了复杂计算的简单开发。报表开发者只需要写脚本,不用管理数据连接等环境等等问题,可以实现非专业程序员、甚至用户自己的运维人员独立完成报表开发过程的目标。

集算器集成开发环境还提供了方便调试的功能。图中单击A4单元格,在IDE右边就可以所见即所得的看到A4的计算结果,非常有利于发现每个步骤的问题。IDE下方可以直观的看到系统信息输出,随时查看脚本的异常。

集算器可以优化报表应用结构,使得报表模块可以独立维护,彻底实现独立化。

集算器可以降低与业务系统其他模块的耦合度。集算器编写的脚本是独立的dfx文件,不会和应用系统其他部分的Java程序形成耦合关系。这样就可以把报表模块单列出来,而不必和应用程序绑死在一起。独立的报表模块可以单独去维护,虽然业务稳定性差,但是频繁的修改不影响主应用程序。

计算方法的调整和报表模板的修改一样无需重启服务器,真正实现整个报表系统的热切换。因为报表系统业务不稳定造成的系统重启减少到零。

这样,从报表计算层到呈现层完全独立出来了。用报表工具修改报表模板,上传覆盖之前的模板即可;用集算器修改报表计算脚本文件,上传服务器,覆盖旧的脚本文件即可。因为和应用系统其他模块没有任何关系,所以无需开发商的专业程序员到现场修改。非专业程序员或者用户自己的维护人员就可以解决没完没了的报表难题。