Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > Business Objects > Designer
Designer Forum d'entraide Designer (création d'univers, etc.)
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 10/01/2012, 10h36   #1
Responsable Business Intelligence
 
Avatar de TomDuBouchon
 
Homme Thomas Cochin
Consultant en Business Intelligence
Inscription : juin 2009
Messages : 3 281
Détails du profil
Informations personnelles :
Nom : Homme Thomas Cochin
Âge : 29
Localisation : France, Seine et Marne (Île de France)

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

Informations forums :
Inscription : juin 2009
Messages : 3 281
Points : 5 701
Points : 5 701
Par défaut "Encapsulage" de SELECT

Bonjour à tous,

Voilà une petite question pour vous (ça faisait longtemps )

Je ne pense pas qu'il y ait un moyen d'obtenir ce que je souhaite, mais si vous en connaissez un, je vous en prie :

Le but est en fait de réussir à "encapsuler" un SELECT FROM WHERE d'une table avant de réaliser une jointure entre table, de sorte que l'application d'une condition sur une table ne réduise pas l'utilisation d'une jointure externe à une jointure interne...

Ex : Voilà des données de base
Code :
1
2
3
4
5
6
7
8
SELECT TAB1.NOM, TAB2.DOM
FROM
(SELECT 'TOTO' AS NOM FROM DUAL
UNION ALL SELECT 'TITI' AS NOM FROM DUAL
UNION ALL SELECT 'TATA' AS NOM FROM DUAL) TAB1,
(SELECT 'TOTO' AS NOM, 'MAISON' AS DOM FROM DUAL 
UNION ALL SELECT 'TITI' AS NOM, 'TRAVAIL' AS DOM FROM DUAL) TAB2
WHERE TAB1.NOM = TAB2.NOM(+);
Sur cet exemple, on a une jointure externe avec 3 lignes en résultat.

Si on applique une condition sur le champ DOM de TAB2 : par exemple DOM = 'MAISON' :
Code :
1
2
3
4
5
6
7
8
SELECT TAB1.NOM, TAB2.DOM
FROM
(SELECT 'TOTO' AS NOM FROM DUAL
UNION ALL SELECT 'TITI' AS NOM FROM DUAL
UNION ALL SELECT 'TATA' AS NOM FROM DUAL) TAB1,
(SELECT 'TOTO' AS NOM, 'MAISON' AS DOM FROM DUAL 
UNION ALL SELECT 'TITI' AS NOM, 'TRAVAIL' AS DOM FROM DUAL) TAB2
WHERE TAB1.NOM = TAB2.NOM(+) AND TAB2.DOM = 'MAISON';
On a plus qu'une seule ligne. (Logique)

Ma question est donc est-il possible de simuler le code suivant, en encapsulant la condition dans un SELECT "primaire", avant application de la jointure externe :
Code :
1
2
3
4
5
6
7
8
9
SELECT TAB1.NOM, TAB2.DOM
FROM
(SELECT 'TOTO' AS NOM FROM DUAL
UNION ALL SELECT 'TITI' AS NOM FROM DUAL
UNION ALL SELECT 'TATA' AS NOM FROM DUAL) TAB1,
(SELECT NOM, DOM FROM
(SELECT 'TOTO' AS NOM, 'MAISON' AS DOM FROM DUAL 
UNION ALL SELECT 'TITI' AS NOM, 'TRAVAIL' AS DOM FROM DUAL) WHERE DOM = 'MAISON') TAB2
WHERE TAB1.NOM = TAB2.NOM(+)
La on voit que j'ai bien mes 3 lignes, mais en ne ramenant que les DOM = 'MAISON'.

Quel est l'intérêt vous allez me dire... Et bien dans mon exemple : Aucun, clairement. Par contre, cela peut prendre tout son sens si on imagine que TAB1 est une table calendrier, et que l'on souhaite ramener toutes les occurrences de dates et en croisant les données avec une TAB2 sur laquelle se pose des conditions.

Je sais pour avoir répondu maintes et maintes fois sur ce forum qu'il est possible de passer par une requête de référence directement dans le Reporter. Mais cela impose d'avoir également en produit cartésien tous les éléments disponibles en dimension dans TAB2, ce qui n'est quand même pas très pratique. Je cherche donc un moyen d'automatiser cela et qui réponde correctement quel que soit le cas de figure.

Merci d'avance pour vos réponses
__________________
Pensez à consulter les FAQs BI, les Tutoriels BI et à effectuer des Recherches.
Un message vous a aidé ? Votez en cliquant sur
Votre problème est résolu ? Merci de l'indiquer en cliquant sur le bouton
Vous souhaitez contribuer à la rubrique BI ? Contactez-moi ou un autre responsable de l'équipe BI par MP.
TomDuBouchon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2012, 11h54   #2
Modérateur
 
Avatar de Julien59
 
Julien Lizzul
Inscription : mars 2008
Messages : 1 103
Détails du profil
Informations personnelles :
Nom : Julien Lizzul
Âge : 25
Localisation : France, Nord (Nord Pas de Calais)

Informations forums :
Inscription : mars 2008
Messages : 1 103
Points : 1 295
Points : 1 295
Hello Tom !

Ravi de peut être pouvoir t'aider
Je pense que c'est possible en mettant une table dérivée à la place de TAB2, qui donnerait un truc du genre :
Code :
1
2
3
(SELECT NOM, DOM FROM
(SELECT 'TOTO' AS NOM, 'MAISON' AS DOM FROM DUAL 
UNION ALL SELECT 'TITI' AS NOM, 'TRAVAIL' AS DOM FROM DUAL) WHERE DOM = @prompt('DOM ?','A',........))
Après, comme je ne sais pas exactement quelle utilisation tu veux en faire, c'est pas évident

Ca te donne au moins une piste
__________________
  • Pensez à consulter la FAQ BO
  • Quand votre problème est solutionné, n'oubliez pas de cliquer sur le bouton
Julien59 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2012, 13h37   #3
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
D'accord avec Julien...

Tu peux t'en sortir grâce aux tables dérivées...
djam21 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2012, 15h59   #4
Responsable Business Intelligence
 
Avatar de TomDuBouchon
 
Homme Thomas Cochin
Consultant en Business Intelligence
Inscription : juin 2009
Messages : 3 281
Détails du profil
Informations personnelles :
Nom : Homme Thomas Cochin
Âge : 29
Localisation : France, Seine et Marne (Île de France)

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

Informations forums :
Inscription : juin 2009
Messages : 3 281
Points : 5 701
Points : 5 701
Merci bien à vous deux. Effectivement ça fonctionne très bien lorsqu'on utilise une table dérivée... A partir du moment où on prompte les conditions.

Mais en fait, le but ce serait de ne pas utiliser les @prompt mais les conditions sous le générateur de requêtes.

Ca se complique
__________________
Pensez à consulter les FAQs BI, les Tutoriels BI et à effectuer des Recherches.
Un message vous a aidé ? Votez en cliquant sur
Votre problème est résolu ? Merci de l'indiquer en cliquant sur le bouton
Vous souhaitez contribuer à la rubrique BI ? Contactez-moi ou un autre responsable de l'équipe BI par MP.
TomDuBouchon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2012, 16h48   #5
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 c'est un besoin unique, tu ne peux pas faire tes conditions en dur dans ta table dérivée ?
djam21 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2012, 10h46   #6
Modérateur
 
Avatar de Julien59
 
Julien Lizzul
Inscription : mars 2008
Messages : 1 103
Détails du profil
Informations personnelles :
Nom : Julien Lizzul
Âge : 25
Localisation : France, Nord (Nord Pas de Calais)

Informations forums :
Inscription : mars 2008
Messages : 1 103
Points : 1 295
Points : 1 295
Idem, selon le besoin, tu peux tenter par un sous select je pense.
Au pire, s'il y'a 2 champs pour ton test, tu crées un objet qui concatène les 2 et tu l'utilises pour ta sous-requête.
__________________
  • Pensez à consulter la FAQ BO
  • Quand votre problème est solutionné, n'oubliez pas de cliquer sur le bouton
Julien59 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2012, 14h00   #7
Responsable Business Intelligence
 
Avatar de TomDuBouchon
 
Homme Thomas Cochin
Consultant en Business Intelligence
Inscription : juin 2009
Messages : 3 281
Détails du profil
Informations personnelles :
Nom : Homme Thomas Cochin
Âge : 29
Localisation : France, Seine et Marne (Île de France)

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

Informations forums :
Inscription : juin 2009
Messages : 3 281
Points : 5 701
Points : 5 701
Malheureusement, le but est d'essayer d'automatiser le système afin qu'il puisse s'adapter à n'importe quel cas de figure... Donc, je ne peux pas mettre de conditions en dur...

C'est pourquoi je ne pense pas que cela soit faisable...
__________________
Pensez à consulter les FAQs BI, les Tutoriels BI et à effectuer des Recherches.
Un message vous a aidé ? Votez en cliquant sur
Votre problème est résolu ? Merci de l'indiquer en cliquant sur le bouton
Vous souhaitez contribuer à la rubrique BI ? Contactez-moi ou un autre responsable de l'équipe BI par MP.
TomDuBouchon 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 09h28.


 
 
 
 
Partenaires

Hébergement Web