7 Replies Latest reply: Aug 21, 2013 4:14 AM by Brice SACCUCCI RSS

    TYPE DE JOINTURE

      Bonjour et bon retour

       

      J'ai un probléme avec la jointure entre deux tables J'ai 1 table PO et Poline je fais la jointure comme suit :

       

      POLINEPO:

      Load

      POnum as Link,

      X,

      Y

      from PO;

      Join(POLINEPO)

      Load

      POnum as Link

      X,

      Z

      From Poline;

       

      => le problème qui se pose c'est quand je récupère dans mon objet j'affiche POnum(link) et le X (commun) mais j'affiche pas le Y ou le Z !!

      j'ai essayé left ou right et ça change rien !!!

      N.B : jutilise pas : "qualify "

       

      Merci pour votre aide

      Cordialement

        • Re: TYPE DE JOINTURE
          Brice SACCUCCI

          Hello,

           

          pourrais-tu afficher le contenu des tables, l'objet que tu crées et le résultat attendu ?

           

          Dans l'idéal, essaie de joindre une application QlikView démontrant le problème rencontré, quitte à inclure des données de test (une dizaine de lignes) via des instructions "LOAD * INLINE...".

           

          Merci

          • Re: TYPE DE JOINTURE

            Merci de m'avoir répondu rapidement , et j arrive a récupèrer le contenu pas pas les champs qui sont pas en commun entre mes deux tables de jointure expl :

            //QUALIFY *;

            //UNQUALIFY PONUM_PO_POLINE;

            POLINEPO:

            LOAD

              PONUM as PONUM_PO_POLINE,

              PONUM,

              PONUM as PONUM_Status,

                 DESCRIPTION,

                 PURCHASEAGENT,

                RECEIPTS,

                 STORELOC

            FROM

            [$(vQVD)\PO.qvd]

            (qvd);

            left join (POLINEPO)

            LOAD

              hash128(PONUM &'|'&  POLINENUM) as LNK_PO_Invoice,

              Hash128(SHIPTO) as  LNK_CompPO,

              hash128(PONUM &'|'& POLINENUM) as LNK_PO_PR,

              PONUM as PONUM_PO_POLINE,

              PONUM as PONUM_Status,

                 ITEMNUM,

                 ITEMNUM as ITEMNUM_LNK_INVB_PO,

                 STORELOC,

                 MODELNUM,

                   SUPERVISOR as PERSONID,

                 date(floor(ENTERDATE), 'DD/MM/YYYY') as ENTERDATE,

                 ENTERBY,

                 DESCRIPTION,

                 REQUESTEDBY as REQUESTEDBY_ID,

                 ISSUE,

                 RECEIPTSCOMPLETE,

                 POLINENUM,

                 GLDEBITACCT,

                 mid(GLDEBITACCT,1,11) as LNK_GL_PO,

                replace(mid(GLDEBITACCT,13,11),'.','') as Section ,

                replace(mid(GLDEBITACCT,1,11),'.','') as Rubrique ,

                replace(mid(GLDEBITACCT,25,11),'.','') as CompteDebit ,

                mid(COMMODITYGROUP,1,3) as Segment,

                 GLCREDITACCT,

                 LINECOST,

                 CATEGORY,

                 REMARK,

                 LOCATION,

                 SITEID,

                 REFWO,

                 ENTEREDASTASK,

                 ASSETNUM,

                 COMMODITY,

                 COMMODITYGROUP as COMMODITY_LNK,

                 CONDITIONCODE,

                 LANGCODE,

                 LINETYPE,

                 SHIPTO,

                 SHIPTOATTN

            FROM

            [$(vQVD)\POLINE.qvd]

            (qvd);

             

             

            => ici par exemple j arrive pas a affiche RECEITS de PO dans la restitution !!

            Merci

            Cordialement

              • Re: Re: TYPE DE JOINTURE
                Philippe Grenier

                Bonjour Amal,

                 

                Peut-être pourriez-vous tout simplement laisser QlikView créer son modèle associatif en limitant à un seul champ commun entre les deux tables et ne pas forcer le left join?

                 

                POLINEPO:

                LOAD PONUM,

                //  PONUM as PONUM_PO_POLINE,

                //  PONUM as PONUM_Status,

                    DESCRIPTION as POLINEPO_DESCRIPTION,

                    PURCHASEAGENT,

                    RECEIPTS,

                    STORELOC as POLINEPO_STORELOC

                FROM

                [$(vQVD)\PO.qvd]

                (qvd);

                // left join (POLINEPO)

                POLINE:

                LOAD

                  hash128(PONUM &'|'&  POLINENUM) as LNK_PO_Invoice,

                  Hash128(SHIPTO) as  LNK_CompPO,

                  hash128(PONUM &'|'& POLINENUM) as LNK_PO_PR,

                  PONUM,

                //  PONUM as PONUM_PO_POLINE,

                //  PONUM as PONUM_Status,

                    ITEMNUM,

                    ITEMNUM as ITEMNUM_LNK_INVB_PO,

                    STORELOC,

                    MODELNUM,

                      SUPERVISOR as PERSONID,

                    date(floor(ENTERDATE), 'DD/MM/YYYY') as ENTERDATE,

                    ENTERBY,

                    DESCRIPTION,

                    REQUESTEDBY as REQUESTEDBY_ID,

                    ISSUE,

                    RECEIPTSCOMPLETE,

                    POLINENUM,

                    GLDEBITACCT,

                    mid(GLDEBITACCT,1,11) as LNK_GL_PO,

                    replace(mid(GLDEBITACCT,13,11),'.','') as Section ,

                    replace(mid(GLDEBITACCT,1,11),'.','') as Rubrique ,

                    replace(mid(GLDEBITACCT,25,11),'.','') as CompteDebit ,

                    mid(COMMODITYGROUP,1,3) as Segment,

                    GLCREDITACCT,

                    LINECOST,

                    CATEGORY,

                    REMARK,

                    LOCATION,

                    SITEID,

                    REFWO,

                    ENTEREDASTASK,

                    ASSETNUM,

                    COMMODITY,

                    COMMODITYGROUP as COMMODITY_LNK,

                    CONDITIONCODE,

                    LANGCODE,

                    LINETYPE,

                    SHIPTO,

                    SHIPTOATTN

                FROM

                [$(vQVD)\POLINE.qvd]

                (qvd);

                  • Re: TYPE DE JOINTURE

                    En faite ce que je fais c'est une migration des rapports Sql en Qlikview et il y a des cas ou dans Sql j'ai des concatenante ou des jointures entre plusieurs champs par Expl

                    Select ....

                    ConditionCode as Etat

                    From PO;

                    Union all

                    Select ..... Status as Etat

                    Union all

                    Select  ' ' as Etat

                     

                    => c'est pourquoi je force la jointure c'etait pour garantir d'obtenir les memes résulats mais je là je perds des données

                    Merci de me donner vos conseils car je bloque là et c'est urgent :/

                    encore merci

                    Cordialement

                • Re: TYPE DE JOINTURE
                  Brice SACCUCCI

                  La fonction JOIN va lier les lignes si toutes les colonnes communes aux 2 tables ont des valeurs identiques. Dans le cas contraire, de nouvelles lignes sont créées, avec des NULLs pour les champs manquants.

                   

                  Dans le cas présent, le lien ne se fera que si TOUTES les valeurs des champs PONUM_Status, PONUM_PO_POLINE, STORELOC, DESCRIPTION sont égales.

                   

                  Comme l'a dit Philippe, le JOIN n'est pas nécessaire pour pouvoir faire une restitution, mais il est vrai qu'avoir les données dans une même table peut améliorer les performances de la restitution (mais aussi créer des erreurs de calculs en engendrant des duplications de valeurs par exemple...).

                   

                  Quel est censé être le ou les champ(s) de jointure entre POLINEPO et PO ?

                    • Re: TYPE DE JOINTURE

                      C'est PONUM qui doit faire le lien entre PO et POLINE aprés on a PO et POLINE en jointure avec POSTATUS via PONUM c'est pourquoi j ai rajouter PONUM_Status qui fai un lien avec POSTAUTS

                        • Re: TYPE DE JOINTURE
                          Brice SACCUCCI

                          Il y a une boucle dans votre modèle. Le modèle associatif ne peut pas fonctionner avec des boucles, d'ailleurs QlikView est censé vous prévenir après le rechargement des données : il supprime arbitrairement des liens entre les tables.

                           

                          Les boucles sont visibles dans le visionneur de modèle (CTRL + T) : QlikView a supprimé des liens et il y a des lignes en pointillés entre certains tables.

                           

                          Il s'agit d'un cas courant en modélisation. Il y a plusieurs solutions, la plus courante étant de créer une "table de liens".

                           

                          De plus, il faut renommer les autres champs qui portent à équivoque, "DESCRIPTION", en [POLINE Description] et [PO Description] par exemple.

                           

                          Il ne faut pas penser en SQL pour créer le modèle QlikView. Il y a des principes propres à l'associativité qu'il faut bien appréhender. Mes conseils pour la modélisation avec table de liens (efficace pour des volumétries faibles à moyennes) :

                           

                          1. Commencer par charger une table A, en prenant soin de choisir toutes les colonnes à inclure. Inutile de prendre des colonnes superflues. Au passage, renommer les colonnes en incluant un préfixe (similaire à ce que fait QUALIFY). Cela évitera qui QlikView crée des liens erronés par la suite;

                          2. Identifier la clé de cette table. Si elle est constituée de plusieurs colonnes, créer la clé composite autonumberhash128(Col1, Col2, Col3, etc.) as [%Col1Col2Col3 ID];

                          3. Charger la table suivante, B, de la même manière qu'en 1. S'il y a un lien avec la table A, nommer la clé avec le même nom  [%Col1Col2Col3 ID] et QlikView fera l'association automatiquement. Si la clé est différente, [Col1 ID] par exemple, il faudra créer une table de liens avec les champs Col1, Col2, Col3, [%Col1Col2Col3 ID], [Col1 ID].


                          A chaque étape, vérifier que tout est OK avec CTRL + T et en ajoutant les listes de sélection dans une feuille. Faire des sélections pour vérifier que tout fonctionne comme prévu.


                          La modélisation est expliquée en détail lors de notre formation "Developer", qui est donnée sur 3 jours.

                          Il est également possible et conseillé de suivre les cours en ligne : QlikView Free Training - Business Intelligence (BI) Reporting Software Solutions | QlikView