![]() |
|
首页 | 联系我们 | 网站地图 | English | |||
| 技术支持热线:+86 21 68531770 68531771 | 试用下载 | ||||||||
| 产品中心 | 报表技术漫谈 | OLAP技术漫谈 | 下载与服务 | 市场与合作 | 新闻中心 | 关于我们 |
| 多数据源集成与控制 | |||
|
实际应用中,单个数据源往往不能满足报表设计需求,这就需要报表具备处理多个数据源数据的能力。看这样一个简单的例子:![]() 报表统计的是各个银行贷款和汇票交易情况,按照不同分类方式对不同业务交易总额进行汇总统计。 数据库表结构为:包含各银行名称及编码的银行字典表;此外流动资金贷款、中长期贷款、政策性贷款、银行承兑汇票、商业承兑汇票各有一张对应的业务数据表,表中主要可用字段包括:单笔交易金额、交易日期、银行编码。 如果使用单一数据源来获取该报表所需数据的话,大家可以尝试一下,看看这个SQL的复杂性如何。注意几个可能导致复杂的地方:第一,不是每个银行都有对应的所有业务数据;第二,每一种业务都是一个是独立的表;第三,同一个银行同一业务具有多比数据,需要做分组合计。 而如果使用Max@X Analyser多数据源支持,这个过程将变的非常简单,我们可以创建6个简单的数据源,然后在报表中进行数据源多片同步处理,流程如下: 1、创建一个数据源,从银行字典表中返回所有银行名称及编码; 2、创建五个数据源,分别从流动资金贷款、中长期贷款、政策性贷款、银行承兑汇票、商业承兑汇票5个业 务数据表中获取按银行编码进行分组合计的交易数据信息以及对应的银行编码; 3、在Max@X Analyser报表设计页面中,分多列,每列指定不同的数据源,然后设定后5个数据源与第一列 银行字典数据源,通过银行编码实现关联。 上例是一个简单的例子,主要用于帮助读者理解报表对多数据源处理能力的重要性。对于设计者来说,需要考虑的不仅仅是怎么把报表做出来,还有如何更快更简单的做出来。前者是工作效率的保证,而后者将对工作质量和后期的维护带来直接帮助。 Max@X Analyser对于多数据源的处理支持主要包含如下几个方面: 1、关联整合 - 虚拟数据源 对多个数据源进行数据关联整合的话,手段之一是采用虚拟数据源。 所谓虚拟数据源,是指在Max@X Analyser服务器从数据库获得实际多个数据源的数据后,在Max@X Analyser中以SQL方式,对多个数据源进行关联整合。此过程的主要表现形式为:在数据源目录中,建立一个类型为虚拟数据源的数据源,然后对该数据源以标准SQL方式进行数据运算编辑。最终创建结果是,该数据源将多个数据源数据进行关联整合运算后,返回一个整合后的数据集合。 虚拟数据源是一种标准的多数据源整合方法,它的主要特征是在Max@X Analyser服务器获取数据库数据之后、进行报表实际输出之前进行的。在虚拟数据源执行过程中,不进行中间数据的逻辑判断。同样的虚拟数据源可以被多个不同的报表所使用。 如果需要根据报表运算中间结果进行逻辑判断,而后根据判断条件有选择地进行数据源整合,则需要用到“内置SQL引擎”功能。 2、关联整合 - 内置SQL引擎 内置SQL引擎在上一篇《数据微引擎与动态数据库指令》中的“数据微引擎”段落中已经做过描述:数据微引擎技术(即内置SQL引擎技术),是指在报表获得实际数据之后,根据报表中某些变量或中间运算结果,动态地使用符合SQL 92标准的SQL语句,对当前已获得的数据进行关联、过滤等运算。 数据微引擎技术最为实用化的地方,在于其SQL语句是可以根据报表创建过程中产生的中间运算结果动态创建的。 可以如此理解:内置SQL引擎是虚拟数据源的一种局部变量化定义延伸,它的实现机制与虚拟数据源类似,不同之处在于加强了运算过程中,根据中间逻辑结果进行动态控制的能力。并且,它的执行是在报表创建过程中执行的,是一种当前报表局部的、私有的数据处理定义。 3、跨源四则与逻辑运算 跨源运算理解上更为简单,它是指:允许在报表设计中,直接同时引用多个数据源数据进行四则运算。比如本篇开始部分的报表中,如果在第二列加上一个合计,则需要同时对多个数据源的当前行数据进行跨源运算。 这种应用场景非常多,有时候会遇到更为复杂一些的情况。比如,在计算报表历史同期比的时候,虽然同样是跨源运算,运算的数据记录行数可能不是同一行,这就需要额外使用数据源指针对特定数据源进行当前记录行跳转,而后再进行常规四则运算。 4、多源多片同步 如本篇开始部分案例所示,当多个数据源的返回数据,在排列顺序上不是完全一一对应的时候,就需要有一个整体的参照座标,所有数据源以座标为准,进行数据展现。 在开始的案例中,我们可以将银行字典数据源设定为座标参照,其他业务数据源以此为标准循环填入数据。如果在其他数据源中没有与参照数据源匹配的数据,可以置空或者置零。 实现方法同样简单,一句“被同步数据源.Filter(同步参照字段名称=当前行座标字段名称)”即可。 关于报表的数据获取与处理,本文先介绍到这里。下一篇关于数据的图形化展现更为精彩,请浏览《图形报表漫谈》。 |
|||||||||||||||||||||||||||||||||||||||
| |
首页 | 联系我们 | 网站地图 | ||