Apprendre pas à pas le chargement des données dans Qlik : LOAD, sources QVD, Excel et SQL, transformations, associations, JOIN, KEEP, CONCATENATE, Resident, Preceding Load, Mapping, STORE et DROP.
CHAPITRE 01
Comprendre ce que fait un chargement Qlik
Débutant
Exemple Qlik Sense
Du fichier source au modèle de donnéesSource externe → LOAD → données disponibles dans une table Qlik → transformations → modèle de donnéesSTORE peut aussi écrire le contenu d’une table chargée dans Qlik dans un fichier QVD
💡
À quoi ça sert ?
Un fichier Clients.qvd peut par exemple contenir une liste de clients. Tant que le script ne le charge pas, ces données restent uniquement dans le fichier. Une instruction LOAD peut les lire et créer dans Qlik une table appelée Clients. Les instructions placées plus loin dans le script peuvent alors utiliser cette table. À la fin du rechargement, les tables qui n’ont pas été supprimées constituent le modèle de données de l’application.
✓ Avantages
Les données chargées peuvent ensuite être transformées et associées à d’autres tables
△ Points de vigilance
Il faut distinguer la source d’origine des données présentes dans l’application
1 / 20
CHAPITRE 02
Premier LOAD : charger des données depuis un QVD
Débutant
Exemple Qlik Sense
// Le fichier Clients.qvd est notre source de données.
Clients:
LOAD
ID_CLIENT,
NOM_CLIENT,
VILLE
FROM [lib://Donnees/Clients.qvd] (qvd);
// Les données lues dans le QVD sont maintenant disponibles dans la table Clients.
💡
À quoi ça sert ?
Lorsque Qlik exécute ce LOAD, il lit dans Clients.qvd les trois champs indiqués : ID_CLIENT, NOM_CLIENT et VILLE. Ces données sont chargées dans l’application sous la forme d’une table appelée Clients. Le fichier Clients.qvd, lui, n’est pas modifié : il reste simplement la source des données sur le disque. La table Clients est maintenant chargée en mémoire par Qlik et les instructions suivantes du script peuvent l’utiliser.
✓ Avantages
Permet de voir clairement le passage du fichier source vers la table chargée dans Qlik
Le QVD est un format particulièrement adapté aux chargements Qlik
△ Points de vigilance
La connexion lib:// doit exister dans l’environnement
2 / 20
CHAPITRE 03
Charger depuis Excel ou CSV : le principe reste le même
Débutant
Exemple Qlik Sense
// Produits.xlsx contient les données à charger.
Produits:
LOAD
ID_PRODUIT,
LIBELLE_PRODUIT,
CATEGORIE
FROM [lib://Donnees/Produits.xlsx]
(ooxml, embedded labels, table is Produits);
// Les données sélectionnées sont maintenant disponibles dans la table Produits.
💡
À quoi ça sert ?
Dans cet exemple, Produits.xlsx contient les données de départ. FROM indique où se trouve le fichier. La partie entre parenthèses précise comment Qlik doit lire ce fichier Excel. Une fois le LOAD terminé, les champs demandés sont disponibles dans une table Qlik appelée Produits. Le fichier Excel reste inchangé sur le disque.
✓ Avantages
Même logique pour de nombreux fichiers
△ Points de vigilance
Les paramètres de lecture changent selon le format
3 / 20
CHAPITRE 04
Charger depuis une base de données : comprendre SELECT et LOAD
Débutant
Exemple Qlik Sense
// Les données de départ se trouvent dans la table COMMANDES de la BDD.
Commandes:
LOAD
ORDER_ID AS ID_COMMANDE,
CUSTOMER_ID AS ID_CLIENT,
Date(ORDER_DATE) AS DATE_COMMANDE,
AMOUNT AS CA_HT;
SQL SELECT
ORDER_ID,
CUSTOMER_ID,
ORDER_DATE,
AMOUNT
FROM COMMANDES;
// Le résultat est maintenant disponible dans la table Qlik Commandes.
💡
À quoi ça sert ?
Dans l’exemple, SQL SELECT demande quatre colonnes à la table COMMANDES de la base de données. Les lignes renvoyées par la BDD sont ensuite traitées par le LOAD placé au-dessus. Ce LOAD renomme plusieurs champs et transforme la date. Le résultat final est chargé dans Qlik sous le nom Commandes. Il n’existe pas une première table créée par SELECT puis une seconde par LOAD : les deux instructions font partie du même chargement.
✓ Avantages
Sépare clairement extraction SQL et logique Qlik
△ Points de vigilance
Une fonction Qlik ne doit pas être confondue avec une fonction SQL
4 / 20
CHAPITRE 05
Transformer pendant le LOAD
Débutant
Exemple Qlik Sense
// Le QVD fournit les données ; le LOAD les prépare avant de les charger dans Commandes.
Commandes:
LOAD
ID_COMMANDE,
ID_CLIENT,
Date(DATE_BRUTE) AS DATE_COMMANDE,
QUANTITE,
PRIX_UNITAIRE,
QUANTITE * PRIX_UNITAIRE AS CA_HT
FROM [lib://Donnees/Commandes.qvd] (qvd);
// Commandes contient maintenant DATE_COMMANDE et CA_HT.
💡
À quoi ça sert ?
Le QVD contient notamment DATE_BRUTE, QUANTITE et PRIX_UNITAIRE. Pendant le chargement, Qlik applique Date() à DATE_BRUTE et calcule QUANTITE * PRIX_UNITAIRE pour chaque ligne. Les résultats sont stockés dans les champs DATE_COMMANDE et CA_HT de la table Commandes chargée dans l’application.
✓ Avantages
Prépare directement les données utiles au modèle
△ Points de vigilance
Un mauvais renommage peut créer ou casser une association entre tables
5 / 20
CHAPITRE 06
WHERE et DISTINCT : choisir les lignes à charger
Débutant
Exemple Qlik Sense
// Le QVD contient tous les clients.
ClientsActifs:
LOAD DISTINCT
ID_CLIENT,
NOM_CLIENT
FROM [lib://Donnees/Clients.qvd] (qvd)
WHERE ACTIF = 1;
// ClientsActifs contient uniquement les lignes qui ont passé le filtre.
💡
À quoi ça sert ?
Le QVD contient des clients actifs et inactifs. WHERE ACTIF = 1 indique que seuls les clients actifs doivent être chargés dans ClientsActifs. DISTINCT s’applique aux champs chargés, ici ID_CLIENT et NOM_CLIENT, et évite de conserver plusieurs fois une même combinaison identique.
✓ Avantages
Réduit les données inutiles dès le chargement
△ Points de vigilance
Un filtre incorrect peut éliminer des données nécessaires
6 / 20
CHAPITRE 07
Charger une deuxième table : comprendre l’association automatique
Débutant
Exemple Qlik Sense
// 1. On charge d’abord la table Clients.
Clients:
LOAD ID_CLIENT, NOM_CLIENT, VILLE
FROM [lib://Donnees/Clients.qvd] (qvd);
// 2. On charge ensuite la table Commandes.
Commandes:
LOAD ID_COMMANDE, ID_CLIENT, DATE_COMMANDE, CA_HT
FROM [lib://Donnees/Commandes.qvd] (qvd);
// Qlik associe automatiquement les deux tables grâce à ID_CLIENT.
💡
À quoi ça sert ?
Une fois les deux LOAD terminés, Qlik conserve Clients et Commandes comme deux tables distinctes. Comme elles possèdent un champ portant exactement le même nom, ID_CLIENT, Qlik les associe automatiquement par ce champ. Aucun JOIN n’est nécessaire pour créer cette relation.
✓ Avantages
Pas besoin de fusionner toutes les tables
△ Points de vigilance
Tout champ commun crée une association, même si vous ne la vouliez pas
7 / 20
CHAPITRE 08
JOIN : fusionner les données de deux sources dans une seule table
Débutant
Exemple Qlik Sense
// ÉTAPE 1 : on charge d’abord Clients.
Clients:
LOAD ID_CLIENT, NOM_CLIENT
FROM [lib://Donnees/Clients.qvd] (qvd);
// ÉTAPE 2 : on lit Segments.qvd et on fusionne dans Clients.
LEFT JOIN (Clients)
LOAD ID_CLIENT, SEGMENT
FROM [lib://Donnees/Segments.qvd] (qvd);
// APRÈS : Clients contient aussi SEGMENT.
💡
À quoi ça sert ?
Le premier LOAD charge la table Clients. LEFT JOIN (Clients) indique ensuite que les données lues dans Segments.qvd doivent être rapprochées de Clients à partir des champs communs, ici ID_CLIENT. Le champ SEGMENT est ajouté aux lignes correspondantes de Clients. Le second chargement ne reste donc pas sous la forme d’une table séparée.
✓ Avantages
Utile quand une vraie fusion est souhaitée
△ Points de vigilance
Un JOIN mal maîtrisé peut modifier le nombre de lignes
8 / 20
CHAPITRE 09
KEEP : comparer deux chargements sans les fusionner
Débutant
Exemple Qlik Sense
// 1. On charge d’abord Clients.
Clients:
LOAD ID_CLIENT, NOM_CLIENT
FROM [lib://Donnees/Clients.qvd] (qvd);
// 2. Commandes est chargée et comparée à Clients.
INNER KEEP (Clients)
Commandes:
LOAD ID_COMMANDE, ID_CLIENT, CA_HT
FROM [lib://Donnees/Commandes.qvd] (qvd);
// APRÈS : Clients et Commandes restent deux tables distinctes.
💡
À quoi ça sert ?
Le premier LOAD charge Clients. Le second charge Commandes avec INNER KEEP (Clients). Qlik compare alors les valeurs du champ commun ID_CLIENT et ne conserve que les enregistrements ayant une correspondance selon la logique du INNER KEEP. À la fin, Clients et Commandes restent deux tables distinctes.
✓ Avantages
Préserve des tables séparées
△ Points de vigilance
Il faut comprendre précisément quelles lignes sont conservées
9 / 20
CHAPITRE 10
CONCATENATE : ajouter des lignes à une table déjà chargée
Débutant
Exemple Qlik Sense
// 1. Ventes est créée avec les lignes 2025.
Ventes:
LOAD ID_VENTE, DATE_VENTE, CA_HT
FROM [lib://Donnees/Ventes_2025.qvd] (qvd);
// 2. On ajoute les lignes 2026 à la table Ventes déjà chargée.
CONCATENATE (Ventes)
LOAD ID_VENTE, DATE_VENTE, CA_HT
FROM [lib://Donnees/Ventes_2026.qvd] (qvd);
// APRÈS : une seule table Ventes contient 2025 + 2026.
💡
À quoi ça sert ?
Le premier LOAD crée la table Ventes à partir de Ventes_2025.qvd. Le second LOAD lit Ventes_2026.qvd. Grâce à CONCATENATE (Ventes), ses lignes sont ajoutées à la table Ventes déjà chargée au lieu de créer une seconde table. Le résultat est une seule table contenant les ventes des deux années.
✓ Avantages
Idéal pour empiler années, mois ou sources comparables
△ Points de vigilance
Des structures différentes créent des valeurs nulles dans les champs absents
10 / 20
CHAPITRE 11
NoConcatenate : demander explicitement deux tables séparées
Débutant
Exemple Qlik Sense
// 1 — On charge les ventes 2025.
Ventes:
LOAD ID_VENTE, DATE_VENTE, CA_HT
FROM [lib://Donnees/Ventes_2025.qvd] (qvd);
// 2 — Même structure, autre source.
// NoConcatenate impose la création d’une nouvelle table.
Ventes_2026:
NoConcatenate
LOAD
ID_VENTE,
DATE_VENTE,
CA_HT
FROM [lib://Donnees/Ventes_2026.qvd] (qvd);
// À la fin, Ventes et Ventes_2026 restent deux tables distinctes.
💡
À quoi ça sert ?
Le premier LOAD charge Ventes_2025.qvd dans une table appelée Ventes. Nous chargeons ensuite Ventes_2026.qvd, qui contient exactement les mêmes champs. Dans ce cas, Qlik pourrait ajouter automatiquement les nouvelles lignes à Ventes. NoConcatenate lui demande au contraire de créer une deuxième table, Ventes_2026. Nous pouvons ainsi comprendre NoConcatenate sans utiliser encore Resident, qui sera expliqué à l’étape suivante.
✓ Avantages
Permet de choisir clairement si deux chargements doivent rester séparés
△ Points de vigilance
Deux tables de même structure ne doivent rester séparées que si cela répond à un besoin précis
11 / 20
CHAPITRE 12
Resident LOAD : relire une table déjà chargée dans Qlik
Débutant
Exemple Qlik Sense
// ÉTAPE 1 — On charge d’abord Commandes depuis le QVD.
Commandes:
LOAD
ID_COMMANDE,
ID_CLIENT,
CA_HT
FROM [lib://Donnees/Commandes.qvd] (qvd);
// À ce stade, les données de Commandes sont déjà chargées dans Qlik.
// ÉTAPE 2 — Resident repart de cette table déjà chargée.
CA_Par_Client:
LOAD
ID_CLIENT,
Sum(CA_HT) AS CA_CLIENT
Resident Commandes
Group By ID_CLIENT;
// Le script dispose maintenant de Commandes et de CA_Par_Client.
💡
À quoi ça sert ?
Dans la première partie, Qlik lit Commandes.qvd et charge les données dans une table appelée Commandes. Ces données sont alors disponibles dans l’application. Dans la seconde partie, Resident Commandes indique à Qlik de relire cette table déjà chargée, et non le fichier QVD. Qlik regroupe alors les lignes par ID_CLIENT, calcule Sum(CA_HT) et charge le résultat dans une nouvelle table appelée CA_Par_Client.
✓ Avantages
Permet une seconde étape de transformation très lisible
△ Points de vigilance
La table source doit avoir été chargée avant le Resident
12 / 20
CHAPITRE 13
Preceding Load : enchaîner les transformations sans créer de table intermédiaire
Débutant
Exemple Qlik Sense
// Le flux des données remonte du LOAD inférieur vers le LOAD supérieur.
Commandes:
LOAD
ID_COMMANDE,
Date(DATE_BRUTE) AS DATE_COMMANDE;
LOAD
ID_COMMANDE,
Timestamp#(DATE_TEXTE,'YYYY-MM-DD hh:mm:ss') AS DATE_BRUTE
FROM [lib://Donnees/Commandes.csv]
(txt, utf8, embedded labels, delimiter is ',');
// APRÈS : seule Commandes est créée comme table de ce bloc.
💡
À quoi ça sert ?
Lisez le flux de bas en haut. Le LOAD inférieur lit le CSV et transforme le texte DATE_TEXTE en DATE_BRUTE. Chaque résultat est immédiatement transmis au LOAD supérieur, qui crée DATE_COMMANDE. Il n’existe pas de table intermédiaire nommée entre les deux LOAD.
✓ Avantages
Évite certaines tables intermédiaires
△ Points de vigilance
La lecture de bas en haut peut surprendre au début
13 / 20
CHAPITRE 14
Mapping LOAD + ApplyMap() : préparer une correspondance puis l’utiliser
Débutant
Exemple Qlik Sense
// ÉTAPE 1 — On charge d’abord la table de correspondance.
MapSegment:
Mapping LOAD
ID_CLIENT,
SEGMENT
FROM [lib://Donnees/Segments.qvd] (qvd);
// ÉTAPE 2 — Charger Commandes et consulter le mapping ligne par ligne.
Commandes:
LOAD
ID_COMMANDE,
ID_CLIENT,
ApplyMap('MapSegment', ID_CLIENT, 'Non classé') AS SEGMENT,
CA_HT
FROM [lib://Donnees/Commandes.qvd] (qvd);
// APRÈS : Commandes contient le champ SEGMENT enrichi.
💡
À quoi ça sert ?
MapSegment est chargé en premier et devient une table de mapping interne à Qlik. Puis Commandes est chargée depuis son QVD. Pour chaque ID_CLIENT, ApplyMap cherche la valeur dans MapSegment et place le résultat dans le nouveau champ SEGMENT.
✓ Avantages
Très clair pour un enrichissement clé → valeur
△ Points de vigilance
Ne remplace pas tous les besoins de jointure
14 / 20
CHAPITRE 15
STORE : enregistrer dans un QVD une table déjà chargée
Débutant
Exemple Qlik Sense
// ÉTAPE 1 — On charge d’abord Commandes.
Commandes:
LOAD ID_COMMANDE, ID_CLIENT, DATE_COMMANDE, CA_HT
FROM [lib://Donnees/Commandes_Source.qvd] (qvd);
// ÉTAPE 2 — Le contenu de la table déjà chargée dans Qlik est écrit sur disque.
STORE Commandes
INTO [lib://QVD/Commandes.qvd] (qvd);
// À la fin : Commandes reste disponible dans Qlik
// et Commandes.qvd existe aussi sur le disque.
💡
À quoi ça sert ?
Dans l’exemple, le premier LOAD charge les données dans la table Commandes. STORE peut alors enregistrer le contenu actuel de cette table dans Commandes.qvd. STORE ne retire pas Commandes de l’application : après l’écriture du fichier, la table reste disponible pour la suite du script.
✓ Avantages
Permet de réutiliser des données déjà préparées
△ Points de vigilance
STORE sauvegarde l’état de la table exactement au moment où il est exécuté
15 / 20
CHAPITRE 16
LOAD → STORE → DROP : comprendre le cycle complet
Débutant
Exemple Qlik Sense
// 1 — On charge les données dans Qlik.
Commandes:
LOAD
ID_COMMANDE,
ID_CLIENT,
DATE_COMMANDE,
CA_HT
FROM [lib://Donnees/Commandes_Source.qvd] (qvd);
// 2 — On enregistre le résultat dans un QVD.
STORE Commandes
INTO [lib://QVD/Commandes.qvd] (qvd);
// 3 — On retire la table de Qlik si elle n’est plus utile.
DROP TABLE Commandes;
// À la fin : Commandes a été retirée de Qlik,
// mais Commandes.qvd reste bien sur le disque.
💡
À quoi ça sert ?
L’ordre est important. Le LOAD doit passer en premier car STORE a besoin d’une table déjà chargée. STORE crée ensuite le fichier QVD sur le disque. Enfin, DROP TABLE retire Commandes des données actuellement chargées dans Qlik. Cette dernière instruction ne supprime pas le fichier QVD : le fichier et la table Qlik sont deux choses différentes.
✓ Avantages
Permet d’enregistrer un résultat intermédiaire ou final dans un QVD puis de libérer la table devenue inutile
△ Points de vigilance
DROP avant STORE supprimerait la table avant son écriture
16 / 20
CHAPITRE 17
DROP TABLE et DROP FIELD : retirer ce qui n’est plus utile
Débutant
Exemple Qlik Sense
// On suppose que ces objets ont été créés plus haut dans le script.
DROP TABLE Commandes_Temp;
DROP FIELD CleTechnique FROM Commandes;
// Commandes_Temp a été retirée de Qlik.
// Commandes est toujours présente, mais sans CleTechnique.
💡
À quoi ça sert ?
Une table temporaire peut par exemple servir à préparer un calcul puis devenir inutile. DROP TABLE retire alors cette table des données chargées dans Qlik. DROP FIELD retire seulement un champ d’une table. Après le DROP, les instructions suivantes ne peuvent plus utiliser l’élément supprimé.
✓ Avantages
Évite de conserver des objets techniques inutiles
△ Points de vigilance
Une suppression trop tôt casse les étapes suivantes qui en dépendent
17 / 20
CHAPITRE 18
INLINE : écrire une petite table directement dans le script
Débutant
Exemple Qlik Sense
// Les données sont écrites directement dans le script.
Statuts:
LOAD * INLINE [
CODE_STATUT, LIBELLE_STATUT
O, Ouverte
C, Clôturée
A, Annulée
];
// La table Statuts est maintenant chargée dans Qlik avec 3 lignes.
💡
À quoi ça sert ?
Le bloc entre crochets joue le rôle de source. La première ligne contient les noms de champs et les lignes suivantes contiennent les valeurs. LOAD * charge l’ensemble et crée la table Statuts dans Qlik. INLINE est particulièrement pratique pour de petites listes de référence ou pour faire des essais.
✓ Avantages
Permet de tester rapidement un exemple sans préparer de fichier externe
△ Points de vigilance
Pas adapté aux gros volumes ou aux référentiels maintenus ailleurs
18 / 20
CHAPITRE 19
Assembler le tout : construire un premier modèle de données
Débutant
Exemple Qlik Sense
// 1 — On charge Clients.
Clients:
LOAD ID_CLIENT, NOM_CLIENT, VILLE
FROM [lib://Donnees/Clients.qvd] (qvd);
// 2 — On charge Commandes.
Commandes:
LOAD
ID_COMMANDE,
ID_CLIENT,
ID_PRODUIT,
DATE_COMMANDE,
QUANTITE,
CA_HT
FROM [lib://Donnees/Commandes.qvd] (qvd);
// 3 — On charge Produits.
Produits:
LOAD ID_PRODUIT, LIBELLE_PRODUIT, CATEGORIE
FROM [lib://Donnees/Produits.qvd] (qvd);
// Associations : Clients ← ID_CLIENT → Commandes ← ID_PRODUIT → Produits
💡
À quoi ça sert ?
Le premier LOAD charge Clients. Le deuxième charge Commandes ; comme les deux tables possèdent ID_CLIENT, Qlik les associe par ce champ. Le troisième LOAD charge Produits ; ID_PRODUIT crée à son tour l’association avec Commandes. À la fin du rechargement, ces trois tables et leurs associations constituent le modèle de données utilisé par l’application.
✓ Avantages
Montre comment plusieurs chargements forment progressivement le modèle de données de l’application
△ Points de vigilance
Des champs portant le même nom peuvent créer des associations non souhaitées ; ce point sera approfondi dans le tutoriel sur le modèle associatif
19 / 20
CHAPITRE 20
Les principales instructions de chargement en un coup d’œil
Débutant
Exemple Qlik Sense
Les rôles essentielsLire une source → charger les données → les transformer ou les associer → éventuellement les enregistrer → conserver dans l’application uniquement les tables utiles.Chaque instruction intervient à une étape précise du chargement.
💡
À quoi ça sert ?
LOAD ... FROM lit une source externe. Resident repart d’une table déjà chargée. JOIN et CONCATENATE ajoutent des données à une table existante, selon des mécanismes différents. STORE écrit une table dans un fichier et DROP retire une table ou un champ de l’application. Cette distinction permet de lire plus facilement un script de chargement.
✓ Avantages
Ces rôles permettent d’identifier rapidement ce que fait chaque partie d’un script
△ Points de vigilance
Les traitements complexes peuvent combiner plusieurs de ces mécanismes