IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

BIRT Discussion :

[2.2.1][Chart] Tri des résultats


Sujet :

BIRT

  1. #1
    Membre averti

    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    385
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 385
    Points : 321
    Points
    321
    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 Images attachées   

  2. #2
    Membre régulier
    Inscrit en
    Novembre 2005
    Messages
    173
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 173
    Points : 123
    Points
    123
    Par défaut
    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"]+...).

  3. #3
    Membre averti

    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    385
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 385
    Points : 321
    Points
    321
    Par défaut
    Voici le rendu espéré :




    Et voici ce que j'obtiens avec BIRT :



    Si vous avez une solution je suis preneur.
    Fichiers attachés Fichiers attachés

  4. #4
    BiM
    BiM est déconnecté
    Expert éminent sénior
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    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 796
    Points : 10 765
    Points
    10 765
    Par défaut
    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.

  5. #5
    Membre averti

    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    385
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 385
    Points : 321
    Points
    321
    Par défaut
    Ç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.

  6. #6
    Membre averti

    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    385
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 385
    Points : 321
    Points
    321
    Par défaut
    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

  7. #7
    BiM
    BiM est déconnecté
    Expert éminent sénior
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    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 796
    Points : 10 765
    Points
    10 765
    Par défaut
    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...

  8. #8
    Membre averti

    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    385
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 385
    Points : 321
    Points
    321
    Par défaut
    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 ?

  9. #9
    Membre du Club
    Inscrit en
    Octobre 2007
    Messages
    175
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 175
    Points : 57
    Points
    57
    Par défaut
    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!

  10. #10
    Membre du Club
    Inscrit en
    Octobre 2007
    Messages
    175
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 175
    Points : 57
    Points
    57
    Par défaut
    En fait essayez d'ajouter à ta source dse-s001 "SELECT .....order by NB_NAVIRES"

  11. #11
    Membre averti

    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    385
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 385
    Points : 321
    Points
    321
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  12. #12
    BiM
    BiM est déconnecté
    Expert éminent sénior
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    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 796
    Points : 10 765
    Points
    10 765
    Par défaut
    Alors rajoute un GROUP BY également dans ta requête

    Comme ca, ce sera déjà trié par groupe.

  13. #13
    Membre averti

    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    385
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 385
    Points : 321
    Points
    321
    Par défaut
    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"]).

  14. #14
    Membre averti

    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    385
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 385
    Points : 321
    Points
    321
    Par défaut
    J'ai essayé d'enlever le tri sur le regroupement dans le code XML du rapport :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 ...

  15. #15
    Membre averti

    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    385
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 385
    Points : 321
    Points
    321
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Audit journal sécurité et tri des résultats
    Par Dr.Wily dans le forum Sécurité
    Réponses: 0
    Dernier message: 15/12/2011, 11h17
  2. JPA : tri des résultats selon une fonction SQL
    Par if_zen dans le forum Glassfish et Payara
    Réponses: 6
    Dernier message: 05/05/2011, 14h20
  3. [MySQL] Affichage trié des résultats d'une table
    Par baggie dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 03/11/2009, 11h27
  4. [MySQL] Tri des résultats d'une requête
    Par gueud dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 21/02/2008, 18h22
  5. [MySQL] Tri des résultats chez Free.fr
    Par Valenten dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 04/01/2008, 16h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo