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 :

Récursivité sous BO


Sujet :

Designer

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 27
    Points : 20
    Points
    20
    Par défaut Récursivité sous BO
    Bonjour à tous,

    J'ai cherché un peu les solutions à mon problème mais elle ne sont pas évidentes.

    Voila donc mon petit souci.
    Dans mon univers j'ai une table "descendants" qui contient deux champs : "père" et "fils"
    Je cherche à connaître tous les petits enfants de derniers niveaux d'une personne.

    Exemple : la table contient :

    Père | Fils
    ------------------------
    Gérard | Benoit
    Gérard | Baptiste
    Gérard | François
    François | Pierre
    François | Louis
    Louis | Simon

    Il faudrait que ça resorte, si on demande les petits fils de dernière génération de Gérard : Benoit, Baptiste, Pierre et Simon.

    Alors moi j'ai une piste pour créer une nouvelle table en amont de BO mais le traitement est lourd et le reporting n'est pas actualisé quand il le faut.

    Si vous avez des idées, je suis donc preneur.

    merci d'avance.

  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,

    Alors pour y arriver tu as plusieurs solutions :
    • Le traitement en amont effectivement
    • L'auto-jointure, avec laquelle on devrait pouvoir obtenir le résultat voulu
    • La table dérivée
    • L'alias

    C'est plutôt la dernière solution que je retiendrais.
    Dans l'univers, il faut importer une deuxième fois ta table. Elle sera donc un alias de ta première table.
    Il te suffit ensuite de jointurer ces deux tables de la façon suivante :
    Table1.Fils = Table2.Père
    Et de créer un objet petit-fils avec la syntaxe suivante :
    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 à l'essai
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 27
    Points : 20
    Points
    20
    Par défaut
    Bonjour,

    Merci pour ta réponse. J'ai effectivement pensé à cette solution, mais le problème c'est qu'il peut y avoir un nombre de niveaux plus importants que dans mon exemple.
    Est-ce que ta solution marcherait dans ce cas là ? Sinon, comment je peux faire ?

    Merci.

  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
    Ce que je t'ai donné ne te permettra d'identifier les tuples "grand-père / petit-fils" sans aucune distinction...

    Peux-tu donc préciser plus ce que tu entends par :
    les petits enfants de derniers niveaux d'une personne
    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 à l'essai
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 27
    Points : 20
    Points
    20
    Par défaut
    Ah oui, c'est vrai que je me suis pas très bien exprimé...
    Pour reprendre l'exemple de ma table, en l'allongeant un peu, ça donnerait ça :

    Père | Fils
    ------------------------
    Gérard | Benoit
    Gérard | Baptiste
    Gérard | François
    François | Pierre
    François | Louis
    Louis | Simon
    Louis | Pierrot
    Simon | Jérôme

    Donc là il faudrait trouver : "Benoit, Baptiste, Pierre, Pierrot, Jérôme"

    En gros, il peut y avoir les arrière petits fils, ou arrière arrière petits fils etc.

    Merci pour ton aide en tous cas.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Février 2009
    Messages : 57
    Points : 67
    Points
    67
    Par défaut
    IMHO, ça me parait chaud à réaliser dans BO.. je ferai plutôt ça en PL/SQL en amont...

    Pour faire ce que tu veux tu dois implémenter l'algo du parcours en profondeur, mais dans la mesure ou tu ne peux pas faire de boucles dans BO.. je vois pas.

  7. #7
    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, donc tu peux avoir une généalogie complète...
    Cependant, ce que je voulais savoir en fait, c'est ce que tu entendais par "dernier niveau"... Veux-tu dire que tu veux identifier les couples "grand-père / petit fils" pour les petits-fils n'ayant pas d'enfant ?

    Si c'est bien cela, il ne faut pas utiliser l'alias mais une table dérivée. Nommes-là comme tu le souhaites et places-y le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT
    a.Père,
    a.Fils
    FROM Table1 a
    WHERE a.Fils NOT IN(
     SELECT
     b.Père
     FROM Table1 b
    )
    Ensuite, tu jointures entre Table1 et ta table dérivée avec Table1.Fils = TableDerivee.Père, et tu crées ton objet petit-fils avec :
    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

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Février 2009
    Messages : 57
    Points : 67
    Points
    67
    Par défaut
    Tom, je pense que c'est encore plus compliqué que ça.

    En fait, je crois qu'il veut récupérer pour chaque noeud, les sommets, sans les noeuds intermédiaires.

    http://www.liafa.jussieu.fr/~carton/.../parcours.html

    Si l'on regarde la première image sur ce site, pour le père 0, il veut récupérer 3,5,7,11,12.

    C'est bien ça ?

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 27
    Points : 20
    Points
    20
    Par défaut
    Oui c'est exactement ça mvarnoux !

    Je vais essayer ta solution Tom !

    Merci pour le coup de main les gars

  10. #10
    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, alors tu peux oublier ma solution ça ne fonctionnera pas.
    Et de prime abord, je ne vois pas de solution hormis un traitement en amont. Je vais quand essayer d'y réfléchir...
    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

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Février 2009
    Messages : 57
    Points : 67
    Points
    67
    Par défaut
    Je crois que tu vas devoir implémenter l'algo du parcours en profondeur en PL/SQL..

    Mais ça n'est pas si compliqué que ça. Tu dois implémenter cette idée là :

    Tu crées une table2 alimentée à partir de ta table1 (l'exemple que tu nous a donné)

    Pour chaque père
    Ajouter le père dans la table2
    tant que fils existe
    tant que le fils est dans la colonne père, tu continues le parcour, dès qu'il n'y est plus, ajouter le fils dans table 2.
    etc.. etc..

    ensuite tu n'aura plus qu'à ramener ta table correctement alimentée dans BO.

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 27
    Points : 20
    Points
    20
    Par défaut
    C'est exactement ce à quoi je pensais...
    Je vais m'y atteler rapidement.

    Merci beaucoup à vous deux !

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

Discussions similaires

  1. Représentation de récursivité sous forme d'organigramme
    Par linkky dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 13/06/2013, 17h30
  2. récursivité : exploration de sous-répertoires
    Par spirzouf dans le forum Débuter
    Réponses: 8
    Dernier message: 16/10/2011, 13h49
  3. Réponses: 3
    Dernier message: 19/07/2009, 17h17
  4. suppression de sous clé et récursivité
    Par pititepoulette75 dans le forum VBScript
    Réponses: 2
    Dernier message: 06/01/2009, 11h09
  5. [XI] Récursivité de rapport et sous rapport
    Par leloup84 dans le forum SAP Crystal Reports
    Réponses: 6
    Dernier message: 08/03/2007, 17h32

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