润乾集算报表实现混合数据源计算

  在报表项目中,报表数据源常常会来自于多种异构数据源。例如:关系型数据库(oracle、db2、mysql),nosql数据库(mongodb),http数据源,hadoop(hive、hdfs),甚至是excel或者文本文件。通常的做法是采用ETL工具,将这些数据源都同步到数据仓库中再进行计算。这种做法存在以下问题:1、配置复杂,难度较大;2、成本较高;3、数据无法实时访问,时间延迟较长;4、数据仓库的建设和管理都比较复杂;5、如果数据量很大效率会很低,而且要不断的ETL各个应用系统的同步数据;6、数据仓库利用的也是传统数据库的技术,负载增大的时候需要用较高的成本进行扩容。

  采用润乾集算报表可以简单直接地实现混合数据源报表,做法是通过内置的集算引擎直接读取各种混合数据源,让数据采用最合适的方式存储,以较小的成本呈现基于混合数据源的实时报表。ETL方式和集算报表方式的结构对比示意图如下:

report5_dataprepare_mixed_1

  下面,通过《州销售人员销售报表》来看一下具体的实现步骤。报表如下图:

report5_dataprepare_mixed_2

  报表的销售数据来自于销售系统的mongodb数据库,销售员的信息则来自人力资源系统的db2数据库。采用集算报表的混合数据源方式,报表数据源不需要定期同步,不会有时间上的延迟。

  第一步,要在集算器设计器中编写脚本,并保存为statesales.dfx如下:

  A
1 >hrdb=connect(“db22″)
2 =hrdb.query(“select * from employee where state=?”,state)
3 =mongodb(“mongo://localhost:27017/test?user=test&password=test”)
4 =A3.find(“orders”,,”{_id:0}”).fetch()
5 =A4.switch@i(SELLERID,A2:EID)
6 =A5.new(ORDERID,CLIENT,SELLERID.NAME:SELLERNAME,AMOUNT,ORDERDATE)
7 >hrdb.close()
8 >A3.close()
9 result A6

  A1:连接预先配置好的db2数据源。

  A2:执行SQL,从表employee取数,参数state=”California”。

  A3、A4:从销售系统的mongodb读取collection orders。

  A5:使用集算器的switch函数,将A4中的sellerid字段切换成A2中的记录,关联条件为sellerid=eid。@i选项是指如果找不到对应的记录,则删除该行。

  A6:生成一个新的序表,得到需要的字段。

  A7、A8:关闭数据库连接。

  A9:返回给集算报表。

  第二,在报表设计器中定义参数state,配置集算数据集:

report5_dataprepare_mixed_3

  第三,设计报表如下:

report5_dataprepare_mixed_4

  输入参数计算后,即可得到前面希望的报表。报表上部的查询界面是集算报表自动提供的“参数模板”功能。参数模板和db2、mongodb数据源配置的具体做法参见教程和其他文档,这里不再赘述。

  需要说明的是,如果数据源类型发生了变化,只需进行小幅改动即可使报表生效。比如新上线的销售系统采用了oracle数据库,只要修改statesales.dfx的A1改为: >hrdb=connect(“ora”) 。

  同时复制oracle jdbc驱动、配置oracle数据库的连接参数即可。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值