I. Introduction

La génération d'un rapport sous JasperReports est basée généralement sur une seule source de données (une requête SQL, une collection JavaBean, un fichier XML?). Toutefois, si vous avez affaire à un graphe ou un tableau croisé, cette source de données peut s'avérer insuffisante. Les SubDataset viennent alors remédier à cette problématique. Ainsi, un SubDataset est utilisé pour fournir de nouveaux enregistrements en se basant sur une nouvelle requête en utilisant une nouvelle source de données. Les SubDataset ne sont utilisés que pour l'alimentation des tableaux croisés et les graphes. L'utilisateur peut utiliser un nombre quelconque de SubDataset dans un rapport.

II. Création de la base de données exemple et du SubDataset

Cet article traite la répartition de la population mondiale par continent.

A titre indicatif, les statistiques figurant dans cet article sont issues du site wikipedia

2.1. Création de la base de données

La base de données que nous allons exploiter tout au long de cet article sera créée sur MS ACCESS. Cette base sera constituée d'une seule table avec deux champs (le nom du continent et sa population).

La structure de cette table se présente comme suit :

Image non disponible

La taille du champ Population est Réel double.

Cette table est alimentée par les données suivantes :

Image non disponible

2.2. Création et test du rapport principal

La première des choses à faire est de configurer la source de données pointant sur la base de données récemment créée (Base_Population.mdb). Le lecteur peut se référer à cet article qui explique comment créer une source de données sous iReport.

Notre rapport principal sera constitué d'un seul champ qui contiendra le total des populations des différents continents.

Créons alors un rapport vide, comme le montre la figure suivante :

Image non disponible

Comme requête pour ce rapport, nous allons saisir la requête suivante qui nous donnera le nombre total de toutes les populations des différents continents :

 
Sélectionnez
SELECT SUM(population) as Total_Population FROM Statistiques
Image non disponible

Le champ Total_Population apparaîtra alors dans la liste des champs du rapport :

Image non disponible

Nous allons glisser ce champ sur le rapport dans la bande détail comme suit :

Image non disponible

Ce rapport contient outre le champ $F{Total_Population} un texte statique Les différents continents ont une population de : et un titre Test d'un SubDataset avec un graphe.

Pour nous assurer du bon fonctionnement de ce premier rapport, nous allons l'exécuter. Le résultat se présente comme suit :

Image non disponible

2.3. Création et configuration du SubDataset

Après avoir créé et testé le rapport principal, nous allons créer et configurer notre SubDataset.

Pour créer le SubDataset, il suffit de cliquer droit sur Document --> Add... --> Sub dataset.

Image non disponible

L'écran suivant s'affiche :

Image non disponible

Il suffit de cliquer sur le bouton Créer, les autres boutons à droite de cet écran seront accessibles :

Image non disponible

Le nom par défaut SubDataset1 a été gardé pour le SubDataset.

Maintenant, nous allons saisir la requête SQL qui ramènera la population par continent. Les champs de cette requête serviront par la suite comme attributs du graphe.

 
Sélectionnez
SELECT Continent, Population FROM Statistiques

Pour saisir cette requête SQL, il suffit de cliquer sur le bouton Requête de l'écran précédent.

Image non disponible

Après la création et le paramétrage du SubDataset, il ne reste plus qu'à le lier au graphe que nous allons créer dans la section qui suit

Image non disponible

III. Création et configuration du graphe avec le SubDataset

Après avoir bien configuré le SubDataset, on passe à l'étape de la liaison de celui-ci avec notre graphe.

3.1. Création du graphe

Nous allons ajouter un objet de type graphe à notre rapport sur la bande détail.

Image non disponible

Une fois l'objet graphe glissé sur le rapport, plusieurs types de graphes s'affichent :

Image non disponible

Nous allons par exemple choisir un graphe de type Diagramme circulaire 3D.

Image non disponible

3.2. Liaison du graphe avec le SubDataset

La dernière étape consiste à lier le graphe avec le SubDataset. Pour ce faire, nous allons cliquer droit sur le graphe et nous allons choisir Propriétès du tableau

Image non disponible

Ensuite, nous allons sélectionner l'onglet Données du tableau et nous allons choisir dans sous-ensemble de données de la partie Exécution d'ensemble de données.

Image non disponible

Jusqu'à maintenant, on n'a pas précisé la source de données de notre SubDataset. Dans l'onglet Exp. de connexion/Source de données nous allons choisir Utiliser l'expression de connexion dans la partie Expression de connexion/source de données. L'expression $P{REPORT_CONNECTION} s'affichera par défaut ce qui signifie que la source de données du SubDataset est celle utilisée dans le rapport principal.

Image non disponible

Enfin, il ne reste plus qu'à de spécifier les Clés/Valeurs du graphe. Ces éléments sont accessibles via l'onglet Détails.

Image non disponible

Il ne nous reste plus qu'à exécuter le rapport et contempler le résultat :

Image non disponible

IV. Téléchargements

La base de données utilisée dans cet article ainsi que le Jrxml sont téléchargeables ici : Image non disponible Base et Jrxml.

V. Conclusion

Cet article a pour objectif de vous guider dans l'élaboration de graphe en utilisant un SubDataset. Il est susceptible d'une mise à jour. En effet, le SubDataset peut ne pas utiliser la même source de données que le rapport principal, chose qui peut être faite à l'aide d'une classe Java en passant un paramètre de type java.sql.connection. Un autre aspect qui pourrait faire l'objet d'une mise à jour de cet article est le passage de paramètre entre le rapport principal et le SubDataset.

VI. Remerciements

Mes remerciements vont à witch et Bruno2r pour leurs remarques et corrections orthographiques.