Domanda

Ho un rapporto sul diaspro da fare, con dati come questo:

Item  | Quantity  | Color
------+-----------+--------
A001  | 1         | Red
A001  | 1         | Green
B002  | 3         | Red
B002  | 3         | Purple

Il rapporto è raggruppato per articolo / quantità, ad esempio

Item: A001,  Qty: 1,  Colors: Red,Green
Item: B002,  Qty: 3,  Colors: Red,Purple

Ora ho questo rapporto di Jasper che già raggruppa in quanto tale - cioè mostra un'intestazione con l'articolo e la quantità, con un elenco di colori sotto.

La domanda ora è, sotto questo gruppo, devo visualizzare un numero di linee orizzontali (affinché qualcuno scriva qualcosa), pari alla quantità dell'articolo. per esempio. sotto il gruppo A001 devo visualizzare una riga e sotto il gruppo B002 devo visualizzare tre righe, in questo modo:

Item A001, Qty 1, Colors Red, Green
          _________________________

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

Ho provato a guardare gli script jasper, ma sembra che possano solo manipolare i parametri / le variabili dei rapporti.

Qualcuno ha un'idea di come potrei farlo?

È stato utile?

Soluzione 2

OK, alla fine, questo è stato fatto usando un set di dati secondari e una tabella a campi incrociati nella sezione piè di pagina dei dettagli. Funziona bene - grazie per tutti coloro che hanno contribuito :)

Altri suggerimenti

Hmm, interessante.

Ecco cosa potresti fare:

Uso di questi dati sorgente (MySQL):

create table items ( 
item varchar(4), 
quantity number,   
color varchar(10),
);

(inserisci dati ...)

create table numbers (i integer)

(inserisci i dati 0, 1, 2 .... MySQL 5.1 ha archiviato procedure che potrebbero farlo, le versioni precedenti avrebbero bisogno di uno script esterno per popolarlo. Passa da 0 alla quantità maggiore che avresti).

Quindi, il trucco è creare il giusto tipo di query. Ho pensato a questo:

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;

es. Se popolo la mia tabella dei numeri e popolo la tabella degli articoli con i tuoi dati di esempio, quindi eseguo la query che ottengo:

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

Quindi nel tuo Jasper Report, il trucco è creare un gruppo / una band che funzioni dalla colonna "raggruppamento" e inserire la tua intestazione in questo:

Item A001, Qty 1, Colors Red, Green

E poi, nella sezione dei dettagli basta avere una linea come unica cosa nei dettagli.

In questo modo genera il rapporto che desideri per me.

Nota che la tabella numbers è un po 'sciocca, ma è una tecnica standard di data warehousing, anche se sospetto che alcuni database (ad es. Oracle) dispongano di procedure ricorsive intelligenti o altre funzioni che escluderebbero la necessità per questo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top