Pulizia dei dati
Talvolta i dati sorgente caricati in Qlik Sense non corrispondono necessariamente ai dati che si desidera avere nell'applicazione Qlik Sense. Qlik Sense offre una gamma di funzioni e istruzioni che consentono di convertire i dati nel formato desiderato.
È possibile utilizzare il mapping in uno script di Qlik Sense per sostituire o modificare i valori o i nomi di campo durante l'esecuzione dello script, quindi il mapping consente di pulire i dati e renderli più uniformi o sostituire in parte o completamente un valore di campo.
Quando si caricano i dati da tabelle differenti, i valori di campo che indicano lo stesso elemento non sono sempre associati a nomi coerenti. Poiché questa mancanza di coerenza ostacola le associazioni, è necessario risolvere il problema. Per risolvere il problema in modo elegante, creare una tabella di mapping che consenta di confrontare i valori di campo.
Tabelle di mapping
Le tabelle caricate con Mapping load o Mapping select vengono trattate in modo diverso da altre tabelle. Vengono salvate in un'area di memoria separata e utilizzate solo come tabelle di mapping durante l'esecuzione dello script. Una volta eseguito lo script, queste tabelle verranno eliminate automaticamente.
Regole:
- Una tabella di mapping deve avere due colonne: una con i valori di confronto e una con i valori di mapping desiderati.
- Le due colonne devono avere un nome, ma i nomi non hanno rilevanza in se stessi. I nomi delle colonne non hanno alcuna connessione con i nomi dei campi delle tabelle interne standard.
Funzioni e istruzioni Mapping
In questo tutorial verranno trattate le funzioni/istruzioni di mapping seguenti:
• Prefisso Mapping
• ApplyMap()
• MapSubstring()
• Istruzione Map … Using
• Istruzione Unmap
Prefisso Mapping
Il prefisso Mapping viene utilizzato in uno script per creare una tabella di mapping. È quindi possibile utilizzare la tabella di mapping con la funzione ApplyMap(), la funzione MapSubstring() o l'istruzione Map … Using.
Procedere come indicato di seguito:
- Creare una nuova app e assegnarle un nome.
- Aggiungere una nuova sezione dello script nell'editor caricamento dati.
- Richiamare la sezione Countries.
- Immettere lo script seguente:
CountryMap:
MAPPING LOAD * INLINE [
Country, NewCountry
U.S.A., US
U.S., US
United States, US
United States of America, US
];
La tabella CountryMap memorizza due colonne: Country e NewCountry. La colonna Country memorizza i vari modi in cui il nome del paese è stato immesso nel campo Country. La colonna NewCountry memorizza il metodo di mapping dei valori. Questa tabella di mapping verrà utilizzata per memorizzare i valori uniformi del paese US nel campo Country. Ad esempio, se U.S.A. viene memorizzato nel campo Country, eseguire il mapping a US.
Funzione ApplyMap()
Utilizzare ApplyMap() per sostituire i dati in un campo in base a una tabella di mapping creata in precedenza La tabella di mapping deve essere caricata prima di poter utilizzare la funzione ApplyMap(). I dati nella tabella Data.xlsx che verrà caricata avranno l'aspetto seguente:
ID | Nome | Paese | Codice |
---|---|---|---|
1 | John Black | USA | SDFGBS1DI |
2 | Steve Johnson | U.S. | 2ABC |
3 | Mary White | Stati Uniti | DJY3DFE34 |
4 | Susan McDaniels | u | DEF5556 |
5 | Dean Smith | US | KSD111DKFJ1 |
Notare come il nome del paese immesso è scritto in modi diversi. Per poter uniformare il campo relativo al paese, la tabella di mapping viene caricata, quindi viene utilizzata la funzione ApplyMap().
Procedere come indicato di seguito:
- Sotto lo script immesso sopra, selezionare e caricare Data.xlsx, quindi inserire lo script.
- Sopra l'istruzione LOAD appena creata immettere quanto segue:
- Modificare la riga contenente Country, nel modo seguente:
- Fare clic su Carica dati.
- Aggiungere 'US' come terzo parametro della funzione ApplyMap() per gestire quei casi in cui il nome del paese non viene immesso in modo corretto:
- Fare clic su Carica dati.
Data:
Lo script avrà questo aspetto:
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,
Nel primo parametro della funzione ApplyMap() il nome della mappa è racchiuso tra virgolette singole. Il secondo parametro corrisponde al campo con i dati da sostituire.
La tabella risultante avrà l'aspetto seguente:
Le diverse grafie di United States sono state tutte modificate in US. Un record non era stato scritto correttamente, quindi la funzione ApplyMap() non ha modificato quel valore di campo. La funzione ApplyMap() consente di utilizzare il terzo parametro per aggiungere un'espressione predefinita se la tabella di mapping non presenta un valore corrispondente.
ApplyMap('CountryMap', Country, 'US') as Country,
Lo script avrà questo aspetto:
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 tabella risultante avrà l'aspetto seguente:
Funzione MapSubstring()
La funzione MapSubstring() consente di eseguire il mapping di alcune parti di un campo.
Nella tabella creata da ApplyMap() si desidera scrivere i numeri in caratteri alfabetici e si utilizzerà quindi la funzione MapSubstring() per sostituire i dati numerici con il testo corrispondente.
A tale scopo occorre creare innanzitutto una tabella di mapping.
Procedere come indicato di seguito:
- Aggiungere le righe di script seguenti alla fine della sezione CountryMap, ma prima della sezione Data.
- Nella sezione Data dello script, modificare l'istruzione Code nel modo seguente:
- Fare clic su Carica dati.
CodeMap:
MAPPING LOAD * INLINE [
F1, F2
1, one
2, two
3, three
4, four
5, five
11, eleven
];
Nella tabella CodeMap vengono mappati i numeri da 1 a 5 e 11.
MapSubString('CodeMap', Code) as Code
Lo script avrà questo aspetto:
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 tabella risultante avrà l'aspetto seguente:
I caratteri numerici sono stati sostituiti dal testo nel campo Code. Se un numero compare più di una volta come in ID=3 e ID=4, anche il testo corrispondente verrà ripetuto. ID=4. Il codice di Susan McDaniels conteneva un 6. Dato che non era stato eseguito il mapping del 6 nella tabella CodeMap, non viene apportata alcuna modifica. ID=5, il codice di Dean Smith conteneva il numero 111. Il relativo mapping è 'elevenone'.
Map … Using
L'istruzione Map … Using può anche essere utilizzata per applicare una mappa a un campo. Tuttavia, funziona in modo un po' diverso rispetto a ApplyMap(). Mentre ApplyMap() gestisce il mapping ogni volta che si rileva il nome di campo, Map … Using gestisce il mapping quando il valore viene memorizzato nel nome di campo nella tabella interna.
Ecco di seguito un esempio. Si supponga di dover caricare più volte il campo Country nello script e di voler applicare una mappa a ogni caricamento del campo. È possibile utilizzare la funzione ApplyMap() come illustrato in precedenza in questo tutorial oppure è possibile utilizzare Map … Using.
Se viene utilizzata la funzione Map … Using, la mappa viene applicata al campo quando quest'ultimo viene memorizzato nella tabella interna. Quindi, nell'esempio seguente, la mappa viene applicata al campo Country nella tabella Data1, tuttavia non verrà applicata al campo Country2 nella tabella Data2. Ciò si verifica perché l'istruzione Map … Using viene applicata solo ai campi denominati Country. Quando il campo Country2 viene memorizzato nella tabella interna, il suo nome non sarà più Country. Per applicare la mappa alla tabella Country2, occorrerà utilizzare la funzione ApplyMap().
L'istruzione Unmap termina l'istruzione Map … Using, quindi se si dovesse caricare Country dopo l'istruzione Unmap, CountryMap non verrebbe applicata.
Procedere come indicato di seguito:
- Sostituire lo script per la tabella Data con quanto segue:
- Fare clic su Carica dati.
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 tabella risultante avrà l'aspetto seguente: