Nettoyage de données
Il arrive que les données sources chargées dans Qlik Sense ne correspondent pas forcément à 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 tout ou partie d'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 :
- Créez une application et nommez-la.
- Ajoutez une nouvelle section de script dans l'éditeur de chargement de données.
- Appelez la section Countries.
- Saisissez les lignes de script suivantes :
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 :
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 :
- Sous le script que vous saisissez ci-dessus, sélectionnez et chargez Data.xlsx, puis insérez le script.
- Insérez ce qui suit au-dessus de l'instruction LOAD que vous venez de créer :
- Modifiez la ligne contenant Country, de la manière suivante :
- Cliquez sur Charger les données.
- Ajoutez 'US' comme troisième paramètre de la fonction ApplyMap() afin de traiter les cas où le pays peut avoir été mal orthographié :
- Cliquez sur Charger les données.
Data:
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);
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.
La table résultante a l'aspect suivant :
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.
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);
La table résultante a l'aspect suivant :
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 :
- Ajoutez les lignes de script suivantes à la fin de la section CountryMap, mais avant la section Data.
- Dans la section Data du script, modifiez l'instruction Code de la manière suivante :
- Cliquez sur Charger les données.
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.
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);
La table résultante a l'aspect suivant :
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.
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 :
- Remplacez le script pour la table Data avec ce qui suit :
- Cliquez sur Charger les données.
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;
La table résultante a l'aspect suivant :