Отчет Джаспер: два подробных раздела?
У меня есть отчет о яшме, с такими данными:
Item | Quantity | Color
------+-----------+--------
A001 | 1 | Red
A001 | 1 | Green
B002 | 3 | Red
B002 | 3 | Purple
Отчет сгруппирован по позиции / количеству, например
Item: A001, Qty: 1, Colors: Red,Green
Item: B002, Qty: 3, Colors: Red,Purple
Теперь у меня есть отчет Jasper, который уже группируется как таковой - то есть показывает заголовок с товаром и количеством, со списком цветов внизу.
Теперь вопрос в том, что под этой группой мне нужно отобразить количество горизонтальных линий (для того, чтобы кто-то что-то написал), равное количеству элемента. например, под группой A001 мне нужно отобразить одну строку, а под группой B002 мне нужно отобразить три строки, например так:
Item A001, Qty 1, Colors Red, Green
_________________________
Item B002, Qty 3, Colors Red, Purple
_________________________
_________________________
_________________________
Я пробовал смотреть на скрипты jasper, но кажется, что они могут манипулировать только параметрами / переменными отчета.
У кого-нибудь есть идеи, как я мог это сделать?
2 ответа
ОК, в конце концов, это было сделано с использованием набора подданных и кросс-таблицы в разделе подробного нижнего колонтитула. Работает хорошо - спасибо всем, кто внес свой вклад:)
Хм, интересно.
Вот что вы могли бы сделать:
Используя эти исходные данные (MySQL):
create table items (
item varchar(4),
quantity number,
color varchar(10),
);
(вставьте данные...)
create table numbers (i integer)
(вставьте данные 0, 1, 2 .... MySQL 5.1 имеет хранимые процедуры, которые могли бы это сделать, в более ранних версиях для его заполнения требовался внешний скрипт. Перейдите от 0 к наибольшему количеству, которое у вас будет).
Тогда хитрость заключается в том, чтобы создать правильный запрос. Я придумал это:
select i.*, n.i from
(
select concat(i.item, ' ', i.quantity) as grouping, i.item, i.quantity,group_concat(distinct color) as colors
from items i
GROUP BY item, quantity
) i
cross join numbers n
where quantity > n.i;
Например, если я заполняю свою таблицу чисел и заполняю таблицу элементов данными вашего примера, а затем запускаю полученный запрос:
+----------+------+----------+------------+------+
| grouping | item | quantity | colors | i |
+----------+------+----------+------------+------+
| A001 1 | A001 | 1 | Red,Greem | 0 |
| B002 3 | B002 | 3 | Red,Purple | 0 |
| A001 1 | A001 | 1 | Red,Greem | 1 |
| B002 3 | B002 | 3 | Red,Purple | 1 |
| A001 1 | A001 | 1 | Red,Greem | 2 |
| B002 3 | B002 | 3 | Red,Purple | 2 |
| A001 1 | A001 | 1 | Red,Greem | 3 |
| B002 3 | B002 | 3 | Red,Purple | 3 |
+----------+------+----------+------------+------+
Затем в вашем отчете Jasper трюк состоит в том, чтобы создать группу / группу, которая работает на основе столбца "группировка", и поместить ваш заголовок в это:
Item A001, Qty 1, Colors Red, Green
И потом, в разделе подробностей просто есть строка как единственное, что есть в деталях.
Делая это генерирует отчет, который вы хотите для меня.
Обратите внимание, что numbers
Таблица выглядит немного глупо, но это стандартная техника хранилища данных, хотя я подозреваю, что в некоторых базах данных (например, Oracle) были бы умные рекурсивные процедуры или другие функции, которые исключали бы необходимость в этом.