【问题】
Birt 能 Union 两个 Dataset 吗? 有什么变通办法吗。。
例如:
Dataset1:
id name time
——- ————— ———————–
1 name1 2010-07-22 11:01:02.903
2 name2 2010-07-22 11:01:02.903
3 name3 2010-07-22 11:01:02.903
Dataset2:
id name time
——- ————— ———————–
1 t2_name1 2010-07-22 11:01:02.903
2 t2_name2 2010-07-22 11:01:02.903
3 t2_name3 2010-07-22 11:01:02.903
1 t3_name1 2010-07-22 11:01:02.920
2 t3_name2 2010-07-22 11:01:02.920
3 t3_name3 2010-07-22 11:01:02.920
期望的:Dataset3:
id name time
——- ————— ———————–
1 name1 2010-07-22 11:01:02.903
2 name2 2010-07-22 11:01:02.903
3 name3 2010-07-22 11:01:02.903
1 t2_name1 2010-07-22 11:01:02.903
2 t2_name2 2010-07-22 11:01:02.903
3 t2_name3 2010-07-22 11:01:02.903
1 t3_name1 2010-07-22 11:01:02.920
2 t3_name2 2010-07-22 11:01:02.920
3 t3_name3 2010-07-22 11:01:02.920
【回答】
BIRT 提供了一种特殊的数据集:Joint Data Set(联合数据集),可以对两个且只有两个数据集进行 join,但无法实现 union 的效果。应该在数据源准备阶段完成,如果数据来源于单个数据库,那直接使用 SQL 的 union 即可。但是如果数据来自文件或多个不同的数据库,可以使用 SPL 来辅助 BIRT 完成,脚本这样写:
| A | ||
|---|---|---|
| 1 | =file(“d:\\data1.txt”).import@t() | |
| 2 | =file(“d:\\data2.txt”).import@t() | |
| 3 | result A1|A2 |
A1:读取文本,返回成序表,第一行记录作为字段名
A2:读取文本,返回成序表,第一行记录作为字段名
A3:返回 A1 和 A2 的并集
BIRT 可以通过 JDBC 连接集算器,调用脚本方法和调用存储过程一样,详情参考【BIRT 调用 SPL 脚本】。
本文探讨了BIRT中如何处理无法直接Union的Dataset问题,介绍了利用JointDataSet进行数据合并,并提供了通过SPL脚本实现数据集合并的技巧。
690

被折叠的 条评论
为什么被折叠?



