多数据源动态关联报表的制作(birt为例)
使用Jasper或BIRT等报表工具时,常会碰到一些很规的统计,用报表工具本身或SQL都难以处理,比方与主表相关的子表分布在多个数据库中,报表要展现这些数据源动态关联的结果。集算器具有结构化强计算引擎,集成简单,能够协助报表工具方便地实现此类需求。以下通过一个样例来说明多数据源动态关联的实现过程。
主表org在数据源Master中,org里每条记录相应的子表在不同的数据源中,比方org.org_id=”ORG_S”时。这条记录相应的子表是数据源S_odaURL的User表,org.org_id=”ORG_T”时,这条记录相应的子表是数据源T_odaURL中的User表。子表不止两个,名字都是User。须要和主表动态关联再呈如今报表中。逻辑上的关系例如以下:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
集算器代码例如以下:
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 (?)来调用。
多数据源动态关联报表的制作(birt为例)的更多相关文章
- 通过SSRS创建动态分组报表的方法!
SSRS是微软专门的报表开发工具,对于一般高级用户(非专业开发人员)可以通过SQL Server Report Builder创建,可以把制作好的发布在单独部署的SQL Server Reportin ...
- .NET重构(七):VS报表的制作
导读:机房做到最后阶段,就是报表的制作了.想到第一次,是借助外部控件进行实现的,这次采用VS进行编写,在这个软件中,有自带的报表编辑工具,更加的方便和简洁,现在就对这一块的学习,进行总结. 一.报表制 ...
- 关于devexpress报表XtraReport,动态修改报表样式(.repx格式),动态添加数据并使用的理解
一.基本概念: XtraReports 中的每个报表都由 XtraRepot 类的一个实例表示,或者由该类的子类来表示(这种情况更常见). 因此,每个报表都作为带区的容器使用,而每个带区中都包含报表控 ...
- 【案例分享】使用ActiveReports报表工具,在.NET MVC模式下动态创建报表
提起报表,大家会觉得即熟悉又陌生,好像常常在工作中使用,又似乎无法准确描述报表.今天我们来一起了解一下什么是报表,报表的结构.构成元素,以及为什么需要报表. 什么是报表 简单的说:报表就是通过表格.图 ...
- Spring3 整合MyBatis3 配置多数据源 动态选择SqlSessionFactory
一.摘要 上两篇文章分别介绍了Spring3.3 整合 Hibernate3.MyBatis3.2 配置多数据源/动态切换数据源 方法 和 Spring3 整合Hibernate3.5 动态切换Ses ...
- Spring3.3 整合 Hibernate3、MyBatis3.2 配置多数据源/动态切换数据源 方法
一.开篇 这里整合分别采用了Hibernate和MyBatis两大持久层框架,Hibernate主要完成增删改功能和一些单一的对象查询功能,MyBatis主要负责查询功能.所以在出来数据库方言的时候基 ...
- 基于spring多数据源动态调用及其事务处理
需求: 有些时候,我们需要连接多个数据库,但是,在方法调用前并不知道到底是调用哪个.即同时保持多个数据库的连接,在方法中根据传入的参数来确定. 下图的单数据源的调用和多数据源动态调用的流程,可以看出在 ...
- Jmeter压测基础(二)——Badboy功能、Jmeter参数化、检查点、集合点、动态关联、图形监控
Badboy 以下稍微介绍一下badboy的部分功能: 1.Record;play(badboy打开后默认是recording状态) 2.Assertion(检查点/断言) 3.Variable: t ...
- 如何制作微信动态表情包 GIF制作工具哪个好
表情包已经成为我们生活聊天中必不可少的一部分,但是如何制作微信动态表情包呢?自己制作的表情包更加独有个性,今天小编带大家看一波原创表情包的制作方法吧! 使用工具:电脑 操作方法: 1.首先在手机上也是 ...
随机推荐
- (寒假集训)Mooo Moo (完全背包)
Mooo Moo 时间限制: 1 Sec 内存限制: 64 MB提交: 5 解决: 4[提交][状态][讨论版] 题目描述 Farmer John has completely forgotten ...
- androd 获得wifi列表
AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xm ...
- 利用DFS求联通块个数
/*572 - Oil Deposits ---DFS求联通块个数:从每个@出发遍历它周围的@.每次访问一个格子就给它一个联通编号,在访问之前,先检查他是否 ---已有编号,从而避免了一个格子重复访问 ...
- hdu1008(c++)
分清上升停留下降一步步来就是了 #include<iostream>#include<vector>using namespace std;int main(){ int N, ...
- 64位Ubuntu 14.04 安装wps
因为wps还没有提供64位版本号的wps,13.10開始又取消了ia32-libs的支持,经过自己測试,能够使用下面命令完毕安装 sudo dpkg -i 包名 sudo apt-get -f ins ...
- django静态html中做动态变化
在搭建网站中经常有筛选分类的需求 在django中为了简便,我们经常将某些相同部分的内容取出来单独存放形成一个base模板,其他的template继承这个base就可以使用其中的内容 但是这些相同的部 ...
- Window mode
D3D window mode:Upper left (0,0)是左上角 OGL window mode:Lower left(0,0)是左下角 nvn API nvn::Device::SetWin ...
- this的四种绑定规则总结
一.默认绑定 1.全局环境中,this默认绑定到window 2.函数独立调用时,this默认绑定到window console.log(this === window);//true functio ...
- checkStyle总结
参考网站:https://code.google.com/p/testcq/wiki/CheckStyleRules 1.Variable access definition in wrong ord ...
- Java高级特性—反射和动态代理
1).反射 通过反射的方式可以获取class对象中的属性.方法.构造函数等,一下是实例: 2).动态代理 使用场景: 在之前的代码调用阶段,我们用action调用service的方法实现业务即可. 由 ...