Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
jmialoundama
Specialist
Specialist

Jointures : Inner join / Left join script qlik sense

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

       


1 Solution

Accepted Solutions
YoussefBelloum
Champion
Champion

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

View solution in original post

8 Replies
YoussefBelloum
Champion
Champion

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

jmialoundama
Specialist
Specialist
Author

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)

       

YoussefBelloum
Champion
Champion

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.

jmialoundama
Specialist
Specialist
Author

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)

      

YoussefBelloum
Champion
Champion

normalement oui, a chaque fois que tu veux rajouter des champs différents, tu devra utiliser un load précédé d'une jointure

YoussefBelloum
Champion
Champion

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

jmialoundama
Specialist
Specialist
Author

Ok merci beaucoup pour les informations et l'article

YoussefBelloum
Champion
Champion

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