没完没了的报表怎么破?

报表的业务稳定性天生很差,业务开展过程中会催生出许多新的查询统计需求,这就会造成了没完没了的报表,这也是许多行业软件开发商头疼的事情。投入很多人力依然搞得灰头土脸,也花了不少钱买了报表工具和 BI 软件,但还是不能及时应对客户的需求而遭到抱怨。这是为什么呢?

因为没用对工具呗。

BI 软件就不用说了,它能算的东西很规整,做得再花哨,也还是只能做个分组统计而已,离报表需求差得太远。而企业级通用 BI 更是样子货,基本上是白花钱(参见 怎样评价国产报表工具和 BI 软件 )。

国产报表工具功能好很多,确实能提高报表制作的效率,但目前大多数报表工具只能解决呈现环节的问题,而目前报表开发的工作量大头已经转移到数据准备环节,也就是从数据源(不一定只有关系数据库)取出数据还要经过一系列运算才能送去呈现。报表工具在呈现环节通常也能做一些运算,但不会太复杂,一般都不能支持过程式的计算,也不可能做数据量太大的运算。

如果你的报表工具不支持数据准备,那么这部分工作就只能硬编码了,效率低做得慢就是很正常的事了。

硬编码的技术目前主要是 SQL 和 Java,使用这两者都很难获得低成本高效率。

简单情况用 SQL 还是比较方便的,但总有些报表涉及的计算过程比较复杂。这里也有个二八原则,二成复杂报表会占用八成的开发时间。用 SQL 或者存储过程写出上百行 N 层嵌套的代码,开发调试费劲不说,过两月自己都看不懂。现代应用的数据源越来越复杂,有时就没有关系数据库(或者有好几个要混合运算),想用受累用 SQL 都不行。

只能写 Java。Java 倒是啥都能做,但也啥都麻烦。SQL 写个 10 几行的,用 Java 恨不得写出几百行,这效率怎么可能提高?

退一步讲,就算真有高手能快速写出复杂 SQL 或 Java 代码,但这种人毕竟很贵不是吗?还是降不了成本。

而且,一旦动用了存储过程或者 Java 程序,报表模块就和应用程序耦合太紧,还需要对应用程序架构还比较了解的开发人员才能做好报表了。结果,业务系统上线之后,开发人员仍然要继续坚守做报表,很难把这项工作转交给较低成本的报表开发团队。

不用报表工具,那会累死。用了不支持数据准备功能的报表工具,还是会累个半死。

如果用了能支持数据准备的报表工具,这些事就不是事了。

报表开发工作可以全面工具化,不再费劲写复杂的 SQL 和高深的 Java 代码,也就不需要太强的技术人员,人工成本降下来,开发效率还能提上去。

然后,调整应用结构,把报表模块从业务系统中解耦出来,报表模块仅仅共享业务系统的数据源。这样就可以建设专门的报表开发团队了,开发报表只需要理解业务逻辑和数据结构,而不必面对业务系统的复杂技术环境。甚至还可能把持续报表开发工作移交给客户方的运维人员,既降低开发商的成本,又提高对客户的响应速度。

没完没了的报表,消灭是消灭不了的,但低成本高效率的应对办法还是有的。