Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Bonjour,
J'essaye de faire un inner join, cependant je penses que ma sytaxe est fausse.
J'ai une table "Calendrier" et une table de "Fait".
Je souhaite récupérer le jour de la table de la table de "Fait" .
Sachant que CA TTC Net vient de la table de fait
Voici mon script :
Fait_CMD:
*
// FROM [lib:/Fait.QVD](qvd)
Inner join(CALENDRIER)
//Création du chiffre d'affaire de l'année courante N
Load
"Cal - Jour",
Sum("CA TTC Net") As "Web - CA TTC Net N"
Resident F_STOCK_CMD_WEB ;
Where "Cal - Année" = $(vCurrentYear)
Or "Cal - Année" = $(vPastYear);
Inner Join(CALENDRIER)
//Création du chiffre d'affaire de l'année précédente
Load
"Stock Jour"+364 as "Stock Jour",
Sum("CA TTC Net") As "Web - CA TTC Net N-1"
Resident F_STOCK_CMD_WEB
/Where "Cal - Année" = $(vPastYear)
or "Cal - Année" = $(vPastYear2);
L'erreur que j'ai est la suivante :
La colonne "Cal - Jour" n'existe pas, alors que cette colonne provient de la table "Calendrier".
Merci d'avance
soit tu utilise une concatenation soit une jointure, les 2 ne marcheront pas ensembles..
je t'invite a lire cet article: Understanding Join, Keep and Concatenate
Bonjour,
1. pour faire une jointure sur une table, il faut que la table soit préalablement chargée
2. quand on utilise des fonction d'aggregation dans un LOAD, un Group by est obligatoire, il doit inclure tous les autres champs qui ne sont pas utilisés dans des fonctions d'aggrégation.
3. tu peux enlever tout le bloc de la 2eme jointure en rassemblant tes conditions WHERE dans le premier WHERE
Bonjour Youssef,
Merci pour tes éclaircissements.
J'aurais une autre information à demander.
Quand on utiliser un "left join" ou un "Inner join" dans le script de chargement est-ce que la jointure s'applique à tous les éléments qui seront effectués à la suite de cette jointure ou faut-il à chaque fois rajouter une jointure;
Ex : J'ai ce code , je mets un left join au début, sauf que je charge deux d'affilé une même table pour créer des indicateurs différents, et je souhaiterai savoir il fallait rajouter un left join lorsque je charge une seconde, ou, un simple left join au début du script s'applique pour tous les éléments :
Left join
//Création du chiffre d'affaire de l'année courante N
Load
"Cal - ID Jour"
FROM [lib://QVD_Rec (omnium_dec1)/DWH\D_CALENDRIER.QVD](qvd)
Where left (("Cal - ID Jour"),4) = $(vCurrentYear)
Or Left (("Cal - ID Jour"),4) = $(vPastYear)
Or Left (("Cal - ID Jour"),4) = $(vPastYear2);
FACT_WEB :
Load
"Cal - ID Jour",
"RCT - Code" As "Fact- Web RCT Code",
"Web - CA TTC Net" As "Web - CA Commandé N",
"Web - Quantité Produit" As " Web - Qauntité commandée N"
Resident F_STOCK_CMD_WEB
Where left (("Cal - ID Jour"),4) =$(vCurrentYear)
Or left (("Cal - ID Jour"),4) = $(vPastYear);
Concatenate
// Création du chiffre d'affaire de l'année précédente
Load
"Cal - ID Jour",
"RCT - Code" As "Fact- Web RCT Code",
"Web - CA TTC Net" As "Web - CA Commandé N-1",
"Web - Quantité Produit" As " Web - Qauntité commandée N-1"
Resident F_STOCK_CMD_WEB
Where left (("Cal - ID Jour"),4) = $(vPastYear)
Or left (("Cal - ID Jour"),4) = $(vPastYear2)
Bonjour,
non justement, quand on utilise une jointure, on cherche a joindre (sur une table précédemment chargée) des colonnes de la table qu'on est entrain de charger, les lignes gardés dépendent du type de jointure utilisée (inner, left, right...), donc on affecte seulement la table sur laquelle on est entrain de faire la jointure.
Ok donc ça signifie que dans mon cas , au niveau de mon code je dois rajouter une left join supplémentaire comme ceci ?:
Left join
//Création du chiffre d'affaire de l'année courante N
Load
"Cal - ID Jour"
FROM [lib://QVD_Rec (omnium_dec1)/DWH\D_CALENDRIER.QVD](qvd)
Where left (("Cal - ID Jour"),4) = $(vCurrentYear)
Or Left (("Cal - ID Jour"),4) = $(vPastYear)
Or Left (("Cal - ID Jour"),4) = $(vPastYear2);
FACT_WEB :
Load
"Cal - ID Jour",
"RCT - Code" As "Fact- Web RCT Code",
"Web - CA TTC Net" As "Web - CA Commandé N",
"Web - Quantité Produit" As " Web - Qauntité commandée N"
Resident F_STOCK_CMD_WEB
Where left (("Cal - ID Jour"),4) =$(vCurrentYear)
Or left (("Cal - ID Jour"),4) = $(vPastYear);
Concatenate
Left join
//Création du chiffre d'affaire de l'année courante N
Load
"Cal - ID Jour"
FROM [lib://QVD_Rec (omnium_dec1)/DWH\D_CALENDRIER.QVD](qvd)
Where left (("Cal - ID Jour"),4) = $(vCurrentYear)
Or Left (("Cal - ID Jour"),4) = $(vPastYear)
Or Left (("Cal - ID Jour"),4) = $(vPastYear2);
// Création du chiffre d'affaire de l'année précédente
Load
"Cal - ID Jour",
"RCT - Code" As "Fact- Web RCT Code",
"Web - CA TTC Net" As "Web - CA Commandé N-1",
"Web - Quantité Produit" As " Web - Qauntité commandée N-1"
Resident F_STOCK_CMD_WEB
Where left (("Cal - ID Jour"),4) = $(vPastYear)
Or left (("Cal - ID Jour"),4) = $(vPastYear2)
normalement oui, a chaque fois que tu veux rajouter des champs différents, tu devra utiliser un load précédé d'une jointure
soit tu utilise une concatenation soit une jointure, les 2 ne marcheront pas ensembles..
je t'invite a lire cet article: Understanding Join, Keep and Concatenate
Ok merci beaucoup pour les informations et l'article
avec plaisir
essaye de faire des exercices avec le jeu de données de l'article et essaye toutes les jointures, le keep et la concatenation, tout sera beaucoup plus clair pour toi