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

Deski Discussion :

Jointure fermée entre deux fournisseurs de données- SUITE [VxiR2]


Sujet :

Deski

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 270
    Points : 103
    Points
    103
    Par défaut Jointure fermée entre deux fournisseurs de données
    Salut,
    J'ai un datamart, une base modélisée dimensionnellement avec tables de dim et table de faits. Dessus, j'ai plugé un univers BO.
    Quand je créé une requête sur mon univers, j'utilise (dans la même requête BO) des indicateurs qui sont situés dans deux tables de fait différentes. Donc BO créé deux requêtes sql: si on fait visualisé le SQL correspondant à la requete BO, on voit clairement qu'il y a deux requêtes SQL créées, avec dans chacune d'elle une table de fait (jointes aux dimension nécessaires). Ok, c'est normal. Puis dans le cube de données, on peut voir que les deux fournisseurs de données sont bien liés sur les dimensions adéquates. Ok.

    Par contre, le problème est que la jointure entre les deux fournisseurs de données est ouverte. Je m'explique :

    Il se trouve que dans ma requête BO j'ai posé un filtre sur un champ qui se trouve dans une des deux tables de fait, mais pas l'autre.
    Donc la premiere requete sql générée ramène bien un résultat filtré, mais la deuxième, ramène une tonne de lignes. Et comme les fournisseurs ne sont pas joint sur une jointure fermée, mais ouverte apparement, j'ai cette tonne de ligne qui s'affiche dans mon rapport, et pas juste les lignes de la requête ou agit le filtre comme je voudrais.
    J'aimerais pouvoir fermer la jointure et n'afficher que les lignes de la premiere requete.

    Ai je été clair ?

  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 : 42
    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,

    Cas étonnant puisque BO fait plutôt en général des jointures fermées. Quoi qu'il en soit il n'est pas possible de modifier, ni même d'afficher, la jointure que BO exécute entre plusieurs fournisseurs de données synchronisés.

    La solution que je te propose, c'est de créer un filtre complexe sur un objet d'une de tes requêtes. Par ex :
    Dans chaque requête tu as l'objet <toto>.
    Tu auras donc dans les objets disponibles : <toto (Requête 1)> et <toto (Requête 2)>
    Si on considère que c'est ta requête 2 qui génère un max de lignes, il faut appliquer un filtre complexe sur l'objet <toto (Requête 2)> avec la formule suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =Non(EstNul(<toto (Requête 1)>))

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 270
    Points : 103
    Points
    103
    Par défaut
    ok, merci de ta réponse.

    Je me suis peut etre mal exprimé, laisse moi préciser quelques points.

    Je n'ai créé qu'une seule requete BO (un seul fournisseur BO). Mais comme j'utilise dans ma requete deux objets provenant de deux tables de fait différentes, BO créé deux requetes SQL. Si je fais "visualiser le SQL" dans l'editeur de requete, je vois qu'il créé deux requetes SQL au lieu d'une (ce qui est logique.) Au final, ca se traduit par deux fournisseurs de données que BO a créé automatiquement (alors que, je rappelle, je n'ai moi créé qu'une seule requete BO). Si je vais dans le cube bleu visualiser les données, je vois les deux fournisseurs qui ont pour nom MaRequete.Cube1 et MaRequete.Cube2. Par contre, dans le gestionnaire de Rapport, en mode fournisseur de données, je ne vois qu'un seul fournisseur, je ne vois pas les MaRequete.Cube1 et MaRequete.Cube2.
    Et le problème c'est que je ne peut pas utiliser mes objets en écrivant dans le champ formule <MonObjet(MaRequete.Cube1)>, il me sort une erreur syntaxe.
    Donc je ne peux pas poser de filtre comme tu le propose.

    Sur ce, je vais essayer de créer cette fois deux fournisseurs de données distinct avec deux requetes BO, une pour chaque indicateur (qui sont dans les tables de fait différentes) et cette fois je pourrais manipuler les objets des différents fournisseurs de données.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 270
    Points : 103
    Points
    103
    Par défaut
    ca a pas trop l'air de fonctionner la...
    J'ai créé deux fournisseurs de données BO, et j'ai bien mes deux fournisseurs de données dans le cube bleu, que je peux manipuler cette fois.
    J'ai ajouté le filtre dont tu parles sur un des objets liés de mes deux fournisseurs et qui est présent dans mon tableau. D'ailleurs concernant la formule sous XIR2, le "Non" est remplacé par "Pas" il me semble.

    Mais dans mon tableau qui affiche donc l'objet filtré, et les indicateurs issus des deux fournisseurs de données, j'ai toujours toutes les lignes du deuxième fournisseur...

  5. #5
    Membre averti

    Inscrit en
    Juillet 2007
    Messages
    391
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 391
    Points : 443
    Points
    443
    Par défaut
    Ce que tu peux faire facilement :

    - 1 première requête (la plus restrictive)

    - 1 seconde requête avec la condition ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    and <monobjet> dansliste (<monobjet> de requête 1)

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 270
    Points : 103
    Points
    103
    Par défaut
    oui, j'ai essayé de faire ça.
    Mais ça m'a l'air de merder aussi
    Je vais investiguer plus, et je vous tiens au courant.
    Merci

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 270
    Points : 103
    Points
    103
    Par défaut
    en fait, il semble que cette dernière solution fonctionne bel et bien.
    Je vais m'en tenir la, et j'essaierai la solution de Tom (qui est aussi dans la FAQ comme je m'en suis rendu compte) la prochaine fois.
    Merci à tous les deux.

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 270
    Points : 103
    Points
    103
    Par défaut
    juste pour préciser que la deuxième solution fonctionne, mais elle se met à planter quand le nombre de ligne de la premiere requete dépasse 1000.
    Car la condition dans la deuxieme requete posée en écrivant
    AND <monobjet> dansliste (<monobjet> de requête 1)
    plante, car BO ne sait pas faire un "dansliste" quand la liste en question contient plus de 1000 lignes.

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 270
    Points : 103
    Points
    103
    Par défaut
    Il se trouve que je suis pris dans le cas que je décrivais juste avant.
    Je voudrais donc utiliser la premiere solution de Tom, mais je n'y arrive pas.
    J'ai meme essayé sur un rapport simplifié tout con, et je n'ai pas l'impression que ca marche.

    J'ai deux fournisseurs de données FDD1 et FDD2, avec pour chaque une dimension (le meme objet pour FDD1 et FDD2) et un indicateur. FDD1 ramène quelques lignes, FDD2 des centaines. Moi je ne voudrais afficher sur mon tableau que les quelques lignes de FDD1.

    Dans format/Filtre, j'ajoute un filtre (soit en global, soit sur mon tableau, le resultat est le meme) sur MaDim(FDD2) définit comme suit :
    =Pas EstNul(MaDim(FDD1))
    Et ca ne marche pas. Meme dans la fenetre Format/Filtre, je peux me rendre compte en regardant les valeurs filtrés, que mes centaines de lignes sont toujours toutes sélectionnées, sauf EMPTY.

    Je précise que mon objet Dimension commun à FDD1 et FDD2 est bien lié entre les deux fournisseurs de données.

    Pour tester que la formule que j'utilisais marchait bien, j'ai essayé de créer une variable définit comme suit :
    =EstNul(MaDim(FDD1))
    Puis je la met dans mon tableau, mais elle est toujours à zéro, même pour les lignes qui proviennent de FDD2, et pour lesquelles je n'ai pas d'instance de MaDim dans FDD1...

  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 : 42
    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, en fait il faut que tu fasses porter ton filtre sur ton indicateur et non pas sur ta dimension. En effet, lorsque BO synchronise les requêtes il "recrée fictivement" les dimensions manquantes :

    MaDim(FDD2) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =Pas EstNul(MonIndic(FDD1))

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 270
    Points : 103
    Points
    103
    Par défaut
    okayyy.
    Merci Tom.

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

Discussions similaires

  1. [XIR3] Pb Lien entre deux fournisseurs de données
    Par tonio45312 dans le forum Deski
    Réponses: 4
    Dernier message: 10/03/2010, 17h14
  2. [MySQL] lien entre deux bases de données
    Par joshyeha dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 20/09/2006, 14h12
  3. liaison entre deux bases de données access
    Par questions dans le forum Access
    Réponses: 1
    Dernier message: 09/06/2006, 14h26
  4. Faire un lien entre deux bases de données
    Par pierce dans le forum Langage SQL
    Réponses: 1
    Dernier message: 27/01/2006, 22h29
  5. Réponses: 5
    Dernier message: 30/11/2005, 17h41

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