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 :

soucis pour générer un tableau avec plusieurs éléments


Sujet :

BIRT

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 15
    Points : 9
    Points
    9
    Par défaut soucis pour générer un tableau avec plusieurs éléments
    Bonjour,

    Je me suis mis à Birt (sous linux) version 2.6 depuis quelques semaines.
    Et j'ai un soucis pour générer un tableau

    Ma table de données contient ces données :
    4 champs
    identifiants : string
    code : string
    date : date
    renseignement : string

    identifiants: code : Date : Renseignement
    1 : 1234 : 03/09/10 17:05 : Contact sur A
    1 : 1234 : 03/09/10 17:06 : Contact établi ok sur A
    1 : 1234 : 03/09/10 17:07 : Durée 00:01:45
    2 : 1111 : 03/09/10 17:15 : Contact sur A
    2 : 1111 : 03/09/10 17:16 : Contact établi Nok sur A
    2 : 1111 : 03/09/10 17:17 : Contact sur B
    2 : 1111 : 03/09/10 17:19 : Contact établi ok sur B
    2 : 1111 : 03/09/10 17:20 : Durée 00:03:45
    3 : 2222 : 03/09/10 17:30 : Contact sur A
    3 : 2222 : 03/09/10 17:32 : Contact établi ok sur A
    3 : 2222 : 03/09/10 17:32 : Durée 00:01:25
    4 : 1234 : 03/09/10 17:35 : Contact sur A
    4 : 1234 : 03/09/10 17:36 : Contact établi ok sur A
    4 : 1234 : 03/09/10 17:37 : Durée 00:01:43


    J'aimerai avoir comme donnée dans un tableau

    Pour chaque code le nombre de contact établi total et sa durée totale

    exemple

    Contact sur A
    code nb de contact durée
    1234 2 00:03:28
    2222 1 00:01:25

    Contact sur B
    code nb de contact durée
    1111 1 00:03:45


    Auriez vous une idée ?
    Je débute sur Birt, et aussi dans le monde de SQL..

    Je vous remercie par avance de votre aide.

  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 Groupes
    Il suffit de rajouter 2 groupes

    Un sur Type A machin
    Le 2e sur le code

    Rajouter un aggregat de type Count(Code) , niveau aggrégation groupe 2

    Par contre , si vous ne souhaitez pas tout découvrir à la dure , il faudrait peut être passer par la case tutoriel et/ou formation.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    Merci de ta réponse assez rapide Stefan,
    Je devrais passer par le tutoriel, mais hélas dans mon travail, on vient de me donner ce "bébé", avec aucune explication sous birt, eclispe, sql etc...
    et donne nous des beaux graphiques, de magnifiques tableaux, à partir d'une base de donnée. génial . et si possible pour demain au plus tard.

    Et question formation, faut pas en parler.

    Sinon je reviens à ta réponse, il faut créer 2 groupes, sincerement j'ai un peu de mal à comprendre ,
    J'ai créer un tableau croisé (cross tab) qui me met le total pour chaque code, mais je n'arrive pas à mettre mes totaux de durées
    car je n'arrive pas à différencier que cette durée correspond aux A ou au B, je n'ai que le champs identifiant qui peut faire la liaison.
    J'ai réussi à créer une colonne supplèmentaire pour mettre la durée en time (car au départ elle était en string) et là je cale.

    Merci de ton aide.

  4. #4
    Membre averti

    Inscrit en
    Avril 2010
    Messages
    178
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 178
    Points : 418
    Points
    418
    Par défaut
    Bonjour,

    A propos de ton besoin, je pense que tu as besoin de tableaux simples, et pas de tableaux croisés.

    Les groupes dont parle Stefan sont une propriété des tableaux : tu peux regrouper les données d'un tableau selon un critère (par exemple, ton champ identifiant). Tu peux définir plusieurs groupes les uns dans les autres. Pour créer un groupe, sélectionne ton tableau BIRT, va dans ses propriétés (via le property editor), tu trouveras un onglet "groupes".

    A propos de la mise en forme du tableau : lors de la craétion d'un groupe, BIRT rajoute dans ton tableau des lignes de "header" et "footer" de groupe : ce sont des lignes qui sont créées une fois par valeur différente du critère du groupe. En clair : pour ton groupe sur ton champ "identifiant", tu auras un header et un footer, dans lesquels tu peux mettre tes informations d'identifiant ou autre.

    A propos du calcul des valeurs : utilise la palette pour glisser-déposer une agrégation dans ton tableau, et essaie de comprendre comment la définir (la fonction : COUNT/SUM/etc ; le niveau de groupe : sur tout le tableau, pour chaque identifiant, etc).

    Sinon j'ai une question sur ton exemple, je ne comprends pas bien le modèle de données. Peux-tu expliquer ces lignes ?
    -->

    2 : 1111 : 03/09/10 17:15 : Contact sur A
    2 : 1111 : 03/09/10 17:16 : Contact établi Nok sur A
    2 : 1111 : 03/09/10 17:17 : Contact sur B
    2 : 1111 : 03/09/10 17:19 : Contact établi ok sur B
    2 : 1111 : 03/09/10 17:20 : Durée 00:03:45

    Ici je vois un seul identifiant, deux contacts, une seule durée. Et dans ton résultat :


    Contact sur A
    code nb de contact durée
    1234 2 00:03:28
    2222 1 00:01:25

    Je vois que tu n'as pas pris en compte l'identifiant 1111 pour A. Est-ce qu'il manque une info quelque part ? Une ligne de durée, ou autre ? Ca pourra influer la manière de faire tes calculs.

    A+

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    Exacte Nicolas, j'ai oublié d'ajouter une donnée essentielle,
    je ne prends pas en compte les contacts A qui ne sont pas établis.

    Donc en gros, dans le tableau

    Contact sur A (car elles cont ok)
    code nb de contact durée
    1234 2 00:03:28
    2222 1 00:01:25

    je ne prends pas le code 1111 car le contact est Nok
    et si le contact est ok sur B alors la durée va sur B

    J'espere que j'ai bien expliqué
    En tout cas merci de ton aide.

  6. #6
    Membre averti

    Inscrit en
    Avril 2010
    Messages
    178
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 178
    Points : 418
    Points
    418
    Par défaut
    Bonjour,

    Ta difficulté majeure provient de ta source de données : ta table originelle est faite pour afficher des informations (elle est lisible et compréhensible directement), mais elle n'est vraiment pas faite pour permettre le traitement des données. D'où cette question : as-tu le droit/les moyens de modifier le format de tes données sources ?

    Si oui, tu devras faire un travail de modélisation en SQL pour obtenir une source de données exploitable.

    Sinon, tu devras quand même faire de la remodélisation, avec les outils BIRT, mais ce sera difficile.

    A propos de cette remodélisation, pour résumer le problème : tes lignes ne contiennent pas toutes les informations permettant de les identifier, car ton champ "Renseignement" contient plusieurs types d'informations différentes, et pas simultanément (c'est à dire, tu n'as pas la durée et le nom du contact sur la même ligne). Ton seul lien entre ces informations est la date de chaque ligne, mais écrire un algorithme de type "associer chaque durée au contact correspondant à la ligne dont la date précède immédiatement la date de la ligne de la durée", c'est beaucoup plus compliqué à priori que de reformatter les données.
    Donc, si tu le peux, essaie d'obtenir une table de cette forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    identifiant | code | contact | date_debut     | date_etat      | date_fin       | etat | duree
    1           | 1234 | A       | 03/09/10 17:05 | 03/09/10 17:06 | 03/09/10 17:07 | ok   | 00:01:45
    2           | 1111 | A       | 03/09/10 17:15 | 03/09/10 17:16 |                | Nok  |
    2           | 1111 | B       | 03/09/10 17:17 | 03/09/10 17:19 | 03/09/10 17:20 | ok   | 00:03:45
    3           | 2222 | A       | 03/09/10 17:30 | 03/09/10 17:32 | 03/09/10 17:32 | ok   | 00:01:25
    4           | 1234 | A       | 03/09/10 17:35 | 03/09/10 17:36 | 03/09/10 17:37 | ok   | 00:01:43
    De cette manière, chaque ligne représente un contact. Ca rendrait le traitement très facile. D'autres modélisations sont possibles mais on verra si c'est faisable/souhaitable.

    Bon courage

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    Bonjour,

    J'avais pensé à cette idée, mais malheureusement je n'ai accès qu'en lecture, aucun moyen de la modifier.
    Je peux créer une autre table "perso" et avoir l'accès en écriture, sur le même serveur, et faire une réplication en la modifiant comme tu l'as écrit (en rajoutant un champ), et de faire des mises à jour de temps en temps ou en directe.
    Mais avant, je voulais savoir si c'était possible par Birt, afin si un autre cas se reproduisait...
    Je vais quand même essayer de chercher une astuce, sous birt pas possible de créer une table factice dommage, mais on peut ajouter des colonnes , voir de ce coté la...
    en tout cas merci de vos réponses.

  8. #8
    Membre averti

    Inscrit en
    Avril 2010
    Messages
    178
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 178
    Points : 418
    Points
    418
    Par défaut
    Désolé, je n'y connais rien en gestion SQL via BIRT, je ne pourrais pas t'aider.
    Bon courage.

  9. #9
    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 Table "factice"
    Bonjour,

    Vous avez plusieurs choix :

    1. Traiter ceci en SQL
    2. Traiter ceci en BIRT ( Computed Columns )
    3. Traiter ceci dans une couche de métadonnées ( BIRT Information Objects ).

    Les 2 premières approches sont gratuites et font partie de Eclipse BIRT. Il suffit de coder la transformation de la donnée en SQL ou Javascript. Si vous faites beaucoup de transformations , je recommande la solution 1). , Eclipse BIRT sans le reste de l'infrastructure Actuate n'est pas destiné à faire du traitement de données complexe et/ou volumétrique.

    La 3e est beaucoup plus puissante car vous permets de créer des "tables" virtuelles coté méta données et les exploiter de manière séparée de BIRT améliorant la performance et la maintenabilité de la chose. Solution payante par contre , c'est Actuate BIRT.

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    La 3ème solution me parait peu probable, car payante, je ne pense pas que mes responsables (tout en haut), m'offre ce service. (Débrouille toi avec ce que tu as..)
    sinon j'ai trouvé une solution pour palier ce problème, mais je pense que ça va être assez lourd au niveau perfomance.
    J'ai créé un "Data set1" avec la même table que "Data set" en ne prenant que les champs identifiants et renseignement et j'ai fait un select distinct sur les identifiants (puis un alias pour ne pas mélanger avec l'autre Data Set"), j'ai crée un nouveau champs, pour mettre une valeur indiquant le contact, et j'ai effectué une jointure entre ces deux "Data set".
    Ca à l'air de fonctionné pour le moment.

    Sinon encore une petite question, dans Computed Columns, "Expression" existe t'il une façon de vérifier un autre enregistrement ?
    je m'explique ,
    je vérifie, si j'ai dans renseignement j'ai "Contact sur A" alors je mets A dans un nouveau champs ("toto") sinon je vérifie l'enregistrement précédent du champs ("toto") si il y a "A" je mets "A" sinon je mets "B".
    Je sais que le premier enregistrement j'aurais dans le champs renseignement "Contact sur A".
    Est ce faisable ?

    Merci

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    229
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 229
    Points : 137
    Points
    137
    Par défaut
    Bonjour,

    Tu peux aussi simuler ta colonne "toto" dans ton code SQL avec un case when par exemple

    select identifiants, code, Date, Renseignement,
    case when Renseignement like 'Contact établi ok sur'% then Renseignement else '' end as toto from table

    Tu peux soit te servir de ce select comme vue et le reutiliser dans ton SQL, soit ramener tout ceci dans BIRT et manipuler tes données

    J'espere que cela pourra t'aider

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    Merci à vous tous, de m'avoir des directions. Je pense pouvoir m'en sortir.
    Birt est assez puissant pour faire du reporting par rapport à d autre "logiciel" et en plus il est gratuit. Mais au début il est peu déroutant.

    A bientôt.


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

Discussions similaires

  1. [XL-2010] Générer un tableau avec plusieurs tableaux
    Par redflowers90 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 09/06/2015, 16h04
  2. Réponses: 18
    Dernier message: 19/03/2014, 18h04
  3. "Tableau" avec plusieurs types de variables
    Par izguit dans le forum C++
    Réponses: 4
    Dernier message: 19/07/2007, 11h24
  4. [MySQL] pb pour générer un tableau
    Par Marcus15 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 12/07/2007, 10h57
  5. Réponses: 1
    Dernier message: 21/05/2007, 11h48

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