如何在pentaho reporting中查询外部数据工厂

irlmq6kh  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(225)

我需要使用java在pentaho reporting中实现以下报告:

Student 1
 - Calification 1
 - Calification 2
Student 2
 - Calification 1
 - Calification 2
...

报表接收来自代码的所有信息。它无法访问数据库。我正在使用子报表实现这个功能(这是一个简化的例子。学生中有其他字段,因此无法使用分组)
我尝试了以下方法:
为datafactory创建两个表模型。

TypedTableModel model = new TypedTableModel();
model.addColumn("studentId", String.class);
model.addColumn("calification", String.class);
model.addRow("1", "10");
model.addRow("1", "10");
model.addRow("2", "5");

TypedTableModel model2 = new TypedTableModel();
model2.addColumn("studentId", String.class);
model2.addColumn("studentName", String.class);
model2.addRow("1", "Name 1");
model2.addRow("2", "Name 2");

TableDataFactory dataFactory = new TableDataFactory();
dataFactory.addTable("master-query", model2);
dataFactory.addTable("subreport-query", model);

然后,在主报表中,在子报表中设置query.name=master query,在子报表中设置query.name=subreport query
我得到的是:

Name 1
10
10
5

Name 2
10
10
5

在子报表中,我设法从主报表导入参数“studentid”。我需要按studentid过滤加州,以便只显示每个学生的加州。我需要这个:

Name 1
10
10

Name 2
5

我怎样才能做到呢?我可以实现对“子报表查询”的查询吗?怎样?
web上的所有示例都使用${studentid}查询jdbc连接,但我需要查询外部数据工厂。
谢谢!

dddzy1tm

dddzy1tm1#

我用另一种方法解决了这个问题。
java数据工厂代码:

TypedTableModel cal1= new TypedTableModel();
cal1.addColumn("calification", String.class);
cal1.addRow("10");
cal1.addRow("10");

TypedTableModel cal2= new TypedTableModel();
cal2.addColumn("calification", String.class);
cal2.addRow("5");

TypedTableModel model = new TypedTableModel();
model.addColumn("studentId", String.class);
model.addColumn("studentName", String.class);
model.addColumn("califications", TypedTableModel.class);
model.addRow("1", "Name 1", cal1);
model.addRow("2", "Name 2", cal2);

TableDataFactory dataFactory = new TableDataFactory();
dataFactory.addTable("master-query", model);

pentaho子报告:
1) 导入了名为“califications”的父参数(参数-导入参数)
2) 添加了具有以下代码的可脚本化数据集(beanshell):

return dataRow.get("califications");

3) 在“脚本查询”->“选择查询”中单击鼠标右键
现在,可以从子报表访问califications typedtablemodel。

相关问题