如何在Pentaho Reporting中查询外部DataFactory



我需要使用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=主查询在子报表中,我设置query.name=子报表查询

我得到的是:

Name 1
10
10
5
Name 2
10
10
5

在子报表中,我设法从主报表中导入了参数"studentId"。我需要按学生ID筛选校准,以便只显示每个学生的校准。我需要这个:

Name 1
10
10
Name 2
5

我怎样才能做到这一点?我可以在"子报表查询"上实现查询吗?怎样

web上的所有示例都使用${studentId}查询JDBC连接,但我需要查询外部DataFactory。

谢谢!

我用不同的方法解决了这个问题。

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。

最新更新