告别拼表时代

--多源分片的解决

中国式报表中,最常见的就是多源分片报表,所谓的多源分片,就是指报表中的单元格横向或者纵向或者横纵同时被分成好几片,每一片格子分别来自不同的物理表,甚至不同的物理库,片与片之间或者有数据联系,或者没有数据联系。

如下图所示,就是几个非常典型的多源分片报表:

目前市面上的报表工具都是只支持单源的,也就是说,一张报表只来自一条sql语句,因此对于上述的多源分片报表,对于他们来说就意味着要写很复杂的sql语句,需要大量的使用join或者union,不仅仅导致了维护困难,运行效率也非常低下。

少量的报表工具虽然支持多数据来源,但是他们在报表服务器端把多个数据集拼成了单个数据集,再利用这单个数据集来生成报表。这种方式仅仅解决了异构数据来源的问题,但是没有从根本上解决多表拼单表造成的效率低下问题,也没有解决单表绘制报表的复杂问题。而且这种方式把本来由数据库完成的join或union操作转嫁到了报表服务器端来完成,效率性能更加低下,因为数据库的数据处理效率始终都是最高的。

下图是传统报表工具的多数据源模型:

 

在这种单数据源模型中,如果一张报表由k个物理表组成,那就意味着k张表的叉乘,其复杂度是O(N的k次方),运行效率之低可想而知。

基于这种现状,润乾报表提出了独特的多数据集模型,一张报表的数据可以来自多个数据集,每个数据集可以来自不同的数据源,而多个数据集直接用来生成报表,不需要拼成单个数据集。其模型如下图所示:

 

在这种多数据源的模型中,多个数据集直接用来生成报表,报表的表达式直接针对数据集来写,多个数据集之间的关系通过表达式来关联,直接避免了叉乘的运算,其运算的复杂度为O(N的平方)或O(N的立方),运算效率大大的提高了。