如何在Pentaho Reporting中查询外部DataFactory

时间:2018-12-06 15:24:10

标签: java pentaho pentaho-report-designer

我需要使用Java在Pentaho Reporting中实现以下报告:

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

该报告从代码中接收所有信息。它无权访问数据库。我正在使用Subreports实现它。 (这是一个简化的示例。学生中还有其他字段,因此我无法使用分组)

我尝试了以下方法:

为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

我该怎么做? 我可以在“ subreport-query”上实现查询吗?怎么样?

网络上的所有示例都使用$ {studentId}查询到JDBC连接,但是我需要查询一个外部DataFactory。

谢谢!

1 个答案:

答案 0 :(得分:0)

我以不同的方式解决了这个问题。

Java dataFactory代码:

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)导入了称为“校准”的父参数。 (参数-导入参数)

2)使用以下代码(beanshell)添加了可编写脚本的数据集:

return dataRow.get("califications");

3)右键单击脚本查询->选择查询

现在可以从子报表访问TypedTableModel的校准。