Utilizzare Jasper Reports – Raggruppamento dei dati

jasperUno dei compiti più importanti della reportistica è produrre dei documenti “umani“, che sappiano cioè mostrare i dati in una forma facile da capire. Le persone infatti, a differenza dei computer, hanno molta difficoltà a esaminare interminabili file di dati! Una delle funzionalità più importanti in questo senso è il raggruppamento.

I dati d’esempio

Nel database d’esempio di iReport ci sono queste tabelle:

  • DOCUMENT: contiene i documenti degli ordini acquisto;
  • POSITIONS: associa le righe di dettaglio nell’ordine ai rispettivi prodotti;
  • ADDRESS: dati dell’acquirente.

Tralasciamo la valutazione della bontà di tale database, dato che serve solamente come supporto per l’apprendimento di iReport. Va comunque considerato che spesso i motori di reportistica come JasperReports prelevano dati non dal database dove avvengono le transazioni, ma su database read-only (denominati Data Warehouse), contenenti dati ormai consolidati e con tabelle appositamente denormalizzate per velocizzare l’esecuzione delle query.

Cosa sono i raggruppamenti

La prima considerazione da fare è che i dati vengono forniti al report sempre in forma tabellare dato che arrivano da tabelle di database, oppure file CSV, array o Collection Java (che vedremo in un prossimo appuntamento), eccetera. Quando questi dati hanno un certo ordinamento possiamo analizzarli in una maniera nuova, considerando come facenti parte dello stesso gruppo tutte le righe consecutive che hanno un certo valore (scelto da noi ovviamente) in comune.

Facciamo un esempio. La tabella ADDRESS possiede queste colonne: ID, FIRSTNAME, LASTNAME, STREET, CITY. Se eseguiamo questa query SQL:

[sql]SELECT * FROM ADDRESS ORDER BY CITY[/sql]

avremo come risultato una tabella con tutti gli indirizzi, ordinati per città.

ID FIRSTNAME LASTNAME STREET CITY
22 Bill Ott 250 – 20th Ave. Berne
9 James Schneider 277 Seventh Av. Berne
32 Michael Ott 339 College Av. Boston
23 Julia Heiniger 358 College Av. Boston
39 Mary Karsen 202 College Av. Chicago
35 George Karsen 412 College Av. Chicago
11 Julia White 412 Upland Pl. Chicago

Scorrendo riga per riga questa tabella ci si può rendere conto di come sia facile suddividere gli indirizzi per città, basta cambiare gruppo ogni volta che si interrompe la continuità del campo CITY. Questa situazione in effetti si chiama proprio interruzione (o break).

Un esempio concreto

In questo esempio vediamo come creare un elenco di tutti gli indirizzi, raggruppati per città.

Creiamo un nuovo report tramite il solito wizard, scegliendo database d’esempio come sorgente di dati e inseriamo questa query SQL:

[sql]SELECT a.ID, a.FIRSTNAME, a.LASTNAME, a.CITY
FROM ADDRESS as a
ORDER BY CITY, LASTNAME, FIRSTNAME[/sql]

Al passo successivo, selezioniamo tutti i campi, e nella pagina “Raggruppa per…” selezioniamo dal menu a tendina Gruppo 1 il campo CITY.

Cliccando su Avanti e poi Termina, possiamo apprezzare il lavoro fatto dal wizard cliccando su Anteprima: ogni città (elencate in ordine alfabetico) è in una intestazione a parte, seguita dall’elenco dei nominativi dei clienti che abitano in quella città.

Sviluppi

Le funzionalità di raggruppamento che fornisce Jasper Reports consente non finiscono qui, è possibile infatti creare raggruppamenti multipli, utilizzare espressioni e personalizzare questa funzionalità in molti modi. Potrebbe essere un argomento per un prossimo articolo, che ne pensate?

Linkografia