首页 > 代码库 > 报表应用结构优化之数据分库存储

报表应用结构优化之数据分库存储

        报表项目中,可能会出现报表源数据来自于不同数据库的情况。

这是由于同一张报表可能会从多个业务系统取数据。比如:员工信息从人力资源系统中取出,销售数据从销售系统中取出。另一种可能是,同一应用系统的数据库负载太大,不得已分成多个数据库的情况。比如:销售系统数据分成当前库和历史库。

        报表工具须要连接的可能是相同类型的数据库。比方都是oracle或者db2;也可能是不同类型的数据库。

        报表应用中,数据分库存储的解决的方法有:1、建设专门的数据仓库。2、利用跨库訪问的技术。

        专门数据仓库的建设和管理比較复杂。假设数据量非常大效率会非常低。并且要不断的ETL去各个应用系统同步数据。并且数据仓库利用的也是传统数据库的技术,假设负载较大的时候,也面临分库的问题。

数据仓库方式结构示意图例如以下:

技术分享

        假设用跨库訪问的技术,比如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。配置集算数据集:

技术分享

        第四,设计报表例如以下:

技术分享

        输入參数计算后。就可以得到前面希望的报表。

报表上部的查询button是集算报表提供的“參数模板”功能,详细做法參见教程。这里不再赘述。


报表应用结构优化之数据分库存储