2015年(12)
分类: 数据库开发技术
2015-05-18 13:42:43
企业在选择报表表格解决方案时,不仅要考虑报表表格工具的功能和服务,还要考虑它是否易学、易用。国内用户都非常熟悉Excel,也经常用它做些简单的报表,所以我们从设计的方便性出发,研究出了贴近Excel使用习惯的报表表格设计器。拥有excel设计风格的FineReport设计器,不但能快速解决复杂的中国式报表制作难题,提高报表的制作效率,而且能大大降低设计人员的学习成本,提高企业的经济效益。
FineReport报表的设计风格和Excel相似(当然二者本质并不一样),整个设计窗口是格子式的可视化编辑界面。用户可以借助这个界面所见即所得的设计出任意复杂的表样,而且免去了传统条带式设计数据对齐的繁琐,使得报表制作的效果得以大大提高。
传统的报表表格工具在内网中工作时,需要将设计器和报表工程都部署到服务器上,这样就产生了几个问题:
1:在服务器上需要安装设计器,而对于使用内网的公司,服务器的安全要求一般都比较高,只有相应服务器才能去连接数据库,对于一些二层架构的报表来说,就需要在服务器上安装设计器,增加了服务器管理员的维护难度;
2:当服务器上的报表需求变化时,需要去现场进行操作,麻烦而且效率低;
3:进行一些迁移时,二层架构的逻辑比较复杂,相当麻烦;
FineReport基于此,采用主流的三层架构模式进行设计,只需要在报表设计员的电脑上安装设计器,设计完后,将工程部署到服务器上,其他用户只要电脑上有浏览器,就可以直接访问报表。这样对于公司的使用来说只需要部署一次工程,以后就可以直接远程设计,迁徙方便,提升效率。
FineReport提供了报表工作目录的概念,即每一个报表的独立应用或者集成环境都是一个工作目录。每个工作目录下都有相应的jar文件,报表模板文件,资源管理文件等。当我们在本机安装了FineReport之后,本机安装目录下自带的WebReport文件夹就作为一个独立的本地工作目录来使用。
在实际的应用中,更多的需求是使用远程工作目录。即报表服务器集成部署于实际的系统当中,报表设计者通过设计器连接远程环境,直接对报表模板文件,配置参数等进行编辑保存。特别如果有测试环境,生产环境等多个环境的情况下,FineReport的多工作目录便捷切换便能够给设计者提供极大的便利。
一个系统开发团队难免要多人同时从事报表的开发工作。现在一般的管理方式就是SVN/VSS/CC等做版本管理,但是实现性较差,特别是如果误操作还可能带来文件恢复等较繁琐的工作量。那么借助FineReport的报表运行环境就可以轻松做到多人协同制表,实现如图所示:
多个报表制作人员可通过远程设计器连接到同一个报表运行环境,同时该连接又依据权限控制每个制作人可操作的范围,保证多人工作情况下的数据和文件安全性。
另外为了防止多人同时编辑同一文件,导致文件冲突的情况,FineReport提供了模板加锁和解锁的功能,也就是当A制作员打开一张模板进行编辑的同时,可以对当前模板进行锁定,则其它的制作员就不能同时来编辑这个文件,有效防止了文件编辑冲突。
成品软件工具关键在于功能、性能和上手。前两点后面会具体讲到,而所谓上手就是指经过简单的培训或者自学,很快可以自己使用,这样的好处有:
1:无需花费大量时间和精力熟悉工具;
2:人员流动时能够快速交接,使得业务系统正常运行;
3:复杂编码对用户来说是透明的,用户无需关注后台执行,不会影响系统的稳定性;
具有零编码设计功能的FineReport设计器,使得非编程人员也可以制作报表并且做得更好成为可能。只要是了解企业业务逻辑及简单的数据库知识的用户,都可以通过FineReport设计器,设计出符合自己实际业务需求的报表或表单。零编码的FineReport设计器不但为企业减少了相关人员的费用支出,还大幅度地提高了其报表的制作效率,为企业的快速发展提供强有力的支持。
中国式报表,从总体来讲,指的一些具有复杂性和任意性的报表。这些报表往往是样式不太规则,数据来自多个不同的地方,并且可能需要对数据在报表中进行一些相对复杂的处理。
FineReport提供了异构数据源模型、Excel+绑定数据列的报表设计模型等,使得行列对称,动态数据处理这些传统工具需要靠编码来实现的常见业务需求,仅通过简单的操作就能实现,轻松制作出复杂的中国式报表。
企业想从一个数据表或一个数据库就想选出所有展现所需的数据是不切实际的,中国报表的一个重要特征是分片,与多源相关,但又不完全一样。多源一般都会是分片的,但分片却不一定是多源的。为了解决多源关联分片的问题,许多传统工具引入了子报表的概念。把每个分片做成一个子表,然后再在主表中拼接起来,传统工具理论上是可以通过子表拼接完成,但实际上仍非常烦琐。
FineReport天然支持多数据源(集),同一张报表的数据可同时来自多个数据表,多个不同的数据库,或者多个不同的用户自定义数据视图,然后在报表中可直接相互运算形成最终的报表。
一些传统的报表工具,由于条带状的展现方式的缺陷,数据的纵向展示能力要远远强于横向,就需要专门的模型来制作交叉表。因此传统的工具也就以此将报表的类型划分为分组表,交叉表,主从表,明细表等类型,且两大主要的模型分组表与交叉表各自独立,不能互通,事实上并非所有的报表都遵循这些固定的格式,实际中的报表往往多种特性综合体现。
例如图所示报表有些类似我们在多源分片概念当中提到的分片报表,实际上由于行列对称的原理,我们在报表设计时可以按照需要任意定义扩展的表头样式。下表可以分为相对规则四部分:
销售数据按照类别,地区汇总;
销售数据按照类别,年月日期汇总;
销售数据按照客户,地区汇总;
销售数据按照客户,年月日期汇总。
FineReport采用的是EXCEL+绑定数据列的处理模型,天然支持行列对称,所有纵向的操作都可以在横向得到同样的充分体现。不仅不需要专门设定交叉表模型,还能够支持任意格式不规则的展现样式。 例如将这张表的行列对调一下,可以看到效果如图所示:
常见的原始数据存储的是具体的数值,而统计分析需要按照区间或条件来统计相关数据,这是典型的按段分组,也就是自定义分组:指数据的归类方式并非按照常规的已有数据来分组,而是按照分段分组或者其它不规则的分组。
FineReport提供的自定义分组又可以按照分组方式分为条件分组和公式分组。除了利用自定义分组对数据进行处理之外,在实际的应用中还有一种非常常见的分组方式,是组织递归分组,一般表现形式为企业或事业单位,或集团或部门的组织结构,并且数据的存储方式往往是关系映射表的类型,以ID,PREID形式来标明数据记录的层次关系。
一般的报表工具处理此类的数据都要经过复杂的设置或者表达式编写,FineReprot则提供了专门的组织递归树模型。
通过组织递归树,可以快速自动处理递归型的数据结构,使得组织结构形式的分组实现效率大大提高。仅需通过几个简单的拖拽就可以实现如图所示形式的分组:
现今的企业从数据库中取得数据后,往往都需要提供一些计算方法,对数据进行一些分析处理,例如求和,平均,统计个数等都是基础的数据处理。而同期比,环比,排名,占比,累计这些涉及到同一列数据之间的运算,我们称之为跨行组运算。例如环比,是将本期数据与相邻的上期数据进行比较,而本期数据与上期数据都是来自于同一列数据,这是跨行计算。同比,是将本期数据与上一年同期内每个数据作比较,例如本年5月的销售额比较上年5月的销售额,这两条比较的对象也来自于同一列数据,但又不是相邻,分属于本年和上年两个不同的组,这是跨组计算,具体如图所示:
而由于报表工具制作报表,返回的结果集是动态的,也就是说我们在设计界面中只能够了解到这个区域获取的具体是某个数据集的一列,但是这一列将返回的数据内容和总的数据条数并无法确定。这就使得跨行组运算成为必要的报表实现手段。
绝大多数的报表工具都直接内置了基础的计算功能,例如对某一固定列进行全局的计算汇总,获取组内的小计,全部总计等,但是对于跨行组的运算就很难实现。个别工具能够支持较为简单的跨行运算,但是跨组运算则无法支持。即使是通过SQL或者対整列取出最大值等方法获取到排名,第一名等数据,也是具有很大的局限性。如果逻辑再复杂一些,例如获取2009年5月销售额超过1000万的5个分公司的数据,传统型的工具只能说是束手无策。
上面我们提到了,同比,环比,占比累积分析等数据的运算是我们在报表常见的一些基本分析方法。基于格子界面中数据扩展的特性,即设计界面与返回数据的一对多的关系,FineReport提供了一整套运算体系,用于扩展后数据的定位与相互引用计算,这就是层次坐标,通俗一点定义即动态格间运算。
下图体现了同比,环比,排名运算: