Как запросить внешнюю DataFactory в Pentaho Reporting - PullRequest
0 голосов
/ 06 декабря 2018

Мне нужно реализовать следующий отчет в Pentaho Reporting с использованием java:

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

Как мне это сделать?Могу ли я реализовать запрос по «subreport-query»?Как?

Все примеры веб-запроса к соединениям JDBC с использованием $ {studentId}, но мне нужно запросить внешнюю DataFactory.

Спасибо!

1 Ответ

0 голосов
/ 12 декабря 2018

Я решил проблему по-другому.

Код 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) Добавлен набор данных Scriptable со следующим кодом (бобовая оболочка):

return dataRow.get("califications");

3) Щелкните правой кнопкой мыши в Scriptable Query -> Выбрать запрос

Теперь калибровки TypedTableModel доступны из подотчета.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...