# Mejores prácticas recomendadas en modelado de datos

Esta sección describe las distintas maneras en que puede cargar sus datos en una aplicación de Qlik Sense, dependiendo de cómo estén estructurados los datos y del modelo de datos que desee lograr.



## Convertir columnas de datos en filas

Nuestros datos probablemente tendrán el siguiente aspecto y no gustaría tener las cifras de ventas en un campo aparte:

Tabla de datos original

| Year | Q1 | Q2 | Q3 | Q4 |
| --- | --- | --- | --- | --- |
| 2013 | 34 | 54 | 53 | 52 |
| 2014 | 47 | 56 | 65 | 67 |
| 2015 | 57 | 56 | 63 | 71 |

Acción propuesta

Utilice el prefijo Crosstable cuando cargue la tabla.

El resultado tendrá el siguiente aspecto:

La tabla tras aplicar el prefijo Crosstable

| Year | Quarter | Sales |
| --- | --- | --- |
| 2013 | Q1 | 34 |
| 2013 | Q2 | 54 |
| 2013 | Q3 | 53 |
| 2013 | Q4 | 52 |
| 2014 | Q1 | 47 |
| ... | ... | ... |

Para más información sobre tablas cruzadas, vea [Trabajar con tablas cruzadas en el editor de carga de datos](https://help.qlik.com/es-ES/cloud-services/Subsystems/Hub/Content/Sense_Hub/LoadData/work-with-cross-tables.htm) y [Crosstable](https://help.qlik.com/es-ES/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/crosstable.htm).

## Convertir filas de datos en columnas

Si tenemos una tabla genérica con tres campos similares a esto y queremos que cada atributo se muestre como una tabla aparte:

Tabla genérica con tres campos

| Object | Attribute | Value |
| --- | --- | --- |
| ball | color | red |
| ball | diameter | 25 |
| ball | weight | 3 |
| box | color | 56 |
| box | height | 30 |
| box | length | 20 |
| box | width | 25 |

Acción propuesta

Cree un modelo de datos genérico utilizando el prefijo de carga Generic.

Obtendrá un modelo de datos con el siguiente aspecto:

![Modelo de datos genérico.](https://help.qlik.com/es-ES/cloud-services/Subsystems/Hub/Content/Resources/Images/ex_gen_GenericDatabase_300x300.png)

Para más información sobre datos genéricos, vea [Bases de datos genéricas](https://help.qlik.com/es-ES/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataSource/generic-databases.htm) y [Generic](https://help.qlik.com/es-ES/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Generic.htm).

## Cargar datos que están organizados en niveles jerárquicos, por ejemplo un diagrama de flujo de una organización

Nuestros datos quizá estén almacenados en tablas de nodos adyacentes con el siguiente aspecto:

Tabla de nodos adyacentes

| NodeID | ParentNodeID | Title |
| --- | --- | --- |
| 1 | - | General manager |
| 2 | 1 | Country manager |
| 3 | 2 | Region manager |

Acción propuesta

Cargue los datos con el prefijo Hierarchy para crear una tabla de nodos expandidos:

Tabla de nodos expandidos

| NodeID | ParentNodeID | Title | Level1 | Level2 | Level3 |
| --- | --- | --- | --- | --- | --- |
| 1 | - | General manager | General manager | - | - |
| 2 | 1 | Country manager | General manager | Country manager | - |
| 3 | 2 | Region manager | General manager | Country manager | Region manager |

Para más información sobre niveles jerárquicos, vea [Cargar datos jerárquicos](https://help.qlik.com/es-ES/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataSource/hierarchies.htm) y [Hierarchy](https://help.qlik.com/es-ES/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Hierarchy.htm).

## Cargar solo registros nuevos o actualizados de una base de datos extensa

Tengo una base de datos con un gran número de registros y no quiero recargar toda la base de datos para actualizar los datos en mi aplicación. Solo quiero cargar los registros que sean nuevos o actualizados, y eliminar registros que hayan sido borrados de la base de datos.

Acción propuesta

Implemente una solución de carga incremental utilizando archivos QVD.

Para más información, vea [Cargar registros nuevos y actualizados mediante la carga incremental](https://help.qlik.com/es-ES/cloud-services/Subsystems/Hub/Content/Sense_Hub/LoadData/use-QVD-files-incremental-load.htm).

## Combinar datos de dos tablas con un campo común

Qlik Sense asociará automáticamente tablas que tengan un campo común, pero queremos controlar cómo se combinan las tablas.

Acción propuesta : Join / Keep

Podemos combinar dos tablas en una única tabla interna con los prefijos Join o Keep.

Para más información, vea [Combinar tablas con Join y Keep](https://help.qlik.com/es-ES/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/combine-tables-join-keep.htm).

Acción propuesta : Mapping

Una alternativa para unir tablas es usar mapping, que automatiza la consulta de valores asociados en una tabla de enlace. Esto puede reducir la cantidad de datos que mostrar.

Para más información, vea [Usar mapping como alternativa a join](https://help.qlik.com/es-ES/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/use-mapping-as-alternative-join.htm).

## Asociar un valor discreto con un intervalo

Tengo una tabla de valores numéricos discretos (Event), y quiero hacerla coincidir con uno o más intervalos (Start y End).

Tabla de valores numéricos discretos (EventEvento)

| Hora | Evento | Comentario |
| --- | --- | --- |
| 00:00 | 0 | Inicio de turno 1 |
| 01:18 | 1 | Fin de línea |
| 02:23 | 2 | Reinicio de línea 50% |
| 04:15 | 3 | Velocidad de línea 100% |
| 08:00 | 4 | Inicio de turno 2 |
| 11:43 | 5 | Fin de la producción |

Tabla con los intervalos (StartStart y End End)

| Start | Fin | Pedido |
| --- | --- | --- |
| 01:00 | 03:35 | A |
| 02:30 | 07:58 | B |
| 03:04 | 10:27 | C |
| 07:23 | 11:43 | D |

Acción propuesta

Utilice el prefijo IntervalMatch para enlazar el campo Time con el intervalo definido por Start y End.

Para más información, vea [Emparejar intervalos con datos discretos](https://help.qlik.com/es-ES/cloud-services/Subsystems/Hub/Content/Sense_Hub/LoadData/matching-intervals-to-discrete-data.htm).

Si el intervalo no está definido explícitamente con start y end, sino que solo lleva una fecha-hora, como se ve en la tabla inferior, necesitaremos crear una tabla de intervalos.

Tabla con una fecha-hora del cambio

| Moneda | Datos del cambio | Tasa |
| --- | --- | --- |
| EUR | - | 8,59 |
| EUR | 28/01/2013 | 8,69 |
| EUR | 15/02/2013 | 8,45 |
| USD | - | 6.50 |
| USD | 10/01/2013 | 6.56 |
| USD | 03/02/2013 | 6.30 |

Para más información, vea [Creación de un intervalo de fechas a partir de una sola fecha](https://help.qlik.com/es-ES/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/create-date-interval-from-single-date.htm).

## Manejo de valores de campo inconsistentes

Mis datos contienen valores de campo nombrados de forma inconsistente en las distintas tablas. Por ejemplo, una tabla contiene el valor US en Country mientras que otra tabla contiene United States. Esta situación impedirá las asociaciones.

Table 1

| Country | Region |
| --- | --- |
| EE.UU. | Maryland |
| EE.UU. | Idaho |
| EE.UU. | New York |
| EE.UU. | California |

Table 2

| Country | Population |
| --- | --- |
| United States | 304 |
| Japan | 128 |
| Brazil | 192 |
| China | 1333 |

Acción propuesta

Haga una limpieza de datos utilizando una tabla de correspondencia (también denominada de enlace), eso comparará los valores y permitirá las asociaciones correctas.

Para más información, vea [Limpieza de datos](https://help.qlik.com/es-ES/cloud-services/Subsystems/Hub/Content/Sense_Hub/LoadData/data-cleansing.htm).

## Manejo de mayúsculas inconsistentes en valores de campo

Mis datos contienen valores de campo con un formato inconsistente en las distintas tablas. Por ejemplo, una tabla contiene el valor single en Type, mientras que otra tabla contiene Single en el mismo campo. Esta situación evitará las asociaciones, ya que el campo Type contendrá ambos valores, single y Single, las mayúsculas sí cuentan.

Table 1

| Tipo | Precio |
| --- | --- |
| único | 23 |
| doble | 39 |

Table 2

| Tipo | Color |
| --- | --- |
| Color único | Rojo |
| Color único | Azul |
| Doble | Blanco |
| Doble | Negro |

Acción propuesta

Si cargó los datos con Añadir datos, puede arreglar esto en el gestor de datos.

Haga lo siguiente:

1. En el gestor de datos, abra Table2 en el editor de tabla.

2. Renombre el campo Type como Table2.Type.

   Si acaba de agregar la tabla con Añadir datos con perfilado de datos habilitado, es posible que el campo ya tenga un nombre Table2.Type para evitar la asociación automática. En este caso, este procedimiento asociará las dos tablas.

3. Cree un campo calculado usando la expresión `Lower(Table2.Type)` y denomínelo Type.

4. Haga clic en Cargar datos.

Table1 y Table2 deberían estar asociadas ahora por el campo Type, que solo contiene valores en minúsculas, como single y double.

Si desea utilizar otro estilo diferente, también puede lograr esto con procedimientos similares, pero recuerde que las tablas se asociarán utilizando campos que tengan el mismo nombre.

* Para obtener todos los valores en mayúscula, como Single, cree el campo calculado Type en la tabla Table1 en su lugar y use la expresión `Capitalize(Table1.Type)`.
* Para obtener todos los valores en mayúscula, como SINGLE, cree el campo calculado Type en ambas tablas y utilice las expresiones `Upper(Table1.Type)` y `Upper(Table2.Type)` respectivamente.

Para más información sobre campos calculados, vea [Usar los campos calculados](https://help.qlik.com/es-ES/cloud-services/Subsystems/Hub/Content/Sense_Hub/LoadData/add-calculated-field.htm).

Para más información sobre mayúsculas, vea [Capitalize Función de script y de gráfico](https://help.qlik.com/es-ES/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/StringFunctions/Capitalize.htm), [Lower Función de script y de gráfico](https://help.qlik.com/es-ES/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/StringFunctions/Lower.htm) y [Upper Función de script y de gráfico](https://help.qlik.com/es-ES/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/StringFunctions/Upper.htm).

## Cargar datos geoespaciales para visualizar los datos en un mapa

Tenemos datos que queremos visualizar en un mapa, por ejemplo, datos de ventas por país, o por tienda. Para utilizar la visualización de mapa necesitamos cargar datos de punto o área.

Acción propuesta

Podemos cargar datos de punto o área que encajen con nuestras ubicaciones de valores de datos desde un archivo KML o archivo Excel. Además, necesitaremos cargar el fondo del mapa.

Para más información, vea [Cargar sus propios datos de mapa](https://help.qlik.com/es-ES/cloud-services/Subsystems/Hub/Content/Sense_Hub/Visualizations/Map/load-map-data.htm).