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

Designer Discussion :

Jointure externe complexe ou théta-jointure externe [VxiR2]


Sujet :

Designer

  1. #1
    Membre averti Avatar de ouistitis
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Morbihan (Bretagne)

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

    Informations forums :
    Inscription : Mars 2009
    Messages : 93
    Points : 341
    Points
    341
    Par défaut Jointure externe complexe ou théta-jointure externe
    Bonjour à tous.

    J'ai une table des temps reliée à une table dérivée qui calcule leurs tranches à partir de valeurs minimum et maximum. Voici la liste de toutes les tranches (0 à 240) :



    La table dérivée est un "SELECT FROM DUAL" inspiré du calendrier BO.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     WHERE table_de_fait.temps (+) >= "Table_dérivée".tranche_min 
       AND table_de_fait.temps (+) <  "Table_dérivée".tranche_max
    Tant que j'utilise les 2 tables, la requête me ramène bien tous les enregistrements désirés (tranches de 0 à 80, mais aussi de 20 à 40 et de 80 à 240).



    Par contre, dès que j'utilise une 3ème table, la requête ne m'affiche plus que les tranches concernées par la table de fait (de 0 à 80). J'obtiens ceci :



    Comment afficher TOUTES les tranches, même celles qui n'ont pas de correspondance malgré les autres jointures (qui n'ont rien d'externe) ?

    L'univers a un schéma en étoile.

    Merci d'avance pour votre aide.
    *** Ouistitis ***
    « Le vrai danger, ce n'est pas quand les ordinateurs penseront comme les hommes,
    c'est quand les hommes penseront comme les ordinateurs. » Sydney Justin Harris

  2. #2
    Rédacteur
    Avatar de TomDuBouchon
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juin 2009
    Messages
    3 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine et Marne (Île de France)

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 343
    Points : 5 848
    Points
    5 848
    Par défaut
    Bonjour,

    Pourrais-tu poster le SQL généré par ta requête ? (au niveau des jointures simplement)
    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

  3. #3
    Membre averti Avatar de ouistitis
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Morbihan (Bretagne)

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

    Informations forums :
    Inscription : Mars 2009
    Messages : 93
    Points : 341
    Points
    341
    Par défaut
    Merci pour ta réponse, Tom.

    Voici donc la requête générée par BO. L'ajout de la table "TEMPS" m'enlève tout le bénéfice de la jointure externe.

    Code SQL : 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
    23
    SELECT   TO_CHAR (temps.date_jour, 'DAY') jour_semaine,          
             table_de_fait.temps, 
             "Table_dérivée".mini, 
             "Table_dérivée".maxi,
             "Table_dérivée".tranche
        FROM (SELECT     (   TO_CHAR ((0 + (ROWNUM - 1)) * '20')
                          || '-'
                          || (0 + ROWNUM) * '20'
                         ) tranche,
                         ((0 + (ROWNUM - 1)) * '20') mini,
                         ((0 + ROWNUM) * '20') maxi
                    FROM DUAL
              CONNECT BY ROWNUM < NVL (TO_NUMBER ('12'), 12)) "Table_dérivée",
             table_de_fait,
             temps
       WHERE (table_de_fait.jour = temps.date_jour)
         AND (table_de_fait.temps (+) >= "Table_dérivée".mini
              AND table_de_fait.temps (+) < "Table_dérivée".maxi)
    GROUP BY TO_CHAR (temps.date_jour, 'DAY'),
             table_de_fait.temps,
             "Table_dérivée".mini,
             "Table_dérivée".maxi,
             "Table_dérivée".tranche ;

    On dirait que le simple fait de relier la table de fait à une autre table inhibe les jointures externes ?
    *** Ouistitis ***
    « Le vrai danger, ce n'est pas quand les ordinateurs penseront comme les hommes,
    c'est quand les hommes penseront comme les ordinateurs. » Sydney Justin Harris

  4. #4
    Rédacteur
    Avatar de TomDuBouchon
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juin 2009
    Messages
    3 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine et Marne (Île de France)

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 343
    Points : 5 848
    Points
    5 848
    Par défaut
    OK... Oui c'est donc normal, la jointure n'étant pas externe entre ta table de fait et ta table temps. Si on réfléchit en terme de ligne :
    table dérivée | table de fait | temps
    20-40 | 35 | jeudi
    40-60 | 55 | samedi
    60-80 | null | null
    La jointure entre ta table de fait et ta table temps imposant la présence de données entre ceux deux tables, la ligne 60-80 de ta table dérivée va sauter.

    Donc à part en mettant une jointure externe entre la table de fait et la table temps, il n'y a pas vraiment de solution en gardant cette architecture.

    Cependant, si le but de l'insertion de cette table temps est simplement d'afficher le libellé du jour, je te conseille de retirer cette table temps afin de retrouver tes données, et ensuite dans ton rapport de créer une variable avec la formule suivante :
    Où <Jour> est l'objet correspondant au code :
    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

  5. #5
    Membre averti Avatar de ouistitis
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Morbihan (Bretagne)

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

    Informations forums :
    Inscription : Mars 2009
    Messages : 93
    Points : 341
    Points
    341
    Par défaut
    C'est bien ce qu'il me semblait... Non, le but n'est pas de mettre uniquement les temps, j'ai encore d'autres tables reliées (clients, sociétés, usines, etc) avec plusieurs indicateurs.

    J'ai un tableau et un graphique dans lesquels les utilisateurs veulent voir apparaître toutes les tranches.



    Ici, il manque la tranche 20-40 ainsi que celles au-dessus de 80. Les clients veulent voir les "trous" dans l'évolution globale.

    Ce n'est qu'un exemple parmi d'autres, j'ai plusieurs rapports dans le même style mais avec des données différentes.

    Merci encore pour ta réponse !
    *** Ouistitis ***
    « Le vrai danger, ce n'est pas quand les ordinateurs penseront comme les hommes,
    c'est quand les hommes penseront comme les ordinateurs. » Sydney Justin Harris

  6. #6
    Rédacteur
    Avatar de TomDuBouchon
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juin 2009
    Messages
    3 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine et Marne (Île de France)

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 343
    Points : 5 848
    Points
    5 848
    Par défaut
    Dans ce cas, tu peux essayer avec une requête de référence.
    Dans celle-ci il faut ramener toutes les valeurs possibles de temps ainsi que toutes les valeurs possibles pour les éléments utilisés (sur le rapport) pour l'affichage, les filtres, les sections et ruptures...

    Cela sous-entendrait qu'il faut reprendre ta table dérivée afin d'intégrer toutes les valeurs et non uniquement les valeurs max et min.
    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

  7. #7
    Membre averti Avatar de ouistitis
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Morbihan (Bretagne)

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

    Informations forums :
    Inscription : Mars 2009
    Messages : 93
    Points : 341
    Points
    341
    Par défaut
    OK, je vois, merci pour l'idée !

    Les temps sont censés être entiers, donc cette solution devrait fonctionner.

    Par contre ce champ est déclaré en NUMBER. Si ce numérique commence à avoir des décimales, ça devient une belle galère. A voir si je peux le transformer en INTEGER.

    Bonne journée !
    *** Ouistitis ***
    « Le vrai danger, ce n'est pas quand les ordinateurs penseront comme les hommes,
    c'est quand les hommes penseront comme les ordinateurs. » Sydney Justin Harris

  8. #8
    Membre averti Avatar de ouistitis
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Morbihan (Bretagne)

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

    Informations forums :
    Inscription : Mars 2009
    Messages : 93
    Points : 341
    Points
    341
    Par défaut
    J'ai réussi en ajoutant une 2ème table dérivée avec toutes les valeurs, puis en ajoutant une 2ème requête dans Webi.
    Il me reste juste le cas des nombres négatifs à gérer.

    Merci, je passe le sujet à "Résolu".
    *** Ouistitis ***
    « Le vrai danger, ce n'est pas quand les ordinateurs penseront comme les hommes,
    c'est quand les hommes penseront comme les ordinateurs. » Sydney Justin Harris

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

Discussions similaires

  1. jointure externe complexe avec informatica
    Par titpuce dans le forum Informatica
    Réponses: 2
    Dernier message: 03/09/2008, 14h05
  2. Jointure externe complexe avec syntaxe simple
    Par titpuce dans le forum SQL
    Réponses: 2
    Dernier message: 03/09/2008, 14h00
  3. Requête avec jointure externe complexe
    Par dpin33 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 04/03/2008, 13h41
  4. Réponses: 32
    Dernier message: 07/11/2007, 12h19
  5. Réponses: 24
    Dernier message: 24/07/2007, 17h48

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