Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > BIRT
BIRT Forum d'entraide sur BIRT (Business Intelligence and Reporting Tools). Avant de poster --> FAQ BIRT,Tutoriels BIRT
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/02/2008, 10h34   #1
Membre éclairé
 
Inscription : novembre 2005
Messages : 385
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 385
Points : 362
Points : 362
Par défaut [2.2.1][Chart] Tri des résultats

Bonjour,

Je souhaite présenter des données sous la forme d'un graphique à barres empilées (direction: horizontal) mais je butte sur un problème de tri des données.

Par exemple, je souhaite présenter le nombre de clients par région d'habitation et par type de clients (cf. pièce jointe chart_BIRT pour modèle). En abscisses on a le nombre de navires et en ordonnées les régions. Chaque barre de l'empilement représente le nombre de clients par type de client et par région.

Mon problème est le suivant : comment procéder pour trier les résultats sur le nombre total de clients par région ?

La pièce jointe (chart_BIRT) montre le résultat obtenu à partir de birt. On peut constater que les régions sont affichées dans un ordre définie par BIRT. Ce que je voudrais c'est que la ligne du bas arrive en haut car c'est celle dont le nombre total de clients est le plus important.

La pièce jointe "chart_BIRT2" montre la configuration du graphique dans l'éditeur.
Images attachées
Type de fichier : jpg chart_BIRT.JPG (50,4 Ko, 14 affichages)
Type de fichier : jpg chart_BIRT2.JPG (106,0 Ko, 15 affichages)
erwan.bodere est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2008, 13h14   #2
Membre régulier
 
Inscription : novembre 2005
Messages : 173
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 173
Points : 84
Points : 84
Si j'ai bien compris, tu dois changer ton regroupement dans la case 'Regroupement de séries verticales falcutatif'.. au lieu de row["CLIENT_TYPE"], met ta fonction qui permet d'avoir le nombre total de client (row["NB_CLIENTS"]+row["NB_CLIENTS_2"]+...).
FredKéKé est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/02/2008, 12h19   #3
Membre éclairé
 
Inscription : novembre 2005
Messages : 385
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 385
Points : 362
Points : 362
Voici le rendu espéré :




Et voici ce que j'obtiens avec BIRT :



Si vous avez une solution je suis preneur.
Fichiers attachés
Type de fichier : zip test-chart.zip (4,9 Ko, 3 affichages)
erwan.bodere est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2008, 10h15   #4
BiM
Modératrice
 
Avatar de BiM
 
Femme
Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
Inscription : janvier 2005
Messages : 7 299
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 26
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

Informations forums :
Inscription : janvier 2005
Messages : 7 299
Points : 8 650
Points : 8 650
Bonjour,

En fait, tu fais un regroupement par type de bateau.

Or tu veux juste un tri par nombre de bateau total. Essaye le regroupement sur row["NB_NAVIRES_TOT"] en décroissant.
__________________
__~{@ BiM - Modératrice "Business Intelligence" @}~
Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
___________.~{@ Lapine crétine @}~
BiM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2008, 11h00   #5
Membre éclairé
 
Inscription : novembre 2005
Messages : 385
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 385
Points : 362
Points : 362
Ça na pas l'air de fonctionner

Ce que je veux effectivement pouvoir faire c'est trier les valeurs des différents axes sur des champs non affichés.

Dans cette exemple, j'affiche le nombre de navires par rayon d'action et par port de pêche. Je veux afficher les navires en fonction du nombre total de navires. Autre chose, je souhaite pouvoir ordonner les barres de regroupements par rayon d'action dans l'ordre suivant : côtier, mixte et large. Pour cela, j'ai créer un pseudo code d'ordre (row["GRA_RAYON"]). Le seul moyen que j'ai trouvé est de concaténer la valeur de ce numéro d'ordre avec le libellé du rayon d'action. Seulement le problème survient lorsque j'ai plus de 10 rayon d'action. Dans ce cas le numéro 11 se trouvera avant le numéro 2.
erwan.bodere est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2008, 11h07   #6
Membre éclairé
 
Inscription : novembre 2005
Messages : 385
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 385
Points : 362
Points : 362
Voici le résultat obtenue avec le regroupement par nombre total de navires :



On a effectivement le bon tri des ports de pêche mais hélas, on n'a pas l'empilement des barres
erwan.bodere est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2008, 12h50   #7
BiM
Modératrice
 
Avatar de BiM
 
Femme
Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
Inscription : janvier 2005
Messages : 7 299
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 26
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

Informations forums :
Inscription : janvier 2005
Messages : 7 299
Points : 8 650
Points : 8 650
Ah mince ca fait longtemps que je n'ai pas manipulé les charts.

... Installation de BIRT ...

En effet... L'éventuelle solution serait de faire un sort dans la requête elle-même, oui oui, celle ou on récupère les données.

C'est moche mais bon...
__________________
__~{@ BiM - Modératrice "Business Intelligence" @}~
Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
___________.~{@ Lapine crétine @}~
BiM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2008, 13h58   #8
Membre éclairé
 
Inscription : novembre 2005
Messages : 385
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 385
Points : 362
Points : 362
Je n'ai pas compris ta réponse

Est-ce que BIRT offre la possibilité de trier les valeurs des différents axes (regroupements y compris) sur des champs de la requête non affichés ?
apparemment NON.

Pourquoi BIRT ne propose pas la possibilité d'afficher les résultats du graphique en conservant l'ordre défini dans la requête ?
erwan.bodere est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2008, 09h17   #9
Nouveau Membre du Club
 
Inscription : octobre 2007
Messages : 175
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 175
Points : 26
Points : 26
Ce que veut dire BiM c'est que tu devrais même dans ta source Data sets faire une requête du genre SELECT * FROM TATABLE order by NB_NAVIRES.
OK!
ravaid est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2008, 09h19   #10
Nouveau Membre du Club
 
Inscription : octobre 2007
Messages : 175
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 175
Points : 26
Points : 26
En fait essayez d'ajouter à ta source dse-s001 "SELECT .....order by NB_NAVIRES"
ravaid est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2008, 09h34   #11
Membre éclairé
 
Inscription : novembre 2005
Messages : 385
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 385
Points : 362
Points : 362
C'est déjà ce que j'ai fait. Seulement à cause du regroupement par rayon d'action (côtier, mixte, large), BIRT désordonne mon tri.

Voici ma requête :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
SELECT s2.LIEU_COD, s2.LIEU_LIB, s2.RA_COD, s2.RA_LIB, s2.NB_NAVIRES, s1.NB_NAVIRES_TOT
FROM (
        -- nombre total de navires par lieu
        SELECT LIEU_COD, LIEU_LIB, count(NAVIRE_COD) as NB_NAVIRES_TOT
        FROM [ma table]
        GROUP BY LIEU_COD, LIEU_LIB
     ) s1,
     (
        -- nombre de navires par lieu et par rayon d action
        SELECT  LIEU_COD, LIEU_LIB, RA_COD, RA_LIB, count(NAVIRE_COD) as NB_NAVIRES
        FROM [mes tables]
        WHERE [critères + jointure]
        GROUP BY LIEU_COD, LIEU_LIB, RA_COD, RA_LIB      
     ) s2
WHERE [mes criteres + jointure]
ORDER BY NB_NAVIRES_TOT ASC, GRA_RAYON ASC
erwan.bodere est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2008, 10h53   #12
BiM
Modératrice
 
Avatar de BiM
 
Femme
Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
Inscription : janvier 2005
Messages : 7 299
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 26
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

Informations forums :
Inscription : janvier 2005
Messages : 7 299
Points : 8 650
Points : 8 650
Alors rajoute un GROUP BY également dans ta requête

Comme ca, ce sera déjà trié par groupe.
__________________
__~{@ BiM - Modératrice "Business Intelligence" @}~
Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
___________.~{@ Lapine crétine @}~
BiM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2008, 11h05   #13
Membre éclairé
 
Inscription : novembre 2005
Messages : 385
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 385
Points : 362
Points : 362
Quel est l'intérêt d'ajouter un clause GROUP BY au sein de ma requête si j'ai déjà le résultat escompté avec une clause ORDER BY ?

En effet, ma requête renverra les mêmes résultats avec un GROUP BY ou avec un ORDER BY.

Le problème est que BIRT ne propose pas de solution permettant d'afficher dans les graphiques les résultats tels qu'ils sont retournés par la requête SQL lorsque l'on ajoute un regroupement au sein du graphique.



Ce screenshot montre l'interface de saisie que propose BIRT. Ce qu'il me faudrait, c'est pouvoir trier la série horizontale de catégories (row["LIEU_LIB"]) par nombre total de navires (row["NB_NAVIRES_TOT"]). Cela BIRT ne le permet pas !

De même, j'ai besoin d'afficher les rayons d'actions dans l'ordre suivant : Côtier, Mixte et Large. BIRT propose uniquement de trier sur le champ qui est affiché. Moi je voudrais afficher le champ row["GRA_LIB"] (libellé du rayon d'action) et trier ces libellés par un numéro d'ordre bien spécifique (row["GRA_RAYON"]).
erwan.bodere est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/02/2008, 17h02   #14
Membre éclairé
 
Inscription : novembre 2005
Messages : 385
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 385
Points : 362
Points : 362
J'ai essayé d'enlever le tri sur le regroupement dans le code XML du rapport :
Code :
1
2
 
<Sorting>Ascending</Sorting>
Voici ce que cela donne :


Le tri des axes est respecté mais hélas la coloration et la légende semble indiquer que le regroupement n'a pas eu lieu ...
erwan.bodere est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/02/2008, 10h33   #15
Membre éclairé
 
Inscription : novembre 2005
Messages : 385
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 385
Points : 362
Points : 362
J'ai trouvé une solution intermédiaire qui fonctionne. J'ai du ajouter un numéro d'ordre dans le libellé des lieux dans ma requête SQL.

Voici le résultat :



Et voici le bout de code SQL :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
SELECT s2.LIEU_COD, s1.LIEU_LIB, s2.RA_ORDRE, s2.RA_LIB, s2.NB_NAVIRES
FROM (
        -- nombre total de navires par lieux
        SELECT ANNEE, LIEU_COD, TO_CHAR(rownum, '09') || ' - ' || LIEU_LIB as LIEU_LIB, NB_NAVIRES_TOT
        FROM (
                SELECT ANNEE, LIEU_COD, LIEU_LIB, count(NAVIRE_COD) as NB_NAVIRES_TOT
                FROM [MA_TABLE]
                WHERE [MES_CRITERES]
                GROUP BY ANNEE, LIEU_COD, LIEU_LIB
                ORDER BY NB_NAVIRES_TOT DESC, LIEU_LIB ASC
             )
     ) s1,
     (
        -- nombre de navires par lieux et par rayon d action
        SELECT ANNEE, LIEU_COD, LIEU_LIB, RA_ORDRE, RA_LIB, count(NAVIRE_COD) as NB_NAVIRES
        FROM [MA_TABLE]
        WHERE [MES_CRITERES]
        GROUP BY ANNEE, LIEU_COD, LIEU_LIB, RA_ORDRE, RA_LIB     
     ) s2
WHERE (s1.ANNEE = s2.ANNEE AND s1.LIEU_COD = s2.LIEU_COD)
ORDER BY s1.LIEU_LIB DESC, RA_ORDRE ASC
Et voila
erwan.bodere est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h32.


 
 
 
 
Partenaires

Hébergement Web