4 Replies Latest reply: Jan 20, 2017 3:39 PM by Sébastien Fatoux RSS

    Clé composée de deux champs

    Emir Belbachir

      Bonjour,

       

      Comment faut-il s'y prendre afin de créer une clé unique composée de plusieurs champs ?

       

      Voici un extrait des chargements de mes deux tables :

       

      Table 1 :

      Directory;

      LOAD

           [N° de commande],

           [Grpe.acheteurs cmde],

           [Centre de coûts cmde],

           [Lib.c.coûts cmde],

           [Créé par],

           [Nom complet créé par],

           [Type commande],

           [N° article commande]

      FROM

      [test.xlsx]

      (ooxml, embedded labels, table is [table 1]);

       

      Table 2 :

      Directory;

      LOAD

           Sté,

           [org ciale],

           DA,

           PF,

           Energie,

           N°Pièce,

           Référence,

           [Date base],

           [Cde achat],

           Fournisseur,

           [Nom frs],

           [Cde vente],

           [Montant HT],

           [Montant TTC],

           Observation,

           OK,

           [Date Règlt],

           GR,

          DMR,

          [Nom du demandeur],

           Créateur,

           [Date de saisie],

           Portefeuille,

           [Lieu de livraison],

           [type de livraison],

           Motif,

           [Date d'extraction],

           Article

      FROM

      [test.xlsx]

      (ooxml, embedded labels, table is [table 2]);

       

      Je voudrais lier la table 1 et 2 grâce aux deux champs en rouge, à savoir N° de commande] et [N° article commande]  pour la table 1,

      DMR et Article pour la table 2.


      Une idée de comment m'y prendre ?


      Merci d'avance de votre aide.

        • Re: Clé composée de deux champs
          Sébastien Fatoux

          Il faut créer un nouveau champs dans tes 2 tables avec le même nom

           

          Table 1

          AutoNumber([N° de commande] & '_' &  [N° article commande], 'CommandeArticle') as %key_commande_article

           

          Table 2

          AutoNumber(DMR & '_' & Article, 'CommandeArticle') as %key_commande_article

           

          Ensuite, si une des 2 tables contient l'ensemble des combinaisons des champs de base, conserve les champs de base dans cette table, tu peux les supprimer de l'autre table.

           

          Si les 2 tables contiennent des combinaisons n'existant pas dans l'autre table, Il faudra créer une table intermédiaire qui contiendra  les champs de base et la clé %key_commande_article de toutes les combinaisons distinctes des 2 tables et tu dois supprimer les champs de base des 2 tables.

           

           

            • Re: Clé composée de deux champs
              Emir Belbachir

              Super je te remercie ça marche impeccable !

              • Re: Clé composée de deux champs
                David Docquoy

                Bonjour,

                 

                Perso je fais uniquement la concaténation sans utiliser AutoNumber.

                 

                est ce que c'est plus optimal d'utiliser cette fonction donc ?

                 

                Et a quoi sers le %Key devant le nom du champ ?

                 

                Ou c'est juste une convention de nommage ?

                 

                Merci.

                  • Re: Clé composée de deux champs
                    Sébastien Fatoux

                    Est ce que c'est plus optimal d'utiliser cette fonction donc ?

                    Si tu fais uniquement la concaténation, tu as des clés compréhensible (lisible).Mais sachant que tu conserves chaque valeurs distinctes de ta clé en mémoire, c'est moins couteux de conserver des chiffres que des chaines de caractère. C'est d'autant plus vrai si elles ont un nombre élevé de caractère et/ou si tu en as un nombre élevé de clé distincte.

                     

                    Et a quoi sers le %Key devant le nom du champ ?

                    Ou c'est juste une convention de nommage ?

                    C'est une convention de nommage sur les clé technique (non utilisée dans l'interface) pour pouvoir les cacher aux utilisateurs (comme les champs système) en utilisant l'instruction suivante dans le script de chargement :   SET HidePrefix ='%' ;

                     

                    HidePrefix ‒ QlikView