# Mejores prácticas de modelado de datos

Esta sección describe las distintas maneras en que puede cargar sus datos en una app de Qlik Sense, dependiendo de cómo se estructuran los datos y del modelo de datos deseado.



## Convertir columnas de datos en filas

Nuestros datos probablemente tendrán el siguiente aspecto, y queremos tener las cifras de ventas en un campo aparte:

Tabla de datos original

| Año | 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/sense/November2025/Subsystems/Hub/Content/Sense_Hub/LoadData/work-with-cross-tables.htm) y [Crosstable](https://help.qlik.com/es-ES/sense/November2025/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/sense/November2025/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/sense/November2025/Subsystems/Hub/Content/Sense_Hub/DataSource/generic-databases.htm) y [Generic](https://help.qlik.com/es-ES/sense/November2025/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/sense/November2025/Subsystems/Hub/Content/Sense_Hub/DataSource/hierarchies.htm) y [Hierarchy](https://help.qlik.com/es-ES/sense/November2025/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 una gran cantidad de registros y no quiero volver a cargar toda la base de datos para actualizar los datos en mi app. Solo quiero cargar registros nuevos o actualizados y eliminar los registros que se van borrando 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/sense/November2025/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

Puede 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/sense/November2025/Subsystems/Hub/Content/Sense_Hub/Scripting/combine-tables-join-keep.htm).

Acción propuesta : Correspondencia

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 la correspondencia como alternativa a la unión](https://help.qlik.com/es-ES/sense/November2025/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 (EventEvent)

| Hora | Evento | Comentario |
| --- | --- | --- |
| 00:00 | 0 | Inicio de shift 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 shift 2 |
| 11:43 | 5 | Fin de la producción |

Tabla cono los intervalos (StartStart y End End)

| Inicio | Fin | Orden |
| --- | --- | --- |
| 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/sense/November2025/Subsystems/Hub/Content/Sense_Hub/LoadData/matching-intervals-to-discrete-data.htm).

Si el intervalo no está definido explícitamente con inicio y fin, 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 de cambio

| Moneda | Datos de cambio | Rate |
| --- | --- | --- |
| 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/sense/November2025/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 País mientras que otra tabla contiene United States. Esta situación impedirá las asociaciones.

Tabla 1

| País: | Región |
| --- | --- |
| US | Maryland |
| US | Idaho |
| US | New York |
| US | 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/sense/November2025/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.

Tabla 1

| Tipo | Precio |
| --- | --- |
| single | 23 |
| double | 39 |

Tabla 2

| Tipo | Color |
| --- | --- |
| Single | Rojo |
| Single | Blue |
| Double | Blanco |
| Double | Black |

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 asociados 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/sense/November2025/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/sense/November2025/Subsystems/Hub/Content/Sense_Hub/Scripting/StringFunctions/Capitalize.htm), [Lower - Función de script y de gráfico](https://help.qlik.com/es-ES/sense/November2025/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/sense/November2025/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/sense/November2025/Subsystems/Hub/Content/Sense_Hub/Visualizations/Map/load-map-data.htm).