Skip to main content
Announcements
Qlik Connect 2024! Seize endless possibilities! LEARN MORE
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Clé composée de deux champs

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.

1 Solution

Accepted Solutions
sfatoux72
Partner - Specialist
Partner - Specialist

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.

View solution in original post

4 Replies
sfatoux72
Partner - Specialist
Partner - Specialist

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.

Not applicable
Author

Super je te remercie ça marche impeccable !

ddocquoy
Contributor II
Contributor II

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.

sfatoux72
Partner - Specialist
Partner - Specialist

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