Skip to main content
Announcements
Have questions about Qlik Connect? Join us live on April 10th, at 11 AM ET: SIGN UP NOW
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

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

7 Replies
Brice-SACCUCCI
Employee
Employee

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

Not applicable
Author

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

pgrenier
Partner - Creator III
Partner - Creator III

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);

Not applicable
Author

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

Brice-SACCUCCI
Employee
Employee

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 ?

Not applicable
Author

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

Brice-SACCUCCI
Employee
Employee

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