报表项目中,可能会出现报表源数据来自于不同数据库的情况。
这是由于同一张报表可能会从多个业务系统取数据。比如:员工信息从人力资源系统中取出,销售数据从销售系统中取出。另一种可能是,同一应用系统的数据库负载太大,不得已分成多个数据库的情况。比如:销售系统数据分成当前库和历史库。
报表工具须要连接的可能是相同类型的数据库。比方都是oracle或者db2;也可能是不同类型的数据库。
报表应用中,数据分库存储的解决的方法有:1、建设专门的数据仓库。2、利用跨库訪问的技术。
专门数据仓库的建设和管理比較复杂。假设数据量非常大效率会非常低。并且要不断的ETL去各个应用系统同步数据。并且数据仓库利用的也是传统数据库的技术,假设负载较大的时候,也面临分库的问题。
数据仓库方式结构示意图例如以下:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjM4ODQ5Nw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >
假设用跨库訪问的技术,比如Oracle的透明网关、DB2的联合查询等。也有不少局限。比較共性的问题是:1、配置起来比較麻烦,并且往往须要数据库写权限。
2、要为跨库的表配置别名。3、不同类型的数据库数据类型不一致的情况。比較难处理。4、sql语句受到限制,比較难实现复杂的计算。
这样的方式的结构示意图例如以下:
这样的情况能够考虑使用润乾集算报表,其内置的集算引擎能够连接多个数据库,取数之后统一进行数据计算,能够较好的解决报表数据来自于不同数据库的问题。集算报表解决分库存储问题的结构示意图例如以下:
这里,通过“销售人员销售报表”,看一下集算报表解决数据分库存储问题的过程。
报表例如以下图:
报表中的销售订单数据来自于销售系统的db2数据库,员工信息来自于人力资源系统的db2数据库。使用润乾集算报表开发这张报表的步骤例如以下:
首先在集算报表和集算器中分别配置两个数据源,销售系统数据库“db2sales”,人力资源数据库“db2HR”。
第二,在集算器中定义网格參数state,并编写计算脚本:
A1:连接预先配置好的db2sales数据源。
A2:连接预先配置好的db2HR数据源。
A3、A4:分别从两个数据源中读取sales序表和employee序表。
A5:使用集算器的对象引用机制。将sales序表和employee序表通过sellerid=eid关联。
A6:依照參数state="California"过滤序表。
A7:生成一个新的序表。得到须要的字段。
A8、9:关闭数据库连接。
A10:返回给集算报表。
第三。在报表设计器中定义參数argstate。配置集算数据集:
第四,设计报表例如以下:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjM4ODQ5Nw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >
输入參数计算后。就可以得到前面希望的报表。
报表上部的查询button是集算报表提供的“參数模板”功能,详细做法參见教程。这里不再赘述。