这是很多年前的事情了,从腾讯入职到离职,我用了三周,理由很简单,做大数据的同事看不起做报表的,当然,我是做报表的那个。
做大数据的,就一定能做好报表吗?
报表是企业IT数据建设必不可少的一环,小到一张出入单,大到公司的KPI经营看板,都是重要的数据资料。
报表怎么开发?要么用Excel处理,要么IT写PHP、Python来开发,要么用现成的报表工具。
本文就从技术角度来对比下3种常用报表开发模式,分别是Excel报表、代码开发、报表工具。
通常一个报表制作的流程:业务需求—>报表原型设计—>需求确认—>数据整理校对—>报表开发—>需求变更与维护。
这其中和报表开发模式关联最大的就是报表原型设计、报表开发以及需求变更维护,下面就从这三个角度来对比梳理。
原型设计多为产品需求中所用,这里借用下概念。如果把企业的报表也当作一个产品来看的话,那一个个提上来的报表需求实际上也可当产品需求来看,事实上现在有些公司有数据产品经理一岗,数据报表设计的工作也在他们的范畴。
为什么要做报表原型设计,举例一个场景:比如以前我做一个填报页,人力部门提过来的,用来录入员工信息,当时只是做了一个简单的页面,大概填入10个信息字段,但是展现的格式修改了3、4次。
到后面需求不断变更,先是不断的增加填报的信息内容;后面发现发现数据端那边更改了数据结构导致数据错乱、填不进去;
然后又要开通信息修改的权限;再到后面需要做工资跳转页、增加多sheet填报。前前后后围绕这张报表修改了数十次需求。这其中有一部分原因就是没有做好需求的确认以及报表需求的原型设计。
工具怎么辅助原型设计呢?
Excel做报表开发没有原型设计的说法,大部分人做报表就是先将数据从数据库中导出来,对数据做个大致的预览,然后思考做成什么样的报表样式,然后再Excel中画就是了。Excel由于数据也同样存储在表中,所以操作简单,所见即所得。
用代码开发报表,就比较麻烦了,比如纯java代码开发报表,没有前端界面,报表做成什么样都仅是存在于开发人员脑海中,至于格式什么的,也需要手动代码调。最大的问题是报表要适配不同分辨率的电脑、手机,所以用代码开发还是比较麻烦的。
报表工具开发报表,比如FineReport他是有报表设计器的,类似Excel设计界面,可以直接在设计器中设计报表样式。或者初期沟通需求的时候也可以用Excel简单设计下样式。
但是对于一些复杂的需求,比如移动端报表、多sheet页报表、可视化大屏类报表,Excel不能满足这些报表需求,原型自然也设计不出,所以能够直接画出原型的报表工具更适合。
Excel在本地做报表可以,人人会用,上手没难度,但用Excel性能上依靠你的电脑,数据量大容易崩溃,所以从数据库导数据需得悠着点。
企业级报表Excel我是觉得没法做的,你要对接数据库,还有做报表维护,还要收集数据,散乱的Excel表格会处理到崩溃。最烦的是如果数据发生变更,那牵一发动全身。所以Excel的表格作用有实时性,基本隔一段时间数据就不对了。
用代码开发报表也能很快的解决点对点的需求,但是作为长期报表开发工作,基本就是堆人力写代码。还有一种方式是自研报表工具,比如java有一些对接Excel的报表功能库,也有可视化图表库,但是一些难题如打印报表、复杂的数据计算、复杂格式的报表展示依然做不好,个人觉得自研报表工具坑很多,需要投入很大人力,劳心劳力!
报表工具相对成熟稳定,毕竟是花钱解决以上不能解决的问题。FineReport类似excel的设计方式是这个工具比较突出的优点(像我们做报表的,其实很多都不是真的程序员,做开发有点太难),然后只要会SQL和一些简单的JS,配合它各种报表设计模式,基本能实现各种复杂的报表样式。
尤其数据字典、实际值和显示值等的设计更是切入快速开发的要害,这些放在别的语言和体系下往往要大量代码才能实现,在finereport里反正就是有现成的功能。
前面好多次提到报表需求更改,做报表最烦听到的就是报表要修改、要调整、不好用之类的话语。改报表也是个头疼的问题。
Excel改报表需求需要找到先更新源数据,导出来然后复制再更改,基本逢改就要重做一次。
FineReport更改报表需求主要是对报表模板运维。技术上能节省时间,比如数据更新,因为是直接连数据源,可以自定义设置更新T+1或者实时,这个主要看数据库/数据仓库的支撑。
然后维护这块,FineReport作为报表系统是部署到服务器上的,可以让不同人员在远程报表服务器上对模板进行设计、修改、维护操作,简化模板的运维难度。
另外,还有报表体系的使用和运维。时间越久就会有越来越多的报表,需要依据业务人员的使用数据对报表进行迭代与优化,及时淘汰弃用的报表,对常用的模板进行展现样式、交互效果、性能层面的调优,这一块也是报表工具的优势。
最后,总结一下,三种报表开发模式:Excel报表、代码开发、报表工具的优劣势。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。