Отчет Джаспер: два подробных раздела? - PullRequest
0 голосов
/ 24 июня 2009

У меня есть отчет о яшме, с такими данными:

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

Теперь у меня есть этот отчет Джаспера, который уже группируется как таковой, то есть показывает заголовок с товаром и количеством, со списком цветов под ним.

Вопрос теперь в том, что под этой группой мне нужно отобразить количество горизонтальных линий (для того, чтобы кто-то что-то написал), равное количеству элемента. например под группой A001 мне нужно отобразить одну строку, а под группой B002 мне нужно отобразить три строки, например:

Item A001, Qty 1, Colors Red, Green
          _________________________

Item B002, Qty 3, Colors Red, Purple
          _________________________
          _________________________
          _________________________

Я пытался посмотреть на скрипты jasper, но, похоже, они могут манипулировать только параметрами / переменными отчета.

Кто-нибудь имеет представление о том, как я мог это сделать?

Ответы [ 2 ]

0 голосов
/ 30 июня 2009

ОК, в конце концов, это было сделано с использованием поднабора данных и кросс-таблицы в разделе подробного нижнего колонтитула. Работает хорошо - спасибо всем, кто внес вклад:)

0 голосов
/ 25 июня 2009

Хм, интересно.

Вот что вы могли бы сделать:

Использование этих исходных данных (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) будут иметь умные рекурсивные процедуры или другие функции, которые исключают необходимость в этом.

...