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.5.2] Période variable dans un bar chart


Sujet :

BIRT

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 80
    Points : 45
    Points
    45
    Par défaut [2.5.2] Période variable dans un bar chart
    Bonjour,

    J'ai un data set qui me renvoi deux attributs : un nombre, et une date
    J'ai créé un bar chart qui à pour abscisse la date et en ordonnée le nombre.

    Jusque là tout va bien mais ce que je voudrais faire c'est à la place des dates avoir des périodes et de plus les périodes seraient de taille variable..

    Par exemple au lieu de me dire "Janvier" "Février" ... il me mettrait "1mois" "entre 2 et 4 mois" "plus de 5mois"

    un truc qui ressemblerai à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    3 |------------------|----------------------
    2 |-----|------------|----------------------
    1 |-----|------------|-------------|--------
           1mois     2 a 4mois     >5mois
    est-ce possible ? Et si oui comment ?

    Merci

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Avril 2008
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 143
    Points : 1 353
    Points
    1 353
    Par défaut colonne calculée
    C'est pas dans le chart qu'il faut le faire mais dans les données.

    Une simple colonne calculée devrait faire l'affaire.

    Ca peut se faire dans le SQL ( Case when bla bla ) ou dans BIRT ( onglet Computed Columns sur le Dataset ).

    Si c'est beaucoup de données , privilégier le SQL.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 80
    Points : 45
    Points
    45
    Par défaut
    j'avais pensé faire un truc dans ce genre là mais j'ai pas trouvé comment du fait que les périodes sont variables (de plus en plus grandes).
    Peux-tu expliquer un peu plus précisément l'idée s'il te plait ?

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 80
    Points : 45
    Points
    45
    Par défaut
    je suis a court d'idées j'ai essayé de faire des computed columns, de rajouter des colonnes qui compte en fonction de la date,
    j'ai cherché mais impossible de les regrouper ensuite, j'ai cherché dans les options mais j'ai rien trouvé.
    Je suis en trin de me casser les dents sur ce problème qui doit même pas être si compliqué.

  5. #5
    Membre expérimenté

    Profil pro
    Inscrit en
    Avril 2008
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 143
    Points : 1 353
    Points
    1 353
    Par défaut Détails
    Sans que tu nous donnes un minimum de détails... on ira pas très loin.

    Tes "périodes" , il y a quoi comme algorithme de génération?

    Juste "variable" c'est un peu trop vague. Variable par rapport à quoi?

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 80
    Points : 45
    Points
    45
    Par défaut
    grosso modo, j'ai une table qui contient un identifiant et une date. lorsqu'on rajoute un identifiant (unique) on rajoute a coté une date(pas forcément unique).

    j'ai besoin d'afficher dans mon graphique le nombre d'identifiants qui ont été ajoutés il y a moins d'un mois puis le nombre d'identifiants qui ont été ajoutés il y a entre 2 et 3 mois puis ceux qui ont été ajoutés entre 4 et 6 mois puis ceux entre 7 et 12mois et ceux qui ont été ajoutés il y a plus de 12mois.

    Je n'ai donc pas d'algorithme générant les périodes, c'est là mon problème, ce sont des intervalles de temps pris de façon subjective.
    Et mon but est de regrouper mes dates en fonction de ces intervalles que j'aurais défini moi même.

    Je ne sais pas si j'ai été plus clair

    Edit : je rajoute en pièce jointe les deux graphiques (celui que j'ai obtenu et celui que j'aimerai avoir)
    Images attachées Images attachées  

  7. #7
    Membre expérimenté

    Profil pro
    Inscrit en
    Avril 2008
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 143
    Points : 1 353
    Points
    1 353
    Par défaut Colonne calculée
    Il faut créer une catégorie calculée.

    En gros un truc du style CASE...WHEN en SQL. + un GROUP BY sur la colonne calculée et l'agrégation qui va avec.

    les données vont être du style :

    Janvier 10 1-6 mois
    Mai 15 6-9 mois
    Décembre 7 9-12 mois
    Mars 3 1-6 mois

    ensuite dans ton graphe tu utilises les 2 dernières colonnes.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 80
    Points : 45
    Points
    45
    Par défaut
    d'accord, je commence a comprendre ce que tu veux dire il faut que je me fasse quelque lignes de pl/sql mais peut-on le faire dans le designer ou faut-il que je passe par la DEAPI pour faire ça en java ?

  9. #9
    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
    Tu n'es pas obligé de passé par le DE API. Tout ce qui est faisable en DE API l'est dans le Designer

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 80
    Points : 45
    Points
    45
    Par défaut
    enfin une bonne nouvelle ^^ parce que la mise en page avec la DE API est des plus désagréables.
    Bon dans tous les cas je vais chercher dans ce sens là. Si jamais vous avez des précisions sur comment faire n'hésitez pas a me les transmettre parce que là j'y vais franchement a taton.

    Dans tous les cas merci.

  11. #11
    Membre expérimenté

    Profil pro
    Inscrit en
    Avril 2008
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 143
    Points : 1 353
    Points
    1 353
    Par défaut Heu ???
    ya pas besoin d'API ici , sais pas pourquoi vous souhaitez aller dans ces délires techniques , ce que tu souhaite faire c'est simple coté BIRT.

    C'est du bon vieux SQL + le Designer, un chart classique quoi.

    Si tu ne maitrises pas le SQL pour faire le dataset en question, il y a un forum SQL sur développez pour te faire assister.

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 80
    Points : 45
    Points
    45
    Par défaut
    non non le SQL je devrais y arriver j'en ai assez mangé comme ça.
    Je ne tiens absolument pas a aller sur l'API au contraire, je préfère le bon vieux designer qui te fais des mises en pages impeccables et sans problèmes,
    seulement je le maitrise moins que le java donc je sais mieux ce qu'il est possible de faire et ce qui ne l'est pas.
    A moins que j'ai compris de travers, je suis en train de me pencher sur un scripted data set.

  13. #13
    Membre expérimenté

    Profil pro
    Inscrit en
    Avril 2008
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 143
    Points : 1 353
    Points
    1 353
    Par défaut non
    C'est pas un Scripted Dataset.

    C'est un Dataset normal sur la base de données , la colonne calculée se fait dans SQL , pas dans Java.

    C'est possible de le faire dans un Scripted aussi, mais je déconseille totalement des faire des agrégations dans le moteur BIRT ( pas performant du tout ) alors que vous avez une base de données derrière pour ça.

    Au pire , vous pouvez faire une vue dans la base qui vous fait le travail nickel ( ou proc stoc etc. ).

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 80
    Points : 45
    Points
    45
    Par défaut
    Merci beaucoup ! j'ai enfin mes intervalles impeccable ! Il me reste un ultime soucis c'est pour les trier, en effet il ne se rangent pas dans l'ordre logique (normal, ce ne sont que des chaines de caractères) je vais tenter peut être un autre case pour mettre une valeur correspondant a chaque catégorie pour après les ranger par cette valeur je vous tient au courant.
    Voila ma requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    select d.identifiant,d.date,
    	   case when d.date >= ? then '<1 mois'
    			when d.date < ? and d.date >= ? then '2 a 3 mois'
    			when d.date < ? and d.date >= ? then '4 a 6 mois'
    			when d.date < ? and d.date >= ? then '7 a 12 mois'
    			when d.date < ? then '>12 mois'
    	   end as intervalle
    from donnee d

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 80
    Points : 45
    Points
    45
    Par défaut
    bizarre, dans l'aperçu il me les range bien comme il faut par contre lors de la vrai visualisation il ne les range pas correctement.
    De plus je me suis rendu compte que je n'ai pas de données pour la période "<1 mois" mais je voudrais quand même que la période s'affiche.
    Je continue a chercher, je touche au but

    Edit : C'est bon, j'ai changé l'expression agrégative de SUM en Average.
    Par contre reste le problème de la période qui ne s'affiche pas.

  16. #16
    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
    As-tu possibilité de joindre ton rapport stp ?

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 80
    Points : 45
    Points
    45
    Par défaut
    voila le rptdesign mais la base de donnée est en local.

  18. #18
    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
    Bon personnellement, j'aurais fait ca de façon plus simple et dans des computed column plutôt que dans la requête (deux fois le case en plus, c'est un peu lourd).

    Voici la solution que je te propose :
    • Dans ton DataSet, tu mets ceci comme requête :
      Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      select d.identifiant, d.date
      from donnee d;
      Note : Ton ancienne requête faisait des cas trop exigeants, tu pouvais les rendre plus simples et plus courts à exécuter.
    • Au passage, tous tes paramètres deviennent inutiles, tu peux les supprimer.
    • Ensuite, tu crées deux colonnes calculées :
      • Periode de type String avec comme expression ""
      • Ordre de type Integer avec comme expression 0
    • Ensuite, on va donner la valeur aux colonnes calculées dans le script onFetch du DataSet. On ne le fait pas directement dans le expression pour éviter de comparer deux fois la date pour une même ligne, il n'y a pas de petites économies. Donc on écrit le script suivant dans le onFetch :
      Code JavaScript : 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
      nbMois = BirtDateTime.diffMonth(row["date"], BirtDateTime.today());
       
      if (nbMois <= 1) {
      	row["Periode"] = "< 1 mois";
      	row["Ordre"] = 1;
      }
      else if (nbMois <= 3) {
      	row["Periode"] = "2 - 3 mois";
      	row["Ordre"] = 2;
      }
      else if (nbMois <= 6) {
      	row["Periode"] = "4 - 6 mois";
      	row["Ordre"] = 3;
      }
      else if (nbMois < 12) {
      	row["Periode"] = "7 - 12 mois";
      	row["Ordre"] = 4;
      }
      else {
      	row["Periode"] = "> 12 mois";
      	row["Ordre"] = 5;
      }
    • Tu bindes ton graphique sur ce DataSet et tu mets :
      • Category X Series : row["Periode"]
      • Group and sorting de category X Series :
        • Data Sorting : Ascending
        • Sort On : row["Ordre"]
        • Décoches de Grouping Enabled


    Plusieurs économies à constater :
    • Une seule fois la lecture des 5 cas pour chaque ligne (contre 2 avant)
    • Une seule comparaison par plage de dates (contre 1 à 2 avant pour voir si on était dans les bornes)
    • Pas d'initialisation d'une quinzaine de paramètres avec calcul

  19. #19
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 80
    Points : 45
    Points
    45
    Par défaut
    ça semble effectivement bien plus efficace que ce que j'ai fait, je vais d'ailleurs mettre cela en place.
    Mais il me semble que ça n'empêchera pas la disparition d'une période si il n'y a pas de données qui vont se ranger dedans.
    Vois tu ce que je veux dire ?

  20. #20
    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
    Oui, je vais y réfléchir...

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. probléme dans le bar chart (zedgraph)
    Par saraenim dans le forum Windows Forms
    Réponses: 1
    Dernier message: 24/04/2008, 12h26
  2. ecrire variable dans une progress bar
    Par noakiss dans le forum VBA Access
    Réponses: 14
    Dernier message: 03/04/2008, 09h14
  3. comment recuperer une variable dans flash
    Par krépuscul dans le forum Flash
    Réponses: 30
    Dernier message: 16/10/2003, 09h40
  4. Réponses: 13
    Dernier message: 14/06/2003, 22h15
  5. [syntaxe] Gerer les variables dans une requete
    Par rastapopulos dans le forum MS SQL Server
    Réponses: 12
    Dernier message: 15/04/2003, 12h53

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