2009-06-23 4 views
0

Я получил сообщение яшма делать с данными, как это:Отчет Jasper: две секции детали?

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 
      _________________________ 
      _________________________ 
      _________________________ 

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

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

ответ

0

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

0

Хм, интересный.

Вот что вы можете сделать:

Использование этого источника данных (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; 

E.g. Если я заполнить свою таблицу чисел и заполнить таблицу продуктов с примером данными, а затем выполнить запрос, я получаю:

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

Смежные вопросы