TUTORIEL · QLIK SENSE

Débuter avec le script de chargement Qlik

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
20 / 20