充值信息

赞助信息

推荐给好友 上一篇 | 下一篇

多源报表探讨之传统工具



 多源是中国复杂报表的一个基本特征,市场上也有许多报表工具都宣称自己支持多源报表,但大多数厂商并未给多源一个明确释义,那么到底什么才是多源?各家产品支持的多源概念是否一致?又各是如何支持的?这些支持方法是否能够满足我们制作报表的需求?

  从字面上讲,多源是指报表的数据来源有多个而非单个,而一般来说,报表工具都会假定原始数据来自于关系数据库中的数据表(或者以这种逻辑形成组织的数据文件等),那么就是说只要是基于多个数据表运算而成的报表都可以称为多源报表。

  仅按这个解释,多源问题似乎就过于简单了,可以说几乎没有报表工具不支持多源,写个多表的SQL就完了,无非就是JOIN、UNION、嵌套而已了。

  事情当然不会这么简单,多源报表有更深入的要求,而这正是许多宣称支持多源的报表工具难以解决的问题。

  第一,多源的源可能是各种形态的,某个源是一个数据表,另一个源就可能是一个文件,还有的源甚至可能是一段程序,就算简单些都来自数据表,但也未必是同一个数据库,还不见得是同种数据库,比如一半数据来自Oracle,另一半在Sybase中。显然我们写不出一个跨数据库的SQL,更没法把一个数据表和一个文本文件给JOIN一下。

  对于这个问题,某些报表工具提供数据库桥的功能,将多个数据库(或者别的数据源)映射成一个逻辑数据库,把本来由数据库做的运算改由报表工具完成,这样就可以解决不同形态数据源共存的问题。国外的报表工具大都有这个功能。

  第二,是多源中'多'的具体取值。中国复杂报表的'多'源,常常是五六个、七八个甚至十几个,而不是刚刚比一大点的两三个。对于两三个源数据表,用JOIN和UNION还是可以接受的,但如果多到五六个、七八个的时候,SQL的复杂度和更重要的运算效率都不可容忍了(参见"横向分片报表的性能")。

  而且,上述数据库桥的方案不仅不能解决这个问题,还加重了矛盾。这是由于报表工具的运算在数据库外,其运算效率会远低于数据库,导致性能更低下。

  之所以出现上述矛盾,是由于传统工具(在"报表工具的分类"中罗列过)的基本报表单元在设计时只能基于单结果集(无论是数据库算的还是它自己算的)进行,也就只能先将多源转化成单结果集才能做下一步设计。即便如此,也还有相当多的报表由于数据布局格式的复杂,无法如何也不可能在单结果集下完成设计。

  采用了子报表后传统工具可以部分进行多结果集设计,但限定了多结果集之间的关联能力,而且迫使报表分片,带来新的困难,关于这些内容会在以后专门讨论分片报表时论述,这里不去细究,也可参见"新一代报表工具的标准"中的相关内容。

  报表的多源要求,其实是要能够直接基于多个结果集(如SQL的运算结果)上设计报表,不同结果集可以有不同形态的来源,无须事先将它们以某种方法(如数据库桥)转化成单个结果集,而且这些结果集之间还可以在报表中进行关联运算。一句话,多源是指基于多结果集设计的能力。

  从这个意义上讲,所有传统工具其实都不支持多源!



几秒轻松注册 无数朋友结交 同聚商业智能 携手美好前程


 

评分:0

我来说两句