TUTORIEL · QLIK SENSE
Resident Load ou Preceding Load ?
Deux façons d’enchaîner des transformations dans Qlik Sense : suivez les données pas à pas et voyez quand utiliser chacune.
Le problème à résoudre
Resident Load et Preceding Load permettent tous les deux d’enchaîner plusieurs étapes de transformation. Pour bien voir leur différence, nous allons résoudre exactement le même besoin avec les deux méthodes.
Le fichier VENTES.qvd contient les données suivantes :
| ID_VENTE | DATE_TEXTE | QUANTITE | PRIX_UNITAIRE |
|---|---|---|---|
| V001 | 2026-09-15 | 2 | 25 |
| V002 | 2026-09-16 | 3 | 40 |
| V003 | 2026-09-17 | 1 | 75 |
Objectif : interpréter DATE_TEXTE, calculer CA_LIGNE et produire une date DATE_VENTE.
Nous conserverons le même besoin dans les chapitres suivants : seule la façon d’enchaîner les transformations changera.
| DATE_TEXTE | date présente dans la source |
|---|---|
| CA_LIGNE | QUANTITE × PRIX_UNITAIRE |
| DATE_VENTE | date finale |
Resident Load : créer puis relire une table
Avec Resident, la première étape crée réellement une table dans Qlik. Une seconde instruction LOAD peut ensuite relire cette table et poursuivre les transformations.
Enchaînement : VENTES.qvd → VENTES_TMP → VENTES.
- Le premier LOAD lit le QVD et crée la table
VENTES_TMP. - Le second LOAD utilise
Resident VENTES_TMPpour poursuivre les transformations. DROP TABLE VENTES_TMPsupprime la table temporaire lorsqu’elle n’est plus utile.
Le mot important est « Resident » : la source du second LOAD réside déjà dans la mémoire de l’application Qlik.
Exemple · Même transformation avec Resident Load
// ÉTAPE 1 — création d'une table intermédiaire
VENTES_TMP:
LOAD
ID_VENTE,
Date#(DATE_TEXTE, 'YYYY-MM-DD') AS DATE_BRUTE,
QUANTITE,
PRIX_UNITAIRE,
QUANTITE * PRIX_UNITAIRE AS CA_LIGNE
FROM [lib://Donnees/VENTES.qvd] (qvd);
// ÉTAPE 2 — on relit la table déjà chargée
VENTES:
LOAD
ID_VENTE,
Date(DATE_BRUTE, 'DD/MM/YYYY') AS DATE_VENTE,
CA_LIGNE
Resident VENTES_TMP;
// ÉTAPE 3 — la table intermédiaire n'est plus utile
DROP TABLE VENTES_TMP;| VENTES_TMP | existe réellement dans Qlik |
|---|---|
| Resident | relit une table déjà chargée |
| DROP TABLE | retire la table temporaire |
Preceding Load : faire remonter les données
Avec un Preceding Load, il n’y a pas de table intermédiaire nommée. Le résultat du LOAD inférieur est transmis directement au LOAD placé juste au-dessus.
Les instructions LOAD sont écrites l’une au-dessus de l’autre. Pour comprendre leur exécution, il faut les lire de bas en haut.
- Le LOAD inférieur lit
VENTES.qvdet calculeDATE_BRUTEetCA_LIGNE. - Le résultat est transmis directement au LOAD supérieur.
- Le LOAD supérieur construit
DATE_VENTE. Aucune table intermédiaire nommée n’est créée.
Dans le fichier script, le LOAD supérieur est écrit en premier. Dans le flux de données, c’est pourtant le LOAD du bas qui commence le travail.
Exemple · La même transformation avec un Preceding Load
// ÉTAPE 2 — ce LOAD reçoit le résultat du LOAD inférieur
VENTES:
LOAD
ID_VENTE,
Date(DATE_BRUTE, 'DD/MM/YYYY') AS DATE_VENTE,
CA_LIGNE;
// ÉTAPE 1 — celui-ci s'exécute d'abord
LOAD
ID_VENTE,
Date#(DATE_TEXTE, 'YYYY-MM-DD') AS DATE_BRUTE,
QUANTITE * PRIX_UNITAIRE AS CA_LIGNE
FROM [lib://Donnees/VENTES.qvd] (qvd);| LOAD inférieur | s’exécute en premier |
|---|---|
| Résultat | remonte au LOAD supérieur |
| Table temporaire | aucune table nommée |
Même résultat, deux chemins
Resident et Preceding aboutissent ici au même résultat. Mais les deux solutions ne sont pas équivalentes en termes de simplicité : dans ce cas précis, le Preceding Load est le choix le plus naturel.
Les deux méthodes produisent ici le même résultat, mais leur fonctionnement diffère :
| Critère | Resident Load | Preceding Load |
|---|---|---|
| Enchaînement | Une table est créée puis relue. | Le résultat passe directement d’un LOAD à l’autre. |
| Table intermédiaire | VENTES_TMP existe en mémoire. | Aucune table intermédiaire nommée. |
| Cas adapté | Étape à conserver ou à réutiliser. | Transformations successives et linéaires. |
Dans cet exemple, Preceding Load est le plus simple : la table temporaire ne servirait qu’une fois.
Résultat obtenu dans les deux cas :
| ID_VENTE | DATE_VENTE | CA_LIGNE |
|---|---|---|
| V001 | 15/09/2026 | 50 |
| V002 | 16/09/2026 | 120 |
| V003 | 17/09/2026 | 75 |
Ici, choisissez Preceding : le traitement est linéaire et aucune étape intermédiaire n’a besoin d’être conservée ou réutilisée.
| Résultat final | identique dans cet exemple |
|---|---|
| Resident | table intermédiaire |
| Preceding | chaîne directe |
Quand Resident devient plus naturel
Preceding est très pratique pour une chaîne linéaire. Resident devient particulièrement intéressant lorsque la même étape intermédiaire doit être relue, agrégée ou servir à plusieurs traitements.
Une table intermédiaire peut servir à plusieurs traitements. Par exemple, VENTES_TMP peut alimenter :
- un calcul de chiffre d’affaires par vente ;
- une agrégation par mois ;
- un contrôle ou une autre transformation.
Dans ce cas, Resident Load permet de réutiliser les données préparées sans répéter le chargement initial. Il peut aussi être combiné avec un Preceding Load, comme dans l’exemple ci-dessous.
Ici, matérialiser VENTES_TMP a un véritable intérêt : la même étape préparée sert plusieurs fois. On combine ici Resident et Preceding : le champ MOIS est préparé avant le GROUP BY, qui doit porter sur un nom de champ.
Exemple · Une table intermédiaire réutilisée
// VENTES_TMP a été créée au chapitre 2 :
// ID_VENTE, DATE_BRUTE, QUANTITE, PRIX_UNITAIRE, CA_LIGNE.
CA_Vente:
LOAD
ID_VENTE,
Sum(CA_LIGNE) AS CA_VENTE
Resident VENTES_TMP
GROUP BY ID_VENTE;
// Le LOAD inférieur prépare le champ MOIS,
// le LOAD supérieur peut alors faire GROUP BY MOIS.
CA_Mois:
LOAD
MOIS,
Sum(CA_LIGNE) AS CA_MOIS
GROUP BY MOIS;
LOAD
MonthStart(DATE_BRUTE) AS MOIS,
CA_LIGNE
Resident VENTES_TMP;
// Une fois toutes les réutilisations terminées
DROP TABLE VENTES_TMP;| 1 table source | plusieurs traitements possibles |
|---|---|
| GROUP BY | agrégation lisible |
| DROP TABLE | après la dernière utilisation |
Comment choisir ?
Resident et Preceding ne sont pas des concurrents. Ce sont deux outils différents pour organiser les transformations d’un script Qlik.
| Situation | Approche |
|---|---|
| Une seule transformation suffit. | Un seul LOAD. |
| Plusieurs transformations se suivent directement. | Preceding Load. |
| Une étape doit être conservée ou réutilisée. | Resident Load. |
Le bon réflexe : choisir la solution qui rend le chemin des données le plus facile à comprendre, sans ajouter d’étape inutile.
Un même script peut parfaitement utiliser Resident à un endroit et Preceding à un autre.
Exemple
| Réflexe SOSBI | Un seul LOAD si possible · Preceding pour une chaîne directe · Resident pour une étape matérialisée ou réutilisée | la lisibilité du traitement reste prioritaire |
|---|
| 1 LOAD | si une seule étape suffit |
|---|---|
| Preceding | transformations en chaîne |
| Resident | étape matérialisée ou réutilisée |