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 23/08/2011, 12h33   #1
Invité de passage
 
Homme
Inscription : août 2011
Messages : 3
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : août 2011
Messages : 3
Points : 1
Points : 1
Par défaut Supprimer doublons dans une table !

Bonjour,

Voici l'énoncé :
J'utilise BIRT 2.3.1
J'utilise le designer.

Alors, j'ai une requêtes sur deux bases différentes qui me renvoie le résultat suivant:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
+------------------------+------------------------+
| personneBDD1           |   personneBDD2           
+------------------------+------------------------+
|    Toto                          jean                
|------------------------+------------------------+
|    Toto                          jack                
|------------------------+------------------------+
|    Toto                          michel              
|------------------------+------------------------+
|    Toto                          Toto            
|------------------------+------------------------+
(Je ne vais pas rentrer dans le détail de pourquoi la requête renvoi un résultat comme cela car fonctionnellement c'est long à expliquer et prend en compte plusieurs tables.)

Je met ce résultat dans un dataset qu'on va appeller 'Personne'.

Ce dataset Personne est après mis dans une table qui correspond à la colonne Personne de mon report .

Mon problème est le suivant :

Je souhaite afficher dans ma colonne personne le résultat suivant :
Code :
1
2
3
4
5
 
Si personneBDD1 est NULLE
             Alors DataSetRow["personneBDD2"]
SINON
             Alors DataSetRow["personneBDD1"]
cela fonctionne bien si la colonne personneBDD1 est nulle je récupère toutes les personnes dans BDD2, sauf que si
personneBDD1 n'est pas NULL alors je me retrouve avec ce champ répété autant de fois que dans le résultat de la requête (ce qui est normal) ==> du coup je cherche un moyen pour supprimer les doublons à l'aide de BIRT.

J'ai trouvé un solution en utilisant le row.__rownum => Ainsi si personneBDD1 est non NULL, je récupère uniquement l'élément dont le row.__rownum == 0 !

Cela marche, mais quand j'exporte mon report sous format xls : la colonne Personne contient bien l'element non dédoublonné mais aussi 3 lignes vides (j'imagine que cela correspond aux lignes non récupérés) ,du coup ce n'est pas terrible quand on veut faire des tris avec excel.

Je ne sais pas si j'ai été assez clair (je l'espère), n'hésitez à me poser des questions si jamais vous n'avez pas bien compris.

PS : j'ai essayé aussi de faire un groupe sur l'élément table de la colonne personne mais sans succès.

Merci par avance pour votre aide ou vos idée
S.Lay est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/08/2011, 08h22   #2
rsc
Membre émérite
 
Avatar de rsc
 
Homme
Développeur informatique
Inscription : juin 2004
Messages : 697
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 61
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2004
Messages : 697
Points : 871
Points : 871
Pour faire le dédoublonnage au niveau Birt, je ne sais pas si c'est possible. Pour ma part, j'essaierais de le faire faire par ma requête SQL :
Code :
SELECT DISTINCT COALESCE(PersonneBDD1, PersonneBDD2) FROM ...
__________________
Roland
rsc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/08/2011, 09h40   #3
Invité de passage
 
Homme
Inscription : août 2011
Messages : 3
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : août 2011
Messages : 3
Points : 1
Points : 1
Salut Roland et merci pour ta réponse,

le
Code :
SELECT DISTINCT COALESCE(PersonneBDD1, PersonneBDD2,...,valueN) FROM ...
Renvoi la première valeur non null d'une liste d'éléments. Ce n'est pas mon besoin.

En effet, si j'utilise le COALESCE il va s'appliquer sur chaque ligne du résultat dessus donc je me retrouverai toujours avec des lignes dupliquées pour personnesbdd1. Le problème n'est pas quand personneBDD1 est null mais non null
S.Lay est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/08/2011, 10h20   #4
rsc
Membre émérite
 
Avatar de rsc
 
Homme
Développeur informatique
Inscription : juin 2004
Messages : 697
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 61
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2004
Messages : 697
Points : 871
Points : 871
Citation:
Envoyé par S.Lay Voir le message
En effet, si j'utilise le COALESCE il va s'appliquer sur chaque ligne du résultat dessus donc je me retrouverai toujours avec des lignes dupliquées pour personnesbdd1. Le problème n'est pas quand personneBDD1 est null mais non null
Effectivement, COALESCE se contente d'appliquer dans la requête le mécanisme que tu mettais en oeuvre dans ta liaison de données. Mais l'intérêt (à mon sens) est que ta requête ne renvoie plus qu'une colonne, et que tu peux appliquer le DISTINCT, qui, à moins que les choses aient bien changé va se charger du dédoublonnage.

Ceci dit, ne connaissant pas l'ensemble de la requête, il est difficile de dire ce qui se passera exactement.
__________________
Roland
rsc est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 25/08/2011, 12h17   #5
Invité de passage
 
Homme
Inscription : août 2011
Messages : 3
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : août 2011
Messages : 3
Points : 1
Points : 1
Citation:
Envoyé par rsc Voir le message
Mais l'intérêt (à mon sens) est que ta requête ne renvoie plus qu'une colonne, et que tu peux appliquer le DISTINCT, qui, à moins que les choses aient bien changé va se charger du dédoublonnage.
Je crois que je n'ai pas bien lu donc saisi au départ, mais en relisant ta réponse, Effectivement ce n'est pas du tout bête je n'y avais pas pensé au départ, mais effectivement un select distinct coalesce(personnebdd1, personnebdd2) ne renverra qu'une seule colonne et si jamais la première est nulle je recupere la deuxième sinon je récupère la première non dupliquée du coup plus besoin d'algo dans le binding ==>Roland, belle astuce merci
S.Lay 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 16h36.


 
 
 
 
Partenaires

Hébergement Web