读取文件合并多个数据集
【问题】
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 脚本】。