Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > Business Objects > Débuter
Débuter Forum d'entraide pour débuter avec Business Object
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 16/11/2011, 11h54   #1
Membre confirmé
 
Inscription : décembre 2002
Messages : 450
Détails du profil
Informations forums :
Inscription : décembre 2002
Messages : 450
Points : 265
Points : 265
Par défaut Comment exclure les doublons d'une table ?

Bonjour,

Dans ma table PRODUIT, j'ai comme champs :
- code produit
- un descriptif

Et dans cette table, je stocke également des données avec une granulité plus importante :
- un sous code produit
- un sous descriptif

Donc dans ma table, pour un produit spécifique, le descriptif de mon produit apparait en doublon, triplon (autant de ligne que de sous produit rattaché au produit 'TCGPA' ) :
Code :
SELECT DESCRIPTIF FROM PRODUIT WHERE CODE_PRODUIT = 'TCGPA'
Pour éviter ces doublons, en SQL, il suffit de faire une sous requête avec un distinct dans la clause FROM comme ici :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
SELECT
  DELEGATION.REGION,
  ANNEE_REFERENCE2.ANNEE_REFERENCE,
  FACTURATION_CLIENT.MONTANT,
  FACTURATION_CLIENT.ANNEE,
  FACTURATION_CLIENT.NIVEAU,
  PRODUIT.DESCRIPTION_PRODUIT
FROM
  DELEGATION,
  ANNEE_REFERENCE  ANNEE_REFERENCE2,
  FACTURATION_CLIENT,
  (SELECT DISTINCT DESCRIPTION_PRODUIT, PRODUIT, TYPE_FORMATION FROM PRODUIT) PRODUIT
WHERE
  ( FACTURATION_CLIENT.PRODUIT=PRODUIT.PRODUIT(+)  )
  AND  ( DELEGATION.CODE_DELEGATION(+)=FACTURATION_CLIENT.DELEGATION  )
  AND  ( FACTURATION_CLIENT.ANNEE=ANNEE_REFERENCE2.ANNEE  )
Sous Webi, il est possible de modifier manuellement la requête "Utiliser une requêt personnalisée". J'ai donc optée pour cette solution, cependant, je ne trouve pas cette solution très propre.

Existe t-il une solution mieux ?

J'espère avoir été sufisamment claire dans mes explications.
Je vous remercie par avance
weed est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2011, 12h08   #2
Modérateur
 
Avatar de djam21
 
Homme
Consultant en Business Intelligence
Inscription : janvier 2006
Messages : 560
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Luxembourg

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Finance

Informations forums :
Inscription : janvier 2006
Messages : 560
Points : 862
Points : 862
Envoyer un message via Skype™ à djam21
Ton objectif est de faire une requête comme celle-ci :

Code :
SELECT DESCRIPTIF FROM PRODUIT WHERE CODE_PRODUIT = 'TCGPA'
???

Dans Webi, si tu fais une requete ou tu ne ramènes que DESCRIPTIF, il appliquera un DISTINCT, donc ton souçi est réglé...
djam21 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2011, 12h39   #3
Membre confirmé
 
Inscription : décembre 2002
Messages : 450
Détails du profil
Informations forums :
Inscription : décembre 2002
Messages : 450
Points : 265
Points : 265
Nop du tout.
Mon objectif est de réaliser un tableau de bord avec :
- le descriptif de mes produits
- mais aussi la région de ma délégation
- le montant
- l'année

Les données que j'aimerais resortire corresponde au donnée de la grande requête de mon 1er post.

Pour le moment, comme solution dans Webi,
Dans le mode "Modifier la requête", je fais drag and drop des objets BO que je souhaite faire apparaitre
BO, a généré pour cela une reqête automatiquement avec les jointures qui vont bien entre les objets.

Je clique alors sur le bouton "SQL" et je modifie la reqête BO généré en remplaçant dans la clause FROM :
par
Code :
(SELECT DISTINCT DESCRIPTION_PRODUIT, PRODUIT, TYPE_FORMATION FROM PRODUIT) PRODUIT
Le problème est que je ne peux pas faire de distinct global parce que je fais un agregat sur le montant. Je calcul le montant par produit
weed est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2011, 14h28   #4
Modérateur
 
Avatar de djam21
 
Homme
Consultant en Business Intelligence
Inscription : janvier 2006
Messages : 560
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Luxembourg

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Finance

Informations forums :
Inscription : janvier 2006
Messages : 560
Points : 862
Points : 862
Envoyer un message via Skype™ à djam21
Pour laisser le dynamisme en place, pourquoi ne fais tu pas plusieurs requetes ?

Code :
1
2
3
4
 
Requete 1 = Produit + Montant
 
Requete 2 = Produit + Descriptif + ...
Pour ton tableau, tu lies tes produits et tu pourras utiliser les élements provenant de tes deux requetes...
djam21 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2011, 11h01   #5
Membre confirmé
 
Inscription : décembre 2002
Messages : 450
Détails du profil
Informations forums :
Inscription : décembre 2002
Messages : 450
Points : 265
Points : 265
Tout d'abord djam21, je tiens à te remercier de t'etre interessé à mes soucis ...

Donc dans mon cas, en reprenant la requête entière :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SELECT
  DELEGATION.REGION,
  ANNEE_REFERENCE2.ANNEE_REFERENCE,
  FACTURATION_CLIENT.MONTANT,
  FACTURATION_CLIENT.ANNEE,
  FACTURATION_CLIENT.NIVEAU,
  PRODUIT.DESCRIPTION_PRODUIT
FROM
  DELEGATION,
  ANNEE_REFERENCE  ANNEE_REFERENCE2,
  FACTURATION_CLIENT,
  (SELECT DISTINCT DESCRIPTION_PRODUIT, PRODUIT, TYPE_FORMATION FROM PRODUIT) PRODUIT
WHERE
  ( FACTURATION_CLIENT.PRODUIT=PRODUIT.PRODUIT(+)  )
  AND  ( DELEGATION.CODE_DELEGATION(+)=FACTURATION_CLIENT.DELEGATION  )
  AND  ( FACTURATION_CLIENT.ANNEE=ANNEE_REFERENCE2.ANNEE  )
La requete serait découpé en 2 requêtes "Webi" :

Requete 1 (en reprenant la sous requete) :
Code :
SELECT DESCRIPTION_PRODUIT, PRODUIT, TYPE_FORMATION FROM PRODUIT

Requete 2
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT
  DELEGATION.REGION,
  ANNEE_REFERENCE2.ANNEE_REFERENCE,
  FACTURATION_CLIENT.MONTANT,
  FACTURATION_CLIENT.ANNEE,
  FACTURATION_CLIENT.NIVEAU,
FROM
  DELEGATION,
  ANNEE_REFERENCE  ANNEE_REFERENCE2,
  FACTURATION_CLIENT,
WHERE
  AND  ( DELEGATION.CODE_DELEGATION(+)=FACTURATION_CLIENT.DELEGATION  )
  AND  ( FACTURATION_CLIENT.ANNEE=ANNEE_REFERENCE2.ANNEE  )

Dans la requête 2, j'ai donc supprimé :
- dans la clause FROM : la référence à la table Produit
- dans la clause SELECT : le champs produit
- dans la clause WHERE : la jointure de la table Produit

Ma question est :
Comment faire la jointure de ces 2 requêtes ?

Lorsque je souhaite affiché mon tableau de bord, je ne filtre pas produit comme tu peux le voire sur la capture
Images attachées
Type de fichier : jpg filtre.jpg (42,1 Ko, 4 affichages)
weed est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2011, 11h40   #6
Modérateur
 
Avatar de djam21
 
Homme
Consultant en Business Intelligence
Inscription : janvier 2006
Messages : 560
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Luxembourg

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Finance

Informations forums :
Inscription : janvier 2006
Messages : 560
Points : 862
Points : 862
Envoyer un message via Skype™ à djam21
Si je simplifie un peu, en faisant une requete comme çà :

Code :
1
2
3
SELECT produit, avg(montant)
FROM FACTURATION_CLIENT, PRODUIT
WHERE FACTURATION_CLIENT.produit = PRODUIT.produit
tu n'obtiens pas les résultats escompté avec çà ?

Si oui, c'est une piste... tu peux très bien travailler sur la méthode d'agrégation pour arriver à tes fins. Soit au niveau de l'univers, soit au niveau de l'état (en ramenant tes lignes démultipliées puis en divisant par le nombre de lignes récupérées par produit)...
djam21 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2011, 11h47   #7
Modérateur
 
Avatar de djam21
 
Homme
Consultant en Business Intelligence
Inscription : janvier 2006
Messages : 560
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Luxembourg

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Finance

Informations forums :
Inscription : janvier 2006
Messages : 560
Points : 862
Points : 862
Envoyer un message via Skype™ à djam21
J'y pense : j'imagine que tu as déjà essayé en cochant/décochant la case "extraire les doublons" dans les propriétés de ta requête ?
djam21 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2011, 14h15   #8
Membre confirmé
 
Inscription : décembre 2002
Messages : 450
Détails du profil
Informations forums :
Inscription : décembre 2002
Messages : 450
Points : 265
Points : 265
Citation:
Envoyé par djam21 Voir le message
Si je simplifie un peu, en faisant une requete comme çà :

Code :
1
2
3
SELECT produit, avg(montant)
FROM FACTURATION_CLIENT, PRODUIT
WHERE FACTURATION_CLIENT.produit = PRODUIT.produit
tu n'obtiens pas les résultats escompté avec çà ?
Nop.
J'ai en effet besoin des autres champs de clause SELECT

ANNEE_REFERENCE2.ANNEE_REFERENCE => N, N-1, N-2
et surtout j'ai besoin de connaitre la région affecté (Métropole, DOM TOM, ...)


Citation:
Envoyé par djam21 Voir le message
Si oui, c'est une piste... tu peux très bien travailler sur la méthode d'agrégation pour arriver à tes fins. Soit au niveau de l'univers, soit au niveau de l'état (en ramenant tes lignes démultipliées puis en divisant par le nombre de lignes récupérées par produit)...
Au niveau de l'univers, le problème est que cela impacterais sur d'autres tableau de bord qui n'ont pas de doublon car j'exploite le produit et sous produit.

Au niveau de l'état
Qu'entends tu par état ? dans Webi ?
weed est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2011, 14h19   #9
Membre confirmé
 
Inscription : décembre 2002
Messages : 450
Détails du profil
Informations forums :
Inscription : décembre 2002
Messages : 450
Points : 265
Points : 265
Citation:
Envoyé par djam21 Voir le message
J'y pense : j'imagine que tu as déjà essayé en cochant/décochant la case "extraire les doublons" dans les propriétés de ta requête ?
Comme c'est BO qui s'occupe de faire l'agrégat sur le champ FACTURATION_CLIENT.MONTANT, cela peut débloquer la situation.

Je teste. Je te tiens au courant.
weed est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2011, 14h35   #10
Modérateur
 
Avatar de djam21
 
Homme
Consultant en Business Intelligence
Inscription : janvier 2006
Messages : 560
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Luxembourg

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Finance

Informations forums :
Inscription : janvier 2006
Messages : 560
Points : 862
Points : 862
Envoyer un message via Skype™ à djam21
Au niveau de l'univers, pour les besoins de ton état, tu peux dupliquer ton objet que tu configureras en fonction de tes besoins. Puis tu le masques...

Au niveau de l'état : oui dans Webi. vu que ta requete ramène plusieurs lignes identiques, tu as la possibilité (si "extraire les doublons" ne marche pas) de compter le nombre de lignes identiques. A partir de là ta colonne indicateur sera :
Code :
=somme(indicateur) / nombredelignes
djam21 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2011, 17h50   #11
Membre confirmé
 
Inscription : décembre 2002
Messages : 450
Détails du profil
Informations forums :
Inscription : décembre 2002
Messages : 450
Points : 265
Points : 265
Pour le moment, je dois t'avouer que je modifie ma requête directement dans Wibi parce que je voulais avancer dans mon projet. Malheureusement, ce n'est pas très pratique et c'est pourquoi je reviens demander de l'aide sur ce point.

Citation:
Envoyé par djam21 Voir le message
Au niveau de l'univers, pour les besoins de ton état, tu peux dupliquer ton objet que tu configureras en fonction de tes besoins. Puis tu le masques...
Résoudre le problème au niveau de l'univers me tente. Cela me permettrait ainsi de l'appliquer sur tous mes rapports de manière transparente.

Dupliquer mon objet ?
Tu veux dire me créer un alias de mon OBJET_PRODUIT ?
C'est chose faite. Je me suis créé un alias nommé GAP_PRODUIT_FACTURATION mais je reste bloqué pour faire la jointure entre GAP_PRODUIT et GAP_PRODUIT_FACTURATION. Je vais toujours avoir mes doublons

J'ai dans ma table GAP_PRODUIT en doublon, voir triplons parce qu'un produit peut correspondre à un type de formation, et sous type de formation (cf 2ème capture)

Or dans mon tableau de bord, je ne vais exploiter l'information qu'au niveau du produit (son descriptif)

Comment donc faire la jointure dans Designer (cf 1ère capture)
Images attachées
Type de fichier : jpg jointure4.jpg (37,6 Ko, 2 affichages)
Type de fichier : jpg jointure5.jpg (16,4 Ko, 0 affichages)
weed est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h53.


 
 
 
 
Partenaires

Hébergement Web