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

Langage SQL Discussion :

[Oracle] Explication sur Rollup et Cube


Sujet :

Langage SQL

  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2004
    Messages
    150
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 150
    Par défaut [Oracle] Explication sur Rollup et Cube
    Bonjour,

    Je travaille présentement sur une requête qui doit compter le nombre de client par succursale et je dois pouvoir avoir le nombre de client par région (drill down et up). J'ai déjà une hérarchie pour les succursales et les régions.

    Par contre, un client peut être à deux succursales de la même région (il ne doit pas être compté deux fois).

    On m'a conseillé d'utiliser group by rollup (succursale, région)....malheureusement, ça ne donne pas le bon résultat pour les régions. J'ai donc cherché des informations sur rollup et cube, mais je ne suis pas sûre de comprendre.....

    Est-ce que quelqu'un peut m'aider à comprendre la différence.

    Merci à l'avance,
    Nadine

  2. #2
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Par défaut
    Bonsoir,

    Fais un petit tour ici.

    « Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions. »
    - Confucius -

    Les meilleurs cours, tutoriels et Docs sur les SGBD et le SQL
    Tous les cours Office
    Solutions d'Entreprise



  3. #3
    Membre confirmé
    Inscrit en
    Décembre 2004
    Messages
    150
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 150
    Par défaut
    Oui, je sais je suis allée, mais le problème c'est que je ne comprends pas ce que rollup fait et ce que cube fait.....

    En réalité, je travaille avec Cognos et j'essaie de faire un cube sur une requête. Je sais que je ne peux pas faire une addition de clients entre les succursales d'une région puisqu'un client peut être à deux succursales différentes. Exemple :

    Succursale1 a 3 clients (Bob, Carole, Bernard)
    Succursale2 a 4 clients (Carole, Nathalie, Philippe, Paul)

    Succursale1 et Succursale2 sont dans la Région1 qui a 6 clients (Bob, Carole, Bernard, Nathalie, Philippe, Paul)

    Est-ce possible de faire ceci?

    Merci!
    Nadine

  4. #4
    Membre confirmé
    Inscrit en
    Décembre 2004
    Messages
    150
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 150
    Par défaut
    Dans le fond, je pense que ce sera plus simple si je vous donnais la requête que je fais pour faire mon rapport (mon cube est fait à partir de ce rapport)

    Code : 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
     
    select T3.SUCCURSALE,
           T1.REGION ,
           T1.DIVISION ,
           count(distinct T2.NUMCLIENT)
     from TableSuccursale T1, 
          TableClient T2, 
          TableEntente T3, 
          TableRelationClientEntente T4
     where T3.DATE=TO_DATE ('20061031','YYYYMMDD') 
     and T1.SUCCURSALE=T3.SUCCURSALE
     
    ... (liens entre les tables)
     
     group by rollup (T3.SUCCURSALE,
                           T1.REGION ,
                           T1.DIVISION)
    Merci!

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    La seule chose ne semble pas convenir dans votre requête est l'ordre du rollup sur vos colonnes (et plus accessoirement de sélection).

    Pour l'entité division je ne suis pas sûr (je l'exclue de l'exemple ci-dessous), mais si les régions englobent les succurcales, votre requête doit avoir la forme suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    SELECT 
         T1.REGION ,
         T3.SUCCURSALE,
         count(DISTINCT T2.NUMCLIENT)
    FROM
        TableSuccursale T1, 
        TableClient T2, 
        TableEntente T3, 
        TableRelationClientEntente T4
    WHERE
        T3.DATE=TO_DATE ('20061031','YYYYMMDD') 
    AND T1.SUCCURSALE=T3.SUCCURSALE
    ... (liens entre les TABLES)
    GROUP BY
        rollup(T1.REGION, T3.SUCCURSALE)
    Notez que vous pouvez savoir si c'est une donnée "normale" ou rajoutée par le rollup / cube en utilisant la fonction grouping.

  6. #6
    Membre confirmé
    Inscrit en
    Décembre 2004
    Messages
    150
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 150
    Par défaut
    Fallait bien que ce soit une erreur du genre

    Merci pour tout!

    Par contre, ça m'explique pas les cas où je dois prendre rollup et les cas où je dois prendre cube (question de savoir plus ce que je fais la prochaine fois )

    Nadine

  7. #7
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Par défaut
    Imaginons que je fasse une requête sur Succursale, Client et CA.

    Le ROLLUP va considérer Client comme une sous-catégorie de Succursale, et présenter les sous-totaux en conséquence :

    Succursale1 Bob 100
    Succursale1 Carole 100
    Succursale1 Bernard 150
    Succursale1 NULL 350
    Succursale2 Carole 20
    ...
    Succursale2 NULL 220
    NULL NULL 570
    Le CUBE, au contraire, considère qu'il n'y a pas de hiérarchie entre succursale et client et présente tous les croisements :
    ....
    Succursale1 NULL 350
    Succursale2 NULL 220
    NULL Bob 100
    NULL Carole 120
    NULL Bernard 150
    ...
    NULL NULL 570

  8. #8
    Membre confirmé
    Inscrit en
    Décembre 2004
    Messages
    150
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 150
    Par défaut
    Merci pour l'explication Antoun!

    Par contre, je reste avec mon problème du début...j'ai changé l'ordre dans mon rollup en mettant division (dans le fond c'est pays), ensuite région et pour finir succursale et là lorsque je suis dans ma région, j'ai un chiffre trois fois trop gros.....alors que dans l'autre sens, j'avais un chiffre un peu trop gros.

    Quelqu'un pourrait m'expliquer ce qu'il y a de mauvais dans mon SQL?

    Code : 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
     
    SELECT 
         T1.DIVISION
         T1.REGION ,
         T3.SUCCURSALE,
         count(DISTINCT T2.NUMCLIENT)
    FROM
        TableSuccursale T1, 
        TableClient T2, 
        TableEntente T3, 
        TableRelationClientEntente T4
    WHERE
        T3.DATE=TO_DATE ('20061031','YYYYMMDD') 
    AND T1.SUCCURSALE=T3.SUCCURSALE
    ... (liens entre les TABLES)
    GROUP BY
        rollup(T1.DIVISION, T1.REGION, T3.SUCCURSALE)
    Je vous remercie à l'avance!
    Nadine

  9. #9
    Membre confirmé
    Inscrit en
    Décembre 2004
    Messages
    150
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 150
    Par défaut
    Bonjour tout le monde,

    Après avoir fouillé et refouillé, j'ai finalement trouvé que ma requête était bonne, le problème est dans transformer de Cognos....

    Désolée et merci pour toutes les informations!
    Nadine

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

Discussions similaires

  1. pb d'installation d'Oracle 9 sur windows 2000
    Par condor dans le forum Oracle
    Réponses: 1
    Dernier message: 14/12/2006, 11h40
  2. pb d'installation d'Oracle 9 sur windows 2000
    Par condor dans le forum Oracle
    Réponses: 1
    Dernier message: 14/06/2006, 14h28
  3. Réponses: 15
    Dernier message: 16/09/2004, 09h37
  4. Réponses: 28
    Dernier message: 18/08/2003, 11h54
  5. recherches des cours ou des explications sur les algorithmes
    Par Marcus2211 dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 19/05/2002, 22h18

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