Skip to main content
Announcements
Qlik Introduces a New Era of Visualization! READ ALL ABOUT IT
cancel
Showing results for 
Search instead for 
Did you mean: 
sylvain_
Contributor II
Contributor II

Jointure

Bonjour,

j'aurais une question concernant les jointures dans le script de Qlik Sense.

Il faudrait que j'arrive à joindre les dates de deux tables. Mais si dans la table A je n'ai pas de date pour un mois donnée alors que j'ai ce mois pour les dates factures je dois conserver ce mois avec un montant null pour les engagement. Et inversement si je n'ai pas ce mois dans les factures mais que je l'ai dans les engagements alors je dois le garder et avoir une valeur de facture null.

Je vous met un exemple pour comprendre ce que je veux

Table A : Engagement

Date eng Montant eng
Janv. 2024 10
Fev. 2024 20
Fev. 2024 5
Avril. 2024 30

 

Table B : Facture

Date fac Montant fac
Fev. 2024 15
Mars. 2024 15
Mars. 2024 5

 

Et je voudrais une table comme ceci à la fin:

Date Montant eng Montant fac
Janv. 2024 10 -
Fev. 2024 25 15
Mars. 2024 - 20
Avril. 2024 30 30

 

Merci d'avance ^^

Sylvain

 

Labels (2)
4 Replies
igoralcantara
Partner - Specialist
Partner - Specialist

Bonjour Sylvain,

Pour réaliser cette jointure en Qlik Sense, il vous faut faire une jointure complète (full outer join). Vous pouvez obtenir le même résultat en utilisant une combinaison de left join, right join et union.

Voici comment vous pouvez procéder :

1. Chargez les deux tables dans Qlik Sense.
2. Effectuez une jointure gauche (left join) de la table des engagements sur la table des factures.
3. Effectuez une jointure droite (right join) de la table des engagements sur la table des factures.
4. Utilisez une union pour combiner les résultats des deux jointures.

Voici un exemple de script pour Qlik Sense :


// Chargement des données des engagements
Engagements:
LOAD * INLINE [
Date eng, Montant eng
Janv. 2024, 10
Fev. 2024, 20
Fev. 2024, 5
Avril. 2024, 30
];

// Chargement des données des factures
Factures:
LOAD * INLINE [
Date fac, Montant fac
Fev. 2024, 15
Mars. 2024, 15
Mars. 2024, 5
];

// Jointure gauche des engagements sur les factures
LEFT JOIN (Factures)
LOAD
[Date eng] as Date,
Sum([Montant eng]) as [Montant eng]
RESIDENT Engagements
GROUP BY [Date eng];

// Renommage des colonnes pour la jointure droite
RENAME FIELD [Date eng] TO Date;
RENAME FIELD [Montant eng] TO [Montant eng temp];

// Jointure droite des engagements sur les factures
RIGHT JOIN (Factures)
LOAD
[Date] as Date,
[Montant eng temp] as [Montant eng]
RESIDENT Engagements;

// Union des résultats des deux jointures
FinalTable:
LOAD
Date,
Sum([Montant eng]) as [Montant eng],
Sum([Montant fac]) as [Montant fac]
RESIDENT Factures
GROUP BY Date;

DROP TABLE Engagements;
DROP TABLE Factures;

Cela vous donnera une table finale avec toutes les dates des deux tables d'origine, et des montants null où il n'y a pas de correspondance.

J'espère que cela vous aide. Désolé pour mon français, ça fait longtemps et j'ai eu l'aide d'un traducteur pour que cela sonne mieux.

 

Check out my latest posts at datavoyagers.net
sylvain_
Contributor II
Contributor II
Author

Bonjour @igoralcantara 

Tout d'abord, merci pour votre retour. J'ai exécuté le script que vous m'avez proposé, mais je suis face à une erreur.

L'erreur suivante s'est produite:
The name 'Date' already exists.
 
Emplacement de l'erreur:
RENAME FIELD [Date eng] TO Date
 
Etant donné que je débute sur Qlik Sense, je ne sais pas trop comment régler ce problème.
Merci d'avance pour votre aide
 
Sylvain
igoralcantara
Partner - Specialist
Partner - Specialist

Merci pour votre retour. Il semble que le problème persiste. Voici une version révisée du script pour éviter les conflits de renommage et gérer correctement la jointure et l'agrégation :

 

 

 

// Chargement des données des engagements
Engagements:
LOAD * INLINE [
Date eng, Montant eng
Janv. 2024, 10
Fev. 2024, 20
Fev. 2024, 5
Avril. 2024, 30
];

// Chargement des données des factures
Factures:
LOAD * INLINE [
Date fac, Montant fac
Fev. 2024, 15
Mars. 2024, 15
Mars. 2024, 5
];

// Agrégation des engagements par mois
AggregatedEngagements:
LOAD
[Date eng] as Date,
Sum([Montant eng]) as [Montant eng]
RESIDENT Engagements
GROUP BY [Date eng];

// Agrégation des factures par mois
AggregatedFactures:
LOAD
[Date fac] as Date,
Sum([Montant fac]) as [Montant fac]
RESIDENT Factures
GROUP BY [Date fac];

// Combinaison des deux tables en utilisant une approche de jointure complète (full outer join)
ConcatenatedTables:
LOAD
Date,
[Montant eng],
Null() as [Montant fac]
RESIDENT AggregatedEngagements;

CONCATENATE (ConcatenatedTables)
LOAD
Date,
Null() as [Montant eng],
[Montant fac]
RESIDENT AggregatedFactures;

// Agrégation de la table combinée pour gérer les dates en double
FinalTable:
LOAD
Date,
Sum([Montant eng]) as [Montant eng],
Sum([Montant fac]) as [Montant fac]
RESIDENT ConcatenatedTables
GROUP BY Date;

// Suppression des tables intermédiaires inutiles
DROP TABLE AggregatedEngagements;
DROP TABLE AggregatedFactures;
DROP TABLE ConcatenatedTables;

Check out my latest posts at datavoyagers.net
sylvain_
Contributor II
Contributor II
Author

Merci beaucoup pour ce code révisé. Excellente journée à vous