读取文件合并多个数据集

【问题】

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 脚本​】。