# Generic

El prefijo de carga Generic permite la conversión de datos modelados de entidad-atributo-valor (EAV) en una estructura de tabla relacional normalizada tradicional. El modelado EAV se denomina alternativamente "modelado de datos genéricos" o "esquema abierto".

Ejemplo de datos modelados EAV y una tabla relacional desnormalizada equivalente

Ejemplo de datos modelados EAV y una tabla relacional desnormalizada equivalente

Ejemplo de datos modelados EAV y una tabla relacional desnormalizada equivalente ![Diagrama que muestra la transformación de una tabla con tres columnas y cinco filas en una tabla con cuatro columnas y dos filas.](https://help.qlik.com/es-ES/cloud-services/Subsystems/Hub/Content/Resources/Images/scripting-functions-generic-EAV-denormalized.png)

Ejemplo de datos modelados EAV y un conjunto equivalente de tablas relacionales normalizadas

Ejemplo de datos modelados EAV y un conjunto equivalente de tablas relacionales normalizadas

Ejemplo de datos modelados EAV y un conjunto equivalente de tablas relacionales normalizadas ![Diagrama que muestra la transformación de una tabla con tres columnas y cinco filas en tres tablas aparte.](https://help.qlik.com/es-ES/cloud-services/Subsystems/Hub/Content/Resources/Images/scripting-functions-generic-EAV-normalized.png)

Si bien es técnicamente posible cargar y analizar datos modelados de EAV en Qlik, a menudo es más fácil trabajar con una estructura de datos relacional tradicional equivalente.

Sintaxis:

Generic( loadstatement | selectstatement )

* Para más información sobre el uso de sentencias LOAD, vea [Load](https://help.qlik.com/es-ES/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Load.htm).
* Para más información sobre el uso de sentencias SELECT, vea [Select](https://help.qlik.com/es-ES/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Select.htm).

Estos temas le ayudarán a trabajar con esta función:

Temas relacionados

| Tema | Descripción |
| --- | --- |
| [Crosstable](https://help.qlik.com/es-ES/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/crosstable.htm) | El prefijo de carga `Crosstable` transforma los datos que están orientados horizontalmente en datos orientados verticalmente. Desde una perspectiva puramente funcional, realiza la transformación opuesta al prefijo de carga `Generic`, aunque los prefijos suelen servir para casos de uso completamente diferentes. |
| [Bases de datos genéricas](https://help.qlik.com/es-ES/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataSource/generic-databases.htm) | Los modelos de datos estructurados de EAV se describen con más detalle aquí. |

## Ejemplo 1: transformar datos estructurados de EAV con el prefijo de carga genérico

[](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Generic.htm)

#### Script de carga y expresión de gráfico

Vista general

Abra el editor de carga de datos y agregue el script de carga a continuación en una nueva pestaña.

El script de carga contiene un conjunto de datos que se carga en una tabla denominada Transactions.`` El conjunto de datos incluye un campo de fecha. Se utiliza la definición de `MonthNames` predeterminada.

Script de carga

```
Products:
Generic
Load * inline [
Product ID, Attribute, Value
13, Status, Discontinued
13, Color, Brown
20, Color, White
13, Size, 13-15
20, Size, 16-18
2, Status, Discontinued
5, Color, Brown
2, Color, White
44, Color, Brown
45, Size, 16-18
45, Color, Brown
];
```

Resultados

Cargue los datos y abra una hoja. Cree una nueva tabla y agregue este campo como dimensión: `Color`.

Añada esta medida:

`=Count([Product ID])`

Ahora puede inspeccionar la cantidad de productos por color.

Tabla de resultados

| Color | =Count([Product ID]) |
| --- | --- |
| Marrón | 4 |
| Blanco | 2 |

Observe la forma del modelo de datos, donde cada atributo se ha desglosado en una tabla aparte, nombrada de acuerdo con la etiqueta de la tabla de destino original `Product`. Cada tabla tiene el atributo como sufijo. Un ejemplo de esto es `Product.Color`. Los registros de salida de atributos de producto resultantes están asociados por `Product ID`.

Representación de los resultados del Visor del modelo de datos

Representación de los resultados del Visor del modelo de datos

Representación de los resultados del Visor del modelo de datos ![Representación de los resultados de este ejemplo tal como aparecen en el visor del modelo de datos.](https://help.qlik.com/es-ES/cloud-services/Subsystems/Hub/Content/Resources/Images/scripting-functions-generic-results-data-model-viewer.png)

Tabla de registros resultante: Productos.Estado

| ID de producto | Estado |
| --- | --- |
| 13 | Descontinuado |
| 2 | Descontinuado |

Tabla de registros resultante: Productos.Tamaño

| ID de producto | Tamaño |
| --- | --- |
| 13 | 13-15 |
| 20 | 16-18 |
| 45 | 16-18 |

Tabla de registros resultante: Productos.Color

| ID de producto | Color |
| --- | --- |
| 13 | Marrón |
| 5 | Marrón |
| 44 | Marrón |
| 45 | Marrón |
| 20 | Blanco |
| 2 | Blanco |

## Ejemplo 2: analizar datos estructurados de EAV sin el prefijo de carga genérico

[](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Generic.htm)

#### Script de carga y expresión de gráfico

Vista general

Este ejemplo muestra cómo analizar datos estructurados de EAV en su forma original.

Abra el editor de carga de datos y agregue el script de carga a continuación a una nueva pestaña.

El script de carga contiene un conjunto de datos que se carga en una tabla denominada `Products` en una estructura EAV.

En este ejemplo, seguimos contando productos por atributo de color. Para analizar los datos estructurados de esta manera, deberá aplicar un filtrado a nivel de expresión de productos que lleven el valor de Atributo `Color`.

Además, los atributos individuales no están disponibles para seleccionar como dimensiones o campos, lo que dificulta determinar cómo crear visualizaciones efectivas.

Script de carga

```
Products:
Load * Inline
[
Product ID, Attribute, Value
13, Status, Discontinued
13, Color, Brown
20, Color, White
13, Size, 13-15
20, Size, 16-18
2, Status, Discontinued
5, Color, Brown
2, Color, White
44, Color, Brown
45, Size, 16-18
45, Color, Brown
];
```

Resultados

Cargue los datos y abra una hoja. Cree una nueva tabla y agregue este campo como dimensión: `Value`.

Cree la siguiente medida:

`=Count({<Attribute={'Color'}>} [Product ID])`

Ahora puede inspeccionar la cantidad de productos por color.

Tabla de registros resultante: Productos.Estado

| Valor | =Count({&lt;Attribute={'Color'}&gt;} [Product ID]) |
| --- | --- |
| Marrón | 4 |
| Blanco | 2 |

## Ejemplo 3: desnormalizar las tablas de salida resultantes de una carga genérica (avanzada)

[](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Generic.htm)

#### Script de carga y expresión de gráfico

Vista general

En este ejemplo, mostramos cómo la estructura de datos normalizada producida por el prefijo de carga `Generic` se puede desnormalizar nuevamente en una tabla de dimensiones `Product` consolidada. Esta es una técnica de modelado avanzada que se puede emplear como parte del ajuste del rendimiento del modelo de datos.

Abra el editor de carga de datos y agregue el script de carga a continuación a una nueva pestaña.

Script de carga

```
Products:

Generic
Load * inline [
Product ID, Attribute, Value
13, Status, Discontinued
13, Color, Brown
20, Color, White
13, Size, 13-15
20, Size, 16-18
2, Status, Discontinued
5, Color, Brown
2, Color, White
44, Color, Brown
45, Size, 16-18
45, Color, Brown
];

RENAME TABLE Products.Color TO Products;

OUTER JOIN (Products)
LOAD * RESIDENT Products.Size;
						
OUTER JOIN (Products)
LOAD * RESIDENT Products.Status;
DROP TABLES Products.Size,Products.Status;
```

Resultados

Abra el visor del modelo de datos y observe la forma del modelo de datos resultante. Solo hay una tabla desnormalizada presente. Es una combinación de las tres tablas de salida intermedias: `Products.Size`, `Products.Status` y `Products.Color`.

Modelo de datos internos resultante

| Productos |
| --- |
| ID de producto |
| Estado |
| Color |
| Tamaño |

Tabla de registros resultante: Productos

| ID de producto | Estado | Color | Tamaño |
| --- | --- | --- | --- |
| 13 | Descontinuado | Marrón | 13-15 |
| 20 | - | Blanco | 16-18 |
| 2 | Descontinuado | Blanco | - |
| 5 | - | Marrón | - |
| 44 | - | Marrón | - |
| 45 | - | Marrón | 16-18 |

Cargue los datos y abra una hoja. Cree una nueva tabla y agregue este campo como dimensión: `Color`.

Añada esta medida:

`=Count([Product ID])`

Tabla de resultados

| Color | =Count([Product ID]) |
| --- | --- |
| Marrón | 4 |
| Blanco | 2 |

## Más información

* [Load](https://help.qlik.com/es-ES/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Load.htm)
* [Select](https://help.qlik.com/es-ES/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Select.htm)
* [Crosstable](https://help.qlik.com/es-ES/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/crosstable.htm)
* [Bases de datos genéricas](https://help.qlik.com/es-ES/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataSource/generic-databases.htm)