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_COMMANDECODE_REGION
C001PACA
C002OCC
C003BRE

REGIONS.qvd

CODE_REGIONLIBELLE_REGION
PACAProvence-Alpes-Côte d’Azur
OCCOccitanie
NAQNouvelle-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 :

ArgumentRôle
1. 'CarteRegions'Nom de la table de mapping
2. CODE_REGIONValeur 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_COMMANDECODE_REGIONREGION
C001PACAProvence-Alpes-Côte d’Azur
C002OCCOccitanie
C003BRERé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 :

SituationRésultatExplication
Clé trouvée : PACAProvence-Alpes-Côte d’AzurLa valeur associée est retournée.
Clé absente avec défaut : BRERégion inconnueLa valeur par défaut est retournée.
Clé absente sans défaut : BREBRELa 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.