Vai al contenuto principale

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:

  1. Creare una nuova app e assegnarle un nome.
  2. Aggiungere una nuova sezione dello script nell'editor caricamento dati.
  3. Richiamare la sezione Countries.
  4. Immettere lo script seguente:
  5. 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:

Tabella dati
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:

  1. Sotto lo script immesso sopra, selezionare e caricare Data.xlsx, quindi inserire lo script.
  2. Sopra l'istruzione LOAD appena creata immettere quanto segue:
  3. Dati:

    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);

  4. Modificare la riga contenente Country, nel modo seguente:
  5. 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.

  6. Fare clic su Carica dati.
  7. La tabella risultante avrà l'aspetto seguente:

    Tabella in cui sono presenti dati caricati utilizzando la funzione ApplyMap()
    Table showing data loaded using ApplyMap function.

    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.

  8. Aggiungere 'US' come terzo parametro della funzione ApplyMap() per gestire quei casi in cui il nome del paese non viene immesso in modo corretto:
  9. 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);

  10. Fare clic su Carica dati.
  11. La tabella risultante avrà l'aspetto seguente:

    Tabella in cui sono presenti dati caricati utilizzando la funzione ApplyMap

Nota informaticaPer ulteriori informazioni su ApplyMap(), vedere questo post di blog in Qlik Community: Don't join - use Applymap instead (Non unire e usare invece Applymap)

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:

  1. Aggiungere le righe di script seguenti alla fine della sezione CountryMap, ma prima della sezione Data.
  2. 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.

  3. Nella sezione Data dello script, modificare l'istruzione Code nel modo seguente:
  4. 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);

  5. Fare clic su Carica dati.
  6. La tabella risultante avrà l'aspetto seguente:

    Tabella in cui sono presenti dati caricati utilizzando la funzione MapSubString
    Table showing data loaded using MapSubString function.

    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'.

Nota informaticaPer ulteriori informazioni su MapSubstring(), vedere questo post di blog in Qlik Community: Mapping... and not the geographical kind (Mappare … ma non nel senso geografico)

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:

  1. Sostituire lo script per la tabella Data con quanto segue:
  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. Fare clic su Carica dati.
  4. La tabella risultante avrà l'aspetto seguente:

    Tabella in cui sono presenti dati caricati utilizzando la funzione Map … Using
    Table showing data loaded using Map … Using function.