# 介绍

CellReport 是一个为复杂统计报表为核心目标的制作、运行工具。你可以使用数据库、excel文件、api服务、已有报表等为数据源,通过内置的集合函数组织数据,以类excel界面设计最终呈现结果。 foo

CellReport 诞生的初衷是为了解决日常快速制作统计报表的需要。在总结了市面上各种报表软件的前提下,结合集合运算的思想,使得报表制作人员抛弃使用存储过程加工数据的方式,专注于每一类指标的加工,然后在报表设计界面,通过集合函数组织数据,极大得方便了报表的制作和维护。

源码 文档 发行版
Github (opens new window) Github在线文档 (opens new window) github下载 (opens new window)
Gitee (opens new window) Gitee在线文档 (opens new window) gitee下载 (opens new window)

制作统计报表,往往不是一个sql语句能搞定的:

  • 有些报表需要从多个数据库取数;
  • 有些虽然是从一个数据库取数,但数据是分散在数据库的很多表中,需要多个sql语句组织有关数据,然后按照某些关系归并在一起;
  • 有些报表虽然是一个基础表,但对该表中的数据要经过不同的加工,一句sql语句不能将所有的报表要展现的数据组织完毕。比如统计报表中常见的本期、累计、完成比例。在数据库中,基础数据是按照一天天的发生数存在表中,本期为月初到查询日期的累计发生数数,累计为从年初到查询日期的累计发生数,完成比例为累计除上计划数,计划数肯定要在另一个表中单独存放。本期和累计虽然都是一个表,很明显因为条件的不同,一句sql不可能做到同时取出本期和累计。这样的统计报表最少需要3个sql取数才能将报表上所需要的数据全部取出,然后按照特定的条件(比如按机构)将三个数据集的归并,之后才能展现出正确的报表。
  • 传统的报表工具(如水晶为代表的国外报表工具),都是以单一数据集为基础的报表生成工具,如果你需要用到很多sql才能产生出一张统计报表,那么,你必须建临时表,通过写存储过程等办法,将分散在数据库中的数据组织到一个数据库表中,然后通过报表工具展现出来。这样的做法,也能解决中国式报表的生成问题,但报表的编写和维护量将非常大,而且报表逻辑不直观,一旦客户需要更改报表格式和逻辑,将是一件非常痛苦的事情。对于这样的报表工具而言,做报表就是写程序,报表工具沦落为最普通的展现工具。
  • 现在国内有些报表工具也有很多号称支持多数据集,但在做这样的统计报表时,一般都是通过单元格的上下级关系将各个数据集联系起来,无论是在报表生成效率和直观易用方面,都比较差。

提示

在cellReport中,建设性的加入了关于集合的运算功能,可以对各个数据集按照指定的条件分组归并,从而极大的减低开发统计报表的难度。本报表软件的集合的运算包括:并集、交集、以及集合的减法。最常用的就是求集合的并集。

# 它是如何工作的?

报表运行时,会首先以并行方式将所有数据集的数据取到运行环境,然后根据报表设计中预定义好的公式做数据的合并、运算,最终数据以json方式传给最终展现页面,前端页面根据json结果呈现最终展示。

报表运行环境内置了类js语言环境,所有运算都是以该语言为核心。通常制作报表,我们只需要记住10个左右的函数,以及加减乘除,就足够我们制作复杂的统计报表了。

运行环境提供了很多可以拦截接入自定义控制的地方,如:报表运行前的通用检查、控制数据集的数据是否回传前端等。前端展现可以动态插入自定义css、js 。

前端是以vue为基础,通过template-compiler模板编译器,可自由控制echart、数据展现等组件的显示样式。

后端运行的基础环境是net6。内存效率利用极高,仅需300M左右内存。内部大量异步任务和延迟返回等技术,执行效率基本和原生手写加工数据程序的运行效率相当。

我们可以通过实现FunctionUnit接口实现系统没有预定义的函数,也可以用内置语言实现一些简单的函数扩展。

# 为什么不是 ...?

# 以reporting serivice 、水晶报表为代表的国外软件

如果您工作中的报表量不多,展现不复杂(仅仅是简单的清单、分组、交叉),用这些软件完全是可以的。国外这些报表软件,在最终数据呈现方面,基本都是以一个数据集做最终的数据呈现,如果不能是一个数据集,那么就需要用存储过程、表值函数之类的方法做数据的预加工,在涉及指标类型很少的情况下,还可以不费太多时间,但一旦类型多,我们写这些后期不同类型数据合并到一起的工作,将会是重复、无意义、难于维护的冗长sql 。非常不利于统计报表的制作和维护。

# 国内的收费软件

收费极高。在制作统计类报表方面,比国外的软件要好很多。如果不是主要制作统计报表,这些软件就足够满足需要。但对主要工作就是统计报表的程序员来说,仍显复杂。如有些是通过单元格的父子关系组织多数据集的依赖关系,有些是通过可视化方式设置多数据集的关系,都注定了制作效率上差强人意,运行效率极低。再加上Java本身在这种基础软件上运行效率不高、极耗内存,当然如果不在意这些,也是很不错的。

# 国内的免费软件

。。。