记录一下项目中web报表工具选型过程

357 阅读7分钟

年初的时候,公司接了一个web项目,项目规模中等,开发周期为五个月,要求跨平台,基于现代浏览器,能兼容各种主流数据库,可以在容器中部署等。

为了满足上述平台要求,我们使用Java作为后台服务,前端使用HTML5+TypeScript+Vue3技术栈,采用前后端分离机制,底层平台使用SpringBoot,项目部署于Docker当中。

在这个项目中,大部分功能都是普通的针对数据库的CRUD操作,实现起来没有什么难度,唯一比较麻烦的就是要针对数据库中的数据产生大量的报表,统计了一下,各种样式的报表大概有将近200多张,而且生成的报表都要求导出Excel或直接打印输出。

这种报表需求我们只能考虑使用报表工具来完成,一开始我们想找一款免费的报表实现,项目组评估了老外做的BIRT以及JasperReport,发现他们有一个共同特征,那就是基于所谓的Band实现,只能做一些简单的列表类型报表,连常见的分组实现起来都很费劲,而且导出的Excel也是一言难尽,且都不支持直接打印输出,只能果断放弃。

项目中的报表样式千奇百怪,国外的报表工具无能为力,只能选择国产的中式报表工具,国产的报表基本都是收费的,所以接下来我们需要选择一款价格便宜的报表工具。

网上一搜索,排在最前面的就是FineReport,看了他们的Demo,效果确实不错,基本都能涵盖我们需要的报表样式,性能也不错,几十万的数据也能秒级呈现,导出Excel和打印功能都挺好,基本都满足了我们的需求,联系了他们的销售,一问价格远超我们的预算,一套成交价最低也得大几万,对于我们来实在承受不了,没办法只能在网上接着找。

搜索中式报表关键字(搜索引擎用的是Bing)又看到了润乾报表,这次我们先问的价格,最低成交价比FineReport便宜,找技术人员试用了一下,功能与FineReport类似,但IDE做的不好,比较粗糙,性能也不好,功能方面也要差一些,总的来说和FineReport比差距比较大,看来便宜是有原因的,果断放弃。

搜索中式报表关键字过程中,还看到一款开源的中式报表工具UReport,但没有在线DEMO可以看,报着侥幸的心态,我们安排技术人员安装到本地试用了一下,UReport的设计器基于浏览器,打开浏览器就可以设计维护报表,这点比润乾报表FineReport,它们只提供了基于Java的客户端设计器,不能在浏览器中设计报表。

UReport虽然设计器基于浏览器,但功能实现的很一般,中式报表那套理论也没有完全实现,性能也不行,数据量超过十万UReport加载起来就很费劲了,打印和导出Excel还行,能满足需求。但由于UReport的核心功能不行,而且这个开源项目也已经五年没有维护了,所以我们也只能放弃。

在评估UReport过程中,看到它的源码主页介绍了它的商业版BaskReport ,看来在国内做开源还是很困难的,报着试试看的想法,我们体验了一下BaskReport

BaskReport的官网做的还是很完善的,官方提供了完善的文档和视频教程,还有在线DEMO可以体验。我们的团队看了下BaskReport的在线DEMO,里面例子和FineReport官方提供的例子有点类似,对比一下,我们需要的报表样式,也基本上满足;和UReport一样,BaskReport的报表设计器也是基于浏览器,看来还真是一波人做的。BaskReport的设计器相比UReport要完善的多,功能也比较强大,支持各种文件导出,其中就包含Excel,打印也做的很好,能满足我们的需求。

BaskReport产品价格直接在其官网上就可以看到,五年授权一万二,十年也才两万一,我们完全能够承受。电话咨询了一下BaskReport官方的销售,销售说官网上标注的就是实价,这点比较好,省得采购讨价还价了,价格OK,接下来就是产品力了,如果能满足就它了。

为了能更好的评测BaskReport,我们团队小伙伴在本地安装了它,和润乾报表FineReport不一样的是,BaskReport的安装更像是开源软件的玩法,官方把产品的核心包发到了Maven,用户可以直接使用Maven依赖BaskReport,官方还提供了BaskReport的SpringBoot项目模版,针对SpringBoot2,3版本的不同,分别提供了SpringBoot2和SpringBoot3两种类型的项目模版,我们项目组使用是SpringBoot3的项目模版。

本地安装完成后,我们对BaskReport有了更深的了解。

BaskReport是basksoft.com公司的一款软件,这家公司除了有BaskReport外,还有一款ETL数据处理工具BaskAdapt。

从外观来看,这个BaskAdapt基本就是山寨了国外的Tableau Prep的外观和功能,复刻率90%以上,真的很像。

BaskReport和BaskAdapt都运行在他们公司的BaskServer平台之上,这个平台提供了文件管理、权限管理、数据源管理、Job管理等功能,值得注意的是BaskServer平台还是一款支持多租户的平台。下面这张图是这个平台的主页:

图片1.png

在数据源这个节点,它们统一了数据源定义方式,在BaskServer层面定义的数据源可以直接在BaskReport和BaskAdapt中直接使用;BaskServer平台数据源除了可以定义常见的连接数据库的数据源,还能定义连接一些Rest API的数据源,而且还支持Rest API的各种认证。最后这里甚至还允许将BaskAdapt处理好的数据输出作为数据源给其它的BaskReport或BaskAdapt使用,相当不错。

下图是BaskReport的网页版设计器:

图片2.png

回到BaskReport产品本身,除了基于浏览器的报表设计器外,BaskReport还完整实现了中式报表那套单元格迭代生成报表的理论,无论何种类型的报表都可以通过配置父子格轻松实现,相当给力。最后是BaskReport的性能,我们最高测试了100万数据、20列层级分组,在16G内存、13代I5 CUP的笔记本中,计算完成约9秒;还是这些数据改成交叉报表,不到1秒就计算完成,这性能把我们惊艳到了;和我们曾经测过性能最好的FineReport比较了一下,10万以上的数据量,无论什么样式的报表,BaskReport都比FineReport要快,数据量越大,快的越明显,100万数据量的情况下,竟然比FineReport快了一倍以上。

评测完BaskReport后,基本就定义来用它了,这年头既便宜又好用的东西实在不多,为了防止后续BaskReport可能存在的涨价,我们直接找他们销售买了五年的授权(先买五年,五年后要甲方自己采购),因为BaskAdapt的五年授权只比BaskReport贵1千块,而且买BaskAdapt送BaskReport,所以我们就直接买了BaskAdapt,说不定我们的项目中可能需要用ELT数据处理工具,有总比没有好,更何况基本没有增加我们的采购成本。

现如今我们的项目已经完成,200多张各种类型变态的报表都顺利实现,BaskReport在使用过程中也遇到了不少BUG,好在厂家支持比较给力,基本都是当天解决,最晚也就第二天就解决了;这其中就包括在我们的强烈要求下,厂家用一天时间做了一个基于NPM的TS+VUE3组件,以方便我们在前端页面的合适位置插入报表,我觉得我们也对BaskReport的完善做出来不小的贡献,厂家应该给我们发几个免费的授权。

以上就是我们在一个不大的项目中选型报表的过程,仅供大家参考。