博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
多数据源动态关联报表的制作(birt为例)
阅读量:6929 次
发布时间:2019-06-27

本文共 1409 字,大约阅读时间需要 4 分钟。

       使用Jasper或BIRT等报表工具时,常会碰到一些很规的统计,用报表工具本身或SQL都难以处理,比方与主表相关的子表分布在多个数据库中,报表要展现这些数据源动态关联的结果。集算器具有结构化强计算引擎,集成简单,能够协助报表工具方便地实现此类需求。以下通过一个样例来说明多数据源动态关联的实现过程。

      主表org在数据源Master中,org里每条记录相应的子表在不同的数据源中,比方org.org_id=”ORG_S”时。这条记录相应的子表是数据源S_odaURL的User表,org.org_id=”ORG_T”时,这条记录相应的子表是数据源T_odaURL中的User表。子表不止两个,名字都是User。须要和主表动态关联再呈如今报表中。逻辑上的关系例如以下:

        集算器代码例如以下:

        A1=Master.query("select * from org where org_id like '"+arg1+"%' ")

        运行SQL。从数据源Master的org表取数据。

arg1是来自报表的參数,用来过滤数据,假如arg1=”ORG”则A1的计算结果例如以下:

        A2: for A1

        依次循环A1中的记录。每次动态关联一个子表,并将关联结果合并在B2中。值得注意的是集算器用自然缩进来表示循环语句的作用范围,即B2-B7。循环体中可用A2来引用循环变量,可用#A2来引用循环计数。

        B2=right(A2.org_id,1)+"_odaURL"
        依据当前记录的org_id字段计算出相应子表的数据源名。

第一次循环时。B2的计算结果为” S_odaURL”。

        B3=connect(B2)
        依据名字连接到数据源。

注意。A1中的数据源Master已配置为自己主动连接,能够直接使用,B3中的数据源须要使用函数connect手动连接。

        B4=B3.query("select * from user where org=?",A2.org_id)
        查询数据源B3,按条件取出user表中的数据。

        B5=B4.derive(A2.org_id:org_id,A2.org_manager:manager,A2.org_title:title)
        在子表B4中新增三列,数据来自主表。重命名为org_id、manager、title。第一次循环时。B5计算结果例如以下:

        B6=B1=B1|B5

        将B5的计算结果合并到B1,运算符”|”等价于函数union。

循环结束后B1会存储报表须要的完整数据。例如以下:

        B7=B3.close()

        关闭数据源连接。

        A8: result B1
        将B1返回给报表工具。

集算器对外提供JDBC接口,报表工具会将集算器识别为普通数据库。集成方案请參考相关文档。

 
        对于熟练的程序猿,还能够使用集算器的长语句来避免循环语句,使代码更为简洁:

        接下来以BIRT为例设计一张简单的分组表,模板例如以下:

        须要定义报表參数pVar,用来相应集算器中的參数。

预览后能够看到报表结果:

        报表调用集算器的方法和调用存储过程一样,比方将本脚本保存为dynamicDatasource.dfx。则在BIRT的存储过程设计器中能够用call dynamicDatasource (?)来调用。

转载于:https://www.cnblogs.com/yutingliuyl/p/7260102.html

你可能感兴趣的文章
Linux Nano命令
查看>>
线程高级应用-心得4-java5线程并发库介绍,及新技术案例分析
查看>>
linux 弹出光驱失败
查看>>
grep用法详解:grep与正则表达式【转】
查看>>
Python中执行系统命令常见的几种方法--转载
查看>>
spring整合springmvc
查看>>
【译】Kafka学习之路
查看>>
(转) 深度强化学习综述:从AlphaGo背后的力量到学习资源分享(附论文)
查看>>
有关HTTP的粗读
查看>>
在线支付系统功能
查看>>
如果有个库函数接受的是无参数的回调函数怎么办?
查看>>
Asp.Net Core Authentication Middleware And Generate Token
查看>>
[C++]简单的udp通信
查看>>
Recovery模式【转】
查看>>
SQL数据分析概览——Hive、Impala、Spark SQL、Drill、HAWQ 以及Presto+druid
查看>>
mongodb备份与恢复
查看>>
iOS 11确认将完全停止支持 32 位应用
查看>>
hdu 4857 逃生 (拓扑排序+保证最小在前面)
查看>>
shell 编程笔记
查看>>
1215 迷宫
查看>>