# Generic

O prefixo de carregamento Generic permite a conversão de dados modelados de entidade/atributo/valor (EAV) em uma estrutura de tabela relacional normalizada tradicional. A modelagem de EAV é alternativamente chamada de "modelagem de dados genéricos" ou "esquema aberto".

Exemplo de dados modelados por EAV e uma tabela relacional desnormalizada equivalente

Exemplo de dados modelados por EAV e uma tabela relacional desnormalizada equivalente

Exemplo de dados modelados por EAV e uma tabela relacional desnormalizada equivalente ![Diagrama mostrando a transformação de uma tabela com três colunas e cinco linhas em uma tabela com quatro colunas e duas linhas.](https://help.qlik.com/pt-BR/cloud-services/Subsystems/Hub/Content/Resources/Images/scripting-functions-generic-EAV-denormalized.png)

Exemplo de dados modelados por EAV e um conjunto equivalente de tabelas relacionais normalizadas

Exemplo de dados modelados por EAV e um conjunto equivalente de tabelas relacionais normalizadas

Exemplo de dados modelados por EAV e um conjunto equivalente de tabelas relacionais normalizadas ![Diagrama mostrando a transformação de uma tabela com três colunas e cinco linhas em três tabelas separadas.](https://help.qlik.com/pt-BR/cloud-services/Subsystems/Hub/Content/Resources/Images/scripting-functions-generic-EAV-normalized.png)

Embora seja tecnicamente possível carregar e analisar dados modelados de EAV no Qlik, muitas vezes é mais fácil trabalhar com uma estrutura de dados relacional tradicional equivalente.

Sintaxe:

Generic( loadstatement | selectstatement )

* Para obter mais informações sobre o uso de instruções de LOAD, consulte [Load](https://help.qlik.com/pt-BR/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Load.htm).
* Para obter mais informações sobre o uso de instruções de SELECT, consulte [Select](https://help.qlik.com/pt-BR/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Select.htm).

Estes tópicos podem ajudar você a trabalhar com essa função:

Tópicos relacionados

| Tópico | Descrição |
| --- | --- |
| [Crosstable](https://help.qlik.com/pt-BR/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/crosstable.htm) | O prefixo de carregamento `Crosstable` transforma dados orientados horizontalmente em dados orientados verticalmente. De uma perspectiva puramente funcional, ele executa a transformação oposta ao prefixo de carregamento `Generic`, embora os prefixos normalmente atendam a casos de uso totalmente diferentes. |
| [Bancos de dados genéricos](https://help.qlik.com/pt-BR/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataSource/generic-databases.htm) | Modelos de dados estruturados de EAV são descritos com mais detalhes aqui. |

## Exemplo 1: Transformação de dados estruturados de EAV com o prefixo de carregamento genérico

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

#### Script de carregamento e expressão de gráfico

Visão geral

Abra o editor de carregamento de dados e adicione o script de carregamento abaixo em uma nova guia.

O script de carregamento contém um conjunto de dados que é carregado em uma tabela denominada `Transactions`. O conjunto de dados inclui um campo de data. A definição padrão de `MonthNames` é usada.

Script de carregamento

```
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

Carregue os dados e abra uma pasta. Crie uma nova tabela e adicione esse campo como uma dimensão: `Color`.

Adicione esta medida:

`=Count([Product ID])`

Agora, você pode inspecionar o número de produtos por cor.

Tabela de resultados

| Cor | =Count([Product ID]) |
| --- | --- |
| Marrom | 4 |
| Branco | 2 |

Observe a forma do modelo de dados, em que cada atributo foi dividido em uma tabela separada, nomeada de acordo com a tag original da tabela de destino `Product`. Cada tabela tem o atributo como um sufixo. Um exemplo disso é `Product.Color`. Os registros de saída do atributo de Produto resultantes são associados pelo `Product ID`.

Representação do visualizador do modelo de dados dos resultados

Representação do visualizador do modelo de dados dos resultados

Representação do visualizador do modelo de dados dos resultados ![Representação dos resultados deste exemplo conforme eles aparecem no visualizador do modelo de dados.](https://help.qlik.com/pt-BR/cloud-services/Subsystems/Hub/Content/Resources/Images/scripting-functions-generic-results-data-model-viewer.png)

Tabela de registros resultante: Products.Status

| ID do produto | Status |
| --- | --- |
| 13 | Descontinuado |
| 2 | Descontinuado |

Tabela de registros resultante: Products.Size

| ID do produto | Tamanho |
| --- | --- |
| 13 | 13-15 |
| 20 | 16-18 |
| 45 | 16-18 |

Tabela de registros resultante: Products.Color

| ID do produto | Cor |
| --- | --- |
| 13 | Marrom |
| 5 | Marrom |
| 44 | Marrom |
| 45 | Marrom |
| 20 | Branco |
| 2 | Branco |

## Exemplo 2: Análise de dados estruturados de EAV sem o prefixo de carregamento genérico

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

#### Script de carregamento e expressão de gráfico

Visão geral

Este exemplo mostra como analisar dados estruturados de EAV em seu formato original.

Abra o editor da carga de dados e adicione o script de carregamento abaixo em uma nova guia.

O script de carregamento contém um conjunto de dados que é carregado em uma tabela denominada `Products` em uma estrutura de EAV.

Neste exemplo, ainda estamos contando produtos por atributo de cor. Para analisar os dados estruturados dessa maneira, você precisará aplicar a filtragem em nível de expressão dos produtos que carregam o valor do Atributo `Color`.

Além disso, atributos individuais não estão disponíveis para seleção como dimensões ou campos, dificultando determinar como criar visualizações eficazes.

Script de carregamento

```
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

Carregue os dados e abra uma pasta. Crie uma nova tabela e adicione esse campo como uma dimensão: `Value`.

Crie a seguinte medida:

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

Agora, você pode inspecionar o número de produtos por cor.

Tabela de registros resultante: Products.Status

| Valor | =Count({&lt;Attribute={'Color'}&gt;} [Product ID]) |
| --- | --- |
| Marrom | 4 |
| Branco | 2 |

## Exemplo 3: Desnormalização das tabelas de saída resultantes de uma carga genérica (avançada)

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

#### Script de carregamento e expressão de gráfico

Visão geral

Neste exemplo, mostramos como a estrutura de dados normalizada produzida pelo prefixo de carregamento `Generic` pode ser desnormalizada de volta em uma tabela de dimensões `Product` consolidada. Essa é uma técnica de modelagem avançada que pode ser empregada como parte do ajuste de desempenho do modelo de dados.

Abra o editor da carga de dados e adicione o script de carregamento abaixo em uma nova guia.

Script de carregamento

```
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 o Visualizador do modelo de dados e observe a forma do modelo de dados resultante. Somente uma tabela desnormalizada está presente. É uma combinação das três tabelas de saída intermediárias: `Products.Size`, `Products.Status` e `Products.Color`.

Modelo de dados interno resultante

| Produtos |
| --- |
| ID do produto |
| Status |
| Cor |
| Tamanho |

Tabela de registros resultante: Products

| ID do produto | Status | Cor | Tamanho |
| --- | --- | --- | --- |
| 13 | Descontinuado | Marrom | 13-15 |
| 20 | - | Branco | 16-18 |
| 2 | Descontinuado | Branco | - |
| 5 | - | Marrom | - |
| 44 | - | Marrom | - |
| 45 | - | Marrom | 16-18 |

Carregue os dados e abra uma pasta. Crie uma nova tabela e adicione esse campo como uma dimensão: `Color`.

Adicione esta medida:

`=Count([Product ID])`

Tabela de resultados

| Cor | =Count([Product ID]) |
| --- | --- |
| Marrom | 4 |
| Branco | 2 |

## Saiba mais

* [Load](https://help.qlik.com/pt-BR/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Load.htm)
* [Select](https://help.qlik.com/pt-BR/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Select.htm)
* [Crosstable](https://help.qlik.com/pt-BR/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/crosstable.htm)
* [Bancos de dados genéricos](https://help.qlik.com/pt-BR/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataSource/generic-databases.htm)