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