TUTORIEL · QLIK SENSE
Mapping LOAD et ApplyMap()
Enrichir simplement une table Qlik à partir d’un référentiel, comprendre la valeur par défaut et maîtriser les cas où la correspondance n’existe pas.
Les données de départ
Nous disposons de deux QVD classiques : VENTES.qvd contient les commandes et leur code région ; REGIONS.qvd contient la correspondance entre chaque code et son libellé.
VENTES.qvd
| NUM_COMMANDE | CODE_REGION |
|---|---|
| C001 | PACA |
| C002 | OCC |
| C003 | BRE |
REGIONS.qvd
| CODE_REGION | LIBELLE_REGION |
|---|---|
| PACA | Provence-Alpes-Côte d’Azur |
| OCC | Occitanie |
| NAQ | Nouvelle-Aquitaine |
Le code BRE est présent dans les ventes, mais absent du référentiel. Nous verrons comment traiter cette absence.
Créer la table de mapping
MAPPING LOAD transforme le référentiel en table de correspondance à deux colonnes : une clé recherchée et la valeur à retourner.
La première colonne, CODE_REGION, est la clé recherchée. La seconde, LIBELLE_REGION, est la valeur retournée.
Une clé pour une valeur : chaque code région doit correspondre à un seul libellé. Si une clé doit réellement correspondre à plusieurs valeurs, une simple table de mapping ne convient pas.
La table de mapping est utilisée pendant le chargement du script ; elle ne devient pas une table classique du modèle final.
Exemple · Script Qlik Sense
CarteRegions:
MAPPING LOAD
CODE_REGION,
LIBELLE_REGION
FROM [lib://Donnees/REGIONS.qvd] (qvd);Utiliser ApplyMap()
ApplyMap() recherche CODE_REGION dans CarteRegions et renvoie le libellé correspondant. Le troisième paramètre permet de décider quoi retourner si la clé n’existe pas.
ApplyMap('CarteRegions', CODE_REGION, 'Région inconnue') utilise trois arguments :
| Argument | Rôle |
|---|---|
1. 'CarteRegions' | Nom de la table de mapping |
2. CODE_REGION | Valeur recherchée |
3. 'Région inconnue' | Valeur renvoyée si aucune correspondance n’est trouvée |
Le troisième argument est facultatif. Son absence modifie le résultat lorsque la clé n’existe pas dans le mapping.
Exemple · Enrichissement de VENTES.qvd
Ventes:
LOAD
NUM_COMMANDE,
CODE_REGION,
ApplyMap(
'CarteRegions',
CODE_REGION,
'Région inconnue'
) AS REGION
FROM [lib://Donnees/VENTES.qvd] (qvd);Observer le résultat
PACA et OCC trouvent leur libellé dans CarteRegions. BRE n’existe pas dans REGIONS.qvd : ApplyMap() retourne donc la valeur par défaut que nous avons choisie.
VENTES après enrichissement
| NUM_COMMANDE | CODE_REGION | REGION |
|---|---|---|
| C001 | PACA | Provence-Alpes-Côte d’Azur |
| C002 | OCC | Occitanie |
| C003 | BRE | Région inconnue |
La ligne C003 reste présente. Seule la nouvelle valeur REGION indique que la correspondance n’a pas été trouvée.
Les petits cas particuliers
C’est ici que le troisième paramètre d’ApplyMap() devient important. Selon la présence de la clé et de la valeur par défaut, Qlik ne renvoie pas la même chose.
Le résultat dépend de la présence de la clé et du troisième argument :
| Situation | Résultat | Explication |
|---|---|---|
Clé trouvée : PACA | Provence-Alpes-Côte d’Azur | La valeur associée est retournée. |
Clé absente avec défaut : BRE | Région inconnue | La valeur par défaut est retournée. |
Clé absente sans défaut : BRE | BRE | La valeur recherchée elle-même est retournée, pas NULL. |
Avec valeur par défaut
ApplyMap('CarteRegions', CODE_REGION, 'Région inconnue')
Sans valeur par défaut
ApplyMap('CarteRegions', CODE_REGION)
Bonnes pratiques
ApplyMap() est particulièrement agréable pour enrichir une table avec une information simple. Quelques habitudes permettent de garder le script lisible et les anomalies visibles.
Charger le mapping avant son utilisation. CarteRegions doit être disponible avant le LOAD qui appelle ApplyMap().
Choisir un nom explicite. Un nom comme CarteRegions décrit le rôle de la correspondance.
Définir une valeur par défaut adaptée. « Région inconnue » rend visible une absence de correspondance.
Contrôler l’unicité des clés. Si une clé correspond à plusieurs valeurs, il faut envisager une autre approche.
Garder le script simple. Pour ajouter un attribut isolé, ApplyMap() évite souvent une jointure inutile.