Uno 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
- voci di Wikipedia a proposito di Normalizzazione
Denormalizzazione e Data Warehouse; - Squirrel SQL un client SQL scritto in Java, configturabile per collegarsi al database d’esempio di iReport.