Accéder au contenu principal

Nettoyage de données

Il arrive que les données source chargées dans Qlik Sense ne correspondent pas à la manière dont vous souhaitez les utiliser dans l'application Qlik Sense. C'est pourquoi Qlik Sense propose une pléiade de fonctions et d'instructions qui permettent de transformer les données dans un format exploitable.

Vous avez ainsi la possibilité de recourir au mappage dans un script Qlik Sense afin de remplacer ou de modifier des noms ou des valeurs de champ lors de l'exécution du script. Le mappage peut donc s'utiliser pour nettoyer ou uniformiser des données, ou encore pour remplacer intégralement ou en partie une valeur de champ.

Lorsque vous chargez des données provenant de différentes tables, les valeurs de champ renvoyant au même élément ne sont pas toujours nommées de façon cohérente. Comme ces incohérences empêchent les associations, elles posent problème. Pour remédier à ce problème de manière simple, il suffit de créer une table de mappage destinée à comparer les valeurs des champs.

Tables de mappage

Les tables chargées via Mapping load ou Mapping select sont traitées différemment des autres tables. Elles sont stockées dans une zone distincte de la mémoire et sont utilisées uniquement comme tables de mappage au moment de l'exécution du script. Une fois le script exécuté, ces tables sont automatiquement retirées.

Règles :

  • Une table de mappage doit comprendre deux colonnes, la première contenant les valeurs de comparaison et la seconde les valeurs de mappage voulues.
  • Les deux colonnes doivent être nommées, mais les noms ne sont pas importants en eux-mêmes. Ils sont sans rapport avec les noms des champs dans les tables internes normales.

Fonctions et instructions Mapping

Les fonctions et instructions de mappage suivantes sont évoquées au cours de ce didacticiel :

• Préfixe Mapping

ApplyMap()

MapSubstring()

• Instruction Map … Using

• Instruction Unmap

Préfixe Mapping

Le préfixe Mapping sert à créer une table de mappage dans un script. La table de mappage peut ensuite s'utiliser avec la fonction ApplyMap(), la fonction MapSubstring() ou l'instruction Map … Using.

Procédez comme suit :

  1. Créez une application et nommez-la.
  2. Ajoutez une nouvelle section de script dans l'éditeur de chargement de données.
  3. Appelez la section Countries.
  4. Saisissez les lignes de script suivantes :
  5. CountryMap: MAPPING LOAD * INLINE [ Country, NewCountry U.S.A., US U.S., US United States, US United States of America, US ];

    La table CountryMap stocke deux colonnes : Country et NewCountry. La colonne Country contient les différentes façons dont le pays a été spécifié dans le champ Country. La colonne NewCountry contient le mode de mappage des valeurs. Cette table de mappage permettra de stocker des valeurs de pays US cohérentes dans le champ Country. Par exemple, si U.S.A. est stocké dans le champ Country, mappez-le pour qu'il corresponde à US.

ApplyMap() fonction

Utilisez ApplyMap() pour remplacer des données dans un champ en fonction d'une table de mappage créée précédemment. Veillez à charger la table de mappage avant d'utiliser la fonction ApplyMap(). Les données dans la table Data.xlsx que vous chargerez ressemblera à ceci :

Table de données
ID Nom Country Code
1 John Black U.S.A. SDFGBS1DI
2 Steve Johnson U.S. 2ABC
3 Mary White États-Unis DJY3DFE34
4 Susan McDaniels u DEF5556
5 Dean Smith US KSD111DKFJ1

Vous noterez que le pays est indiqué sous différentes formes. Afin d'uniformiser le champ du pays, la table de mappage est chargée, puis la fonction ApplyMap() est appliquée.

Procédez comme suit :

  1. Sous le script que vous saisissez ci-dessus, sélectionnez et chargez Data.xlsx, puis insérez le script.
  2. Insérez ce qui suit au-dessus de l'instruction LOAD que vous venez de créer :
  3. Données :

    Le script devrait avoir l'aspect suivant :

    CountryMap: MAPPING LOAD * INLINE [ Country, NewCountry U.S.A., US U.S., US United States, US United States of America, US ]; Data: LOAD ID, Name, Country, Code FROM [lib://DataFiles/Data.xlsx] (ooxml, embedded labels, table is Sheet1);

  4. Modifiez la ligne contenant Country, de la manière suivante :
  5. ApplyMap('CountryMap', Country) as Country,

    Le premier paramètre de la fonction ApplyMap() contient le nom du mappage placé entre guillemets simples. Le deuxième paramètre correspond au champ dont les données doivent être remplacées.

  6. Cliquez sur Charger les données.
  7. La table résultante a l'aspect suivant :

    Table affichant des données chargées à l'aide de la fonction ApplyMap()
    Table showing data loaded using ApplyMap function.

    Les différentes orthographes du pays United States ont toutes été unifiées et remplacées par US. Un seul enregistrement était mal orthographié. La fonction ApplyMap() n'a donc pas modifié la valeur de ce champ. La fonction ApplyMap() permet d'utiliser le troisième paramètre pour ajouter une expression par défaut si la table de mappage ne dispose pas de valeur correspondante.

  8. Ajoutez 'US' comme troisième paramètre de la fonction ApplyMap() afin de traiter les cas où le pays peut avoir été mal orthographié :
  9. ApplyMap('CountryMap', Country, 'US') as Country,

    Le script devrait avoir l'aspect suivant :

    CountryMap: MAPPING LOAD * INLINE [ Country, NewCountry U.S.A., US U.S., US United States, US United States of America, US ]; Data: LOAD ID, Name, ApplyMap('CountryMap', Country, 'US') as Country, Code FROM [lib://DataFiles/Data.xlsx] (ooxml, embedded labels, table is Sheet1);

  10. Cliquez sur Charger les données.
  11. La table résultante a l'aspect suivant :

    Table affichant des données chargées à l'aide de la fonction ApplyMap

Note InformationsPour en savoir plus sur ApplyMap(), voir ces articles de blog dans Qlik Community : Don't join - use Applymap instead

MapSubstring() fonction

La fonction MapSubstring() vous permet de mapper des parties d'un champ.

Dans la table créée par la fonction ApplyMap(), nous souhaitons à présent écrire les nombres sous forme de texte. La fonction MapSubstring() va donc servir à remplacer les données numériques par du texte.

Pour ce faire, il convient tout d'abord de créer une table de mappage.

Procédez comme suit :

  1. Ajoutez les lignes de script suivantes à la fin de la section CountryMap, mais avant la section Data.
  2. CodeMap: MAPPING LOAD * INLINE [ F1, F2 1, one 2, two 3, three 4, four 5, five 11, eleven ];

    Dans la table CodeMap, les nombres 1 à 5 et 11 sont mappés.

  3. Dans la section Data du script, modifiez l'instruction Code de la manière suivante :
  4. MapSubString('CodeMap', Code) as Code

    Le script devrait avoir l'aspect suivant :

    CountryMap: MAPPING LOAD * INLINE [ Country, NewCountry U.S.A., US U.S., US United States, US United States of America, US ]; CodeMap: MAPPING LOAD * INLINE [ F1, F2 1, one 2, two 3, three 4, four 5, five 11, eleven ]; Data: LOAD ID, Name, ApplyMap('CountryMap', Country, 'US') as Country, MapSubString('CodeMap', Code) as Code FROM [lib://DataFiles/Data.xlsx] (ooxml, embedded labels, table is Sheet1);

  5. Cliquez sur Charger les données.
  6. La table résultante a l'aspect suivant :

    Table affichant des données chargées à l'aide de la fonction MapSubString
    Table showing data loaded using MapSubString function.

    Les caractères numériques ont été remplacés par du texte dans le champ Code. Si un nombre apparaît plus d'une fois comme dans le cas de ID=3 et ID=4, le texte est également répété. ID=4. Susan McDaniels comportait un 6 dans le code. Comme 6 n'était pas mappé dans la table CodeMap, il est reste inchangé. ID=5, Dean Smith, comportait 111 dans son code. Ce nombre a été mappé en tant que elevenone.

Note InformationsPour en savoir plus sur MapSubstring(), voir ces articles de blog dans Qlik Community : Mapping … and not the geographical kind (Mappage... et pas le type géographique)

Map … Using

L'instruction Map … Using peut également s'utiliser pour appliquer un mappage à un champ. Cependant, elle fonctionne un peu différemment de l'instruction ApplyMap(). Alors que l'instruction ApplyMap() traite le mappage chaque fois qu'elle rencontre le nom du champ, Map … Using fonctionne lorsque la valeur est stockée sous le nom du champ dans la table interne.

Examinons un exemple. Supposons que nous chargions plusieurs fois dans le script le champ Country et que nous souhaitions appliquer un mappage chaque fois que le champ est chargé. Nous pourrions utiliser la fonction ApplyMap() comme illustré précédemment dans ce didacticiel ou opter pour Map … Using.

Si nous choisissons la fonction Map … Using, le mappage est appliqué au champ lorsque celui-ci est stocké dans la table interne. Ainsi, dans l'exemple ci-dessous, le mappage serait appliqué au champ Country de la table Data1 mais pas au champ Country2 de la table Data2. Cela s'explique par le fait que l'instruction Map … Using est uniquement appliquée aux champs intitulés Country. Lorsque le champ Country2 est stocké dans la table interne, il n'est plus nommé Country. Si vous souhaitez appliquer le mappage à la table Country2, utilisez dans ce cas la fonction ApplyMap().

L'instruction Unmap met fin à l'instruction Map … Using. Par conséquent, si Country devait être chargé après l'instruction Unmap, CountryMap ne serait pas appliqué.

Procédez comme suit :

  1. Remplacez le script pour la table Data avec ce qui suit :
  2. Map Country Using CountryMap;
    Data1:
    LOAD
        ID,
        Name,
        Country
    FROM [lib://DataFiles/Data.xlsx]
    (ooxml, embedded labels, table is Sheet1);
    					
    Data2:
    LOAD
        ID,
        Country as Country2
    FROM [lib://DataFiles/Data.xlsx]
    (ooxml, embedded labels, table is Sheet1);
    UNMAP;

  3. Cliquez sur Charger les données.
  4. La table résultante a l'aspect suivant :

    Table affichant des données chargées à l'aide de la fonction Map … Using
    Table showing data loaded using Map … Using function.