Présentation de Jasper iReport Designer

Exercice 2 - Utilisation et intégration de sous-rapport(s)

Dans cet exercice on va chercher à analyser les ventes en fonction de l'expérience des vendeur et analyser les ventes en fonction du genre des vendeurs. Tout cela pour chaque produit.

Vous remarquerez à l'issue de cet exercice que malgré la possibilité de n'avoir une unique requête par rapport, ceci reste contournable par l'utilisation de sous rapport.

Question

Créez un nouveau rapport qui sera votre rapport père.

Indice

Votre requête sera :

1
SELECT * 
2
FROM l_dw_product
3
WHERE ROWNUM<10

Ajoutez tous les champs à l'aide de la double flèche et suivant jusqu'à finir.

Solution

Notre rapport sera une sorte de "Fiche identité produit". Je vous propose une structure de la sorte (dans Details 1)

Id produit : FIELD product

Age : FIELD age

Nouveauté : FIELD is_new

Best-seller : FIELD best_seller

Pour le moment, nous laissons la partie de droite vide, c'est ici que nous insérerons les sous rapports.

Question

Faîtes maintenant glisser tous les champs un "Static text" depuis la palette jusqu'à votre "Title" et y entrer le titre de votre rapport.

Question

Maintenant, créez rapidement un sous-rapport pour les ventes par genre (et y mettre un camembert)

Indice

Fichier -> new -> Blank letter -> Genre_sub-> Puis entrez la requête suivante en cliquant sur Query ( à droite de Preview)

1
SELECT g1 as gender, vente_par_gender as nb_vente, nb_clerk_par_gender as nb_vendeur, ROUND(vente_par_gender/nb_clerk_par_gender) as vente_par_vendeur 
2
FROM 
3
  (
4
      SELECT c.GENDER as g1, count(*)*100 as vente_par_gender
5
      FROM l_dw_clerk c, l_dw_lightsaber l
6
      WHERE c.clerk=l.clerk
7
      GROUP BY c.GENDER
8
      ORDER BY vente_par_gender DESC
9
  ),(
10
    SELECT c.gender as g2, COUNT(*) AS nb_clerk_par_gender
11
    FROM l_dw_clerk c
12
    GROUP BY c.GENDER
13
  )
14
WHERE g1=g2
15
ORDER BY vente_par_vendeur desc

Ajoutez tous les champs puis faites suivant jusque Finish

Indice

Pour pouvoir intégrer le sous rapport, il faut ajouter un paramètre

Solution
  1. Après avoir créé le rapport, cliquez droit dans Parameters puis Ajouter paramètre.

  2. Dans les propriétés à droite, nommez votre paramètre id_product

Maintenant, ajoutez un camember - faites glisser chart depuis votre Palette vers Column Footer. Choisissez gender comme "Key Expression" et Vente par vendeur comme "Value expression"

Enfin, dans la barre de menu, à droite de preview, cliquez et modifiez votre Query. Ajoutez y : AND l.product=$P{id_product} Dans le where .

Votre requête est donc :

1
SELECT g1 as gender, vente_par_gender as nb_vente, nb_clerk_par_gender as nb_vendeur, ROUND(vente_par_gender/nb_clerk_par_gender) as vente_par_vendeur
2
FROM
3
  (
4
      SELECT c.GENDER as g1, count(*)*100 as vente_par_gender
5
      FROM l_dw_clerk c, l_dw_lightsaber l
6
      WHERE c.clerk=l.clerk AND l.product=$P{id_product}
7
      GROUP BY c.GENDER
8
      ORDER BY vente_par_gender DESC
9
  ),(
10
    SELECT c.gender as g2, COUNT(*) AS nb_clerk_par_gender
11
    FROM l_dw_clerk c
12
    GROUP BY c.GENDER
13
  )
14
WHERE g1=g2
15
ORDER BY vente_par_vendeur desc

Remarque

Vous pouvez aussi redimensionner les parties Header, Titre, etc, pour un meilleur affichage.

Question

Retournez dans votre rapport principal et ajoutez maintenant un sous rapport.

Indice

Vous disposez de "Subreport" dans votre palette

Solution
  1. Faites glissez un élément Subreport jusque Detail 1.

  2. Sélectionnez "use an existing report" et parcourir jusqu'a votre rapport.

  3. Gardez l'option "use the same connection .. "

  4. Au niveau de votre paramètre id_product parcourez jusqu'à trouver le Field Product.

  5. Suivant puis Terminer.

Question

Si nous avons encore le temps, nous allons encore une fois créer un autre rapport qui sera cette fois ci pour la vente en fonction de l'expérience des vendeurs.

Indice

Répétez les étapes précédentes en changeant de diagramme pour qu'il soit adapté.

La requête finale sera donc ;

1
SELECT a1 as Experience, vente_par_age as nb_vente, nb_clerk_par_age as nb_vendeur, ROUND(vente_par_age/nb_clerk_par_age) as vente_par_vendeur 
2
FROM 
3
  (
4
    SELECT c.age as a1, count(*)*100 as vente_par_age
5
    FROM l_dw_clerk c, l_dw_lightsaber l
6
    WHERE c.clerk=l.clerk AND l.product=$P{id_product}
7
    GROUP BY c.age
8
    ORDER BY vente_par_age DESC
9
  ),( 
10
    SELECT c.age as a2, COUNT(*) AS nb_clerk_par_age
11
    FROM l_dw_clerk c
12
    GROUP BY c.age
13
  )
14
WHERE a1=a2
15
ORDER BY vente_par_vendeur desc
Solution

Dans le sous rapport

  1. Fichier -> New -> Blank Letter - Open this template.

  2. Depuis le Query Widget ( à droite de preview) cliquez sur "New parameter" et entrer id_product.

  3. Dans l'encart SQL mettez la requête ci dessus puis OK.

  4. Faîtes glisser un chart jusqu'à votre Column Footer.

  5. Cliquez sur Bar 3D

  6. Dans Séries entrez "Vente par vendeur", dans Category expression sélectionnez "experience" et dans Value expression selectionnez "vente_par_vendeur".

Solution

Dans le rapport père

  1. Faites glissez un élément Subreport jusque Detail 1.

  2. Sélectionnez "use an existing report" et parcourir jusqu'a votre rapport.

  3. Gardez l'option "use the same connection .. "

  4. Au niveau de votre paramètre id_product parcourez jusqu'à trouver le Field Product.

  5. Suivant puis Terminer.

Solution

Finalement, voici un exemple de ce que j'ai obtenu :

PrécédentPrécédentSuivantSuivant
AccueilAccueilImprimerImprimer Lucie Vannier, 2014 Réalisé avec Scenari (nouvelle fenêtre)