Saltar al contenido principal Saltar al contenido complementario

Limpieza de datos

En ocasiones los datos fuente que cargamos en Qlik Sense no tienen exactamente el formato que deseamos en nuestra app de Qlik Sense. Qlik Sense ofrece una serie de funciones y sentencias que permiten transformar nuestros datos en un formato que nos vaya bien.

La sentencia mapping se puede utilizar en un script de Qlik Sense para reemplazar o modificar valores de campo o nombres cuando se ejecuta el script, así pues mapping puede servir para limpiar los datos y hacer que sean más sistematizados o para reemplazar la totalidad o partes de un valor de campo.

Cuando cargamos datos de distintas tablas, los nombres de los valores de campo no se han asignado siempre de forma sistemática. Esta falta de sistematicidad, aparte de ser molesta, impide también las asociaciones, es decir, que se hace imprescindible resolver el problema. La forma elegante de solucionar esto es creando una tabla de correspondencias que compare los valores de campo.

Tablas de correspondencia

Las tablas cargadas mediante Mapping load o Mapping select se tratan de manera diferente a otras tablas. Se almacenan en un área aparte de la memoria, y se usan solo como tablas de enlace durante la ejecución del script. Tras ejecutarse el script estas tablas se eliminan automáticamente.

Reglas:

  • Una tabla de correspondencia debe tener dos columnas, la primera con los valores de la comparación y la segunda con los valores que se desea enlazar.
  • Las dos columnas deben tener nombre, pero los nombres no tienen importancia por sí mismos. Los nombres de las columnas no tienen conexión con los nombres de campo en las tablas internas regulares.

Funciones y sentencias Mapping

Este tutorial aborda el uso de las siguientes funciones/sentencias de asignación de correspondencias:

• El prefijo Mapping

ApplyMap()

MapSubstring()

• La sentencia Map … Using

• La sentencia Unmap

El prefijo mapping

El prefijo Mapping se usa en un script para crear una tabla de correspondencia. La tabla de correspondencia se puede utilizar después con la función ApplyMap(), la función MapSubstring() o la sentencia Map … Using.

  1. Cree una nueva app y asígnele un nombre.
  2. Agregue una nueva sección de script en el Editor de carga de datos.
  3. Denomine a la sección Countries.
  4. Introduzca el siguiente script:
  5. CountryMap:
    MAPPING LOAD * INLINE [
    Country, NewCountry
    U.S.A., US
    U.S., US
    United States, US
    United States of America, US
    ];

    La tabla CountryMap almacena dos columnas: Country y NewCountry. La columna Country almacena las diversas formas en que se ha introducido country/país en el campo Country. La columna NewCountry almacena cómo se asignarán los valores. Esta tabla de correspondencia se utilizará para almacenar valores sistemáticos del país US en el campo Country. Por ejemplo, si U.S.A. se almacena en el campo Country, asígnelo como de US.

La función ApplyMap()

Use ApplyMap() para reemplazar datos de un campo basándose en una tabla de correspondencia previamente creada. La tabla de correspondencia debe cargarse previamente para poder utilizar la función ApplyMap(). Los datos en la tabla Data.xlsx que cargará se verán así:

Tabla de datos
IDNombrePaís:Código
1John BlackEstados UnidosSDFGBS1DI
2Steve JohnsonEE.UU.2ABC
3Mary WhiteUSADJY3DFE34
4Susan McDanielsuDEF5556
5Dean SmithUSKSD111DKFJ1

Observe que el país se introduce de diversas maneras. Para hacer que el campo país sea consistente, se carga la tabla de correspondencia y después se utiliza la función ApplyMap().

  1. Debajo del script que introdujo arriba, seleccione y cargue Data.xlsx, y luego inserte el script.
  2. Inserte lo siguiente sobre la sentencia LOAD recién creada:
  3. Data:

    Su script debería tener el aspecto siguiente:

    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. Modifique la línea que contiene Country, de la siguiente manera:
  5. ApplyMap('CountryMap', Country) as Country,

    El primer parámetro de la función ApplyMap() tiene el nombre de enlace entre paréntesis simples. El segundo parámetro es el campo que tiene los datos que se han de reemplazar.

  6. Haga clic en Cargar datos.
  7. La tabla resultante tiene el siguiente aspecto:

    Tabla que muestra los datos cargados usando la función ApplyMap()

    Tabla que muestra los datos cargados usando la función ApplyMap.

    Las diversas grafías de United States se han modificado por US. Hay un registro que no se escribió correctamente, por lo que la función ApplyMap() no cambió ese valor del campo. Usando la función ApplyMap(), puede usar el tercer parámetro para agregar una expresión predeterminada si la tabla de correspondencia no tiene un valor coincidente.

  8. Añada 'US' como el tercer parámetro de la función ApplyMap(), para manejar tales casos cuando el país se haya introducido incorrectamente:
  9. ApplyMap('CountryMap', Country, 'US') as Country,

    Su script debería tener el aspecto siguiente:

    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. Haga clic en Cargar datos.
  11. La tabla resultante tiene el siguiente aspecto:

    Tabla que muestra los datos cargados usando la función ApplyMap

Nota informativaSi desea más información sobre ApplyMap(), vea este blog en Qlik Community: No use join - use Applymap en su lugar

La función MapSubstring()

La función MapSubstring() le permite asignar partes de un campo.

En la tabla creada por ApplyMap() ahora queremos que los números se escriban como texto, por lo que la función MapSubstring() se utilizará para reemplazar los datos numéricos por texto.

Para hacer esto debemos crear primero una tabla de correspondencia.

  1. Añada las siguientes líneas de script al final de la sección CountryMap, pero antes de la sección Data.
  2. CodeMap:
    MAPPING LOAD * INLINE [
    F1, F2
    1, one
    2, two
    3, three
    4, four
    5, five
    11, eleven
    ];

    En la tabla CodeMap, los números del 1 al 5, y 11 están enlazados.

  3. En la sección Data del script modifique la sentencia Code de la siguiente manera:
  4. MapSubString('CodeMap', Code) as Code

    Su script debería tener el aspecto siguiente:

    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. Haga clic en Cargar datos.
  6. La tabla resultante tiene el siguiente aspecto:

    Tabla que muestra los datos cargados usando la función MapSubString

    Tabla que muestra los datos cargados usando la función MapSubString.

    Los caracteres numéricos fueron reemplazados por texto en el campo Code. Si un número aparece más de una vez como es el caso de ID=3 y ID=4, el texto también se repite. ID=4. Susan McDaniels tenía un 6 en su código. Puesto que 6 no estaba enlazado en la tabla CodeMap, permanece sin modificar. ID=5, Dean Smith, tenía 111 en su código. Esto se ha enlazado como 'elevenone'.

Nota informativaSi desea más información sobre MapSubstring(), vea este blog en Qlik Community: Mapping … and not the geographical kind

Map … Using

La sentencia Map … Using también se puede utilizar para aplicar un mapa a un campo. No obstante, funciona de una manera un poco diferente a ApplyMap(). Mientras que ApplyMap() gestiona la asignación cada vez que se encuentra el nombre del campo, Map … Using trata la asignación cuando el valor se almacena bajo el nombre del campo en la tabla interna.

Echemos un vistazo a un ejemplo. Supongamos que estábamos cargando el campo Country varias veces en el script y queríamos aplicar un mapa cada vez que se cargaba el campo. La función ApplyMap() se puede usar tal como se ilustra anteriormente en este tutorial o se puede usar Map … Using.

Si usamos Map … Using entonces el mapa se aplica al campo cuando el campo se almacena en la tabla interna. Así pues, en el ejemplo a continuación, el mapa se aplica al campo Country de la tabla Data1 pero no se aplicaría al campo Country2 de la tabla Data2. Esto se debe a que la sentencia Map … Using únicamente se aplica a campos denominados Country. Cuando el campo Country2 se almacena en la tabla interna deja de llamarse Country. Si desea que el mapa se aplique a la tabla Country2, debe utilizar la función ApplyMap().

La sentencia Unmap pone fin a la sentencia Map … Using, de modo que si se fuera a cargar Country detrás de la sentencia Unmap, CountryMap no se aplicaría.

  1. Reemplace el script de la tabla Data con lo siguiente:
  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. Haga clic en Cargar datos.
  4. La tabla resultante tiene el siguiente aspecto:

    Tabla que muestra los datos cargados usando la función Map … Using

    Tabla que muestra los datos cargados usando la función Map …

¿Esta página le ha sido útil?

No dude en indicarnos en qué podemos mejorar si encuentra algún problema en esta página o su contenido, como, por ejemplo, errores tipográficos, pasos que falta o errores técnicos.