多数据源动态关联报表的制作(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.首先在手机上也是 ...
随机推荐
- [BZOJ1854][SCOI2010]游戏 二分图最大匹
1854: [Scoi2010]游戏 Time Limit: 5 Sec Memory Limit: 162 MBSubmit: 5316 Solved: 2128[Submit][Status] ...
- Codeforces 813E Army Creation(主席树)
题目链接 Educational Codeforces Round 22 Problem E 题意 给定一个序列,$q$次查询,询问从$l$到$r$中出现过的数字的出现次数和$k$取较小值后的和 ...
- MySQL读写分离-架构
MySQL读写分离-架构 简介 对于很多大型网站(pv值百万.千万)来说,在所处理的业务中,其中有70%的业务是查询(select)相关的业务操作(新闻网站,插入一条新闻.查询操作),剩下的则是写(i ...
- 【贪心】Mixing Milk
题目描述 The Merry Milk Makers company buys milk from farmers, packages it into attractive 1- and 2-Unit ...
- docker环境准备及理论
1.预热 内核运行在内核空间,进程运行在用户空间,linux进程特性:父进程负责子进程的创建和回收,白发人送黑发人.容器就是为了保护它里面的内容物,不受其他容器干扰,也不去干扰其他容器.容器让进程认为 ...
- 记录git rebase用法
git 是基于文件系统的版本管理工具,文档和详细介绍可以查看git 一.git commit --amend 如果你对文件做了修改需要和上一次的修改合并为一个change git add . git ...
- Ubuntu 16.04将ISO镜像写入U盘
sudo fdisk -l 查看U盘的路径,如/dev/sdc为U盘的位置,注意位置!注意这个不是挂载的位置. 然后准备好ISO文件,如放在/home/jim/abc.iso 然后输入 sudo dd ...
- java实现随机中文
原文:http://blog.csdn.net/u013926110/article/details/44600601 public class CreateCheckCode { /** * 生成随 ...
- iptables 中的SNAT 和MASQUWERADE
NAT 是 network address translation 的缩写 网络地址转换 网络地址转换主要有两种:SNAT和DNAT,即源地址转换和目标地址转换 SNAT:源地址转换 eg:多台pc机 ...
- 【PA2012】【BZOJ4289】Tax
Description 给出一个N个点M条边的无向图,经过一个点的代价是进入和离开这个点的两条边的边权的较大值.求从起点1到点N的最小代价. 起点的代价是离开起点的边的边权.终点的代价是进入终点的边的 ...