# Generic

Префикс загрузки Generic позволяет преобразовывать смоделированные данные типа «объект-атрибут-значение» (EAV) в традиционную нормализованную структуру реляционной таблицы. Моделирование EAV также называют «обобщенным моделированием данных» или «открытой схемой».

Пример смоделированных данных EAV и эквивалентной денормализованной реляционной таблицы

Пример смоделированных данных EAV и эквивалентной денормализованной реляционной таблицы

Пример смоделированных данных EAV и эквивалентной денормализованной реляционной таблицы ![Диаграмма, которая показывает преобразование таблицы с тремя столбцами и пятью строками в таблицу с четырьмя столбцами и двумя строками.](https://help.qlik.com/ru-RU/sense/November2024/Subsystems/Hub/Content/Resources/Images/scripting-functions-generic-EAV-denormalized.png)

Пример смоделированных данных EAV и эквивалентного набора нормализованных реляционных таблиц

Пример смоделированных данных EAV и эквивалентного набора нормализованных реляционных таблиц

Пример смоделированных данных EAV и эквивалентного набора нормализованных реляционных таблиц ![Диаграмма, которая показывает преобразование таблицы с тремя столбцами и пятью строками в три отдельные таблицы.](https://help.qlik.com/ru-RU/sense/November2024/Subsystems/Hub/Content/Resources/Images/scripting-functions-generic-EAV-normalized.png)

Хотя технически возможно загружать и анализировать смоделированные данные EAV в Qlik, часто проще работать с эквивалентной традиционной реляционной структурой данных.

Синтаксис:

Generic( loadstatement | selectstatement )

* Для получения дополнительной информации об использовании операторов LOAD см. [Load](https://help.qlik.com/ru-RU/sense/November2024/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Load.htm).
* Для получения дополнительной информации об использовании операторов SELECT см. [Select](https://help.qlik.com/ru-RU/sense/November2024/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Select.htm).

Эти темы помогут вам в работе с этой функцией:

Связанные темы

| Тема | Описание |
| --- | --- |
| [Crosstable](https://help.qlik.com/ru-RU/sense/November2024/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/crosstable.htm) | Префикс загрузки `Crosstable` преобразует данные, ориентированные по горизонтали, в данные, ориентированные по вертикали. С чисто функциональной точки зрения, он выполняет преобразование, противоположное префиксу загрузки `Generic`, хотя префиксы обычно используются в совершенно разных практических ситуациях. |
| [Универсальные базы данных](https://help.qlik.com/ru-RU/sense/November2024/Subsystems/Hub/Content/Sense_Hub/DataSource/generic-databases.htm) | Модели структурированных данных EAV более подробно описаны здесь. |

## Пример 1. Преобразование структурированных данных EAV с префиксом загрузки Generic

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

#### Скрипт загрузки и выражение диаграммы

Обзор

Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки на новую вкладку.

Скрипт загрузки содержит набор данных, который загружается в таблицу под именем `Transactions`. Набор данных включает поле даты. По умолчанию используется определение `MonthNames`.

Скрипт загрузки

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

Результаты

Загрузите данные и откройте лист. Создайте новую таблицу и добавьте это поле как измерение: `Color`.

Добавьте эту меру:

`=Count([Product ID])`

Теперь можно проверить количество товаров по цвету.

Результирующая таблица

| Цвет | =Count([Product ID]) |
| --- | --- |
| Коричневый | 4 |
| Белый | 2 |

Обратите внимание на форму модели данных, где каждый атрибут вынесен в отдельную таблицу, названную в соответствии с тегом исходной целевой таблицы `Product`. Каждая таблица имеет атрибут в виде суффикса. Одним из примеров этого является `Product.Color`. Результирующие выходные записи Product Attribute связаны с помощью `Product ID`.

Представление результатов в средстве просмотра модели данных

Представление результатов в средстве просмотра модели данных

Представление результатов в средстве просмотра модели данных ![Представление результатов этого примера так, как они отображаются в средстве просмотра модели данных.](https://help.qlik.com/ru-RU/sense/November2024/Subsystems/Hub/Content/Resources/Images/scripting-functions-generic-results-data-model-viewer.png)

Результирующая таблица записей: Products.Status

| ИД продукта | Состояние |
| --- | --- |
| 13 | Снято с производства |
| 2 | Снято с производства |

Результирующая таблица записей: Products.Size

| ИД продукта | Размер |
| --- | --- |
| 13 | 13-15 |
| 20 | 16-18 |
| 45 | 16-18 |

Результирующая таблица записей: Products.Color

| ИД продукта | Цвет |
| --- | --- |
| 13 | Коричневый |
| 5 | Коричневый |
| 44 | Коричневый |
| 45 | Коричневый |
| 20 | Белый |
| 2 | Белый |

## Пример 2. Преобразование структурированных данных EAV без префикса загрузки Generic

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

#### Скрипт загрузки и выражение диаграммы

Обзор

В этом примере показано, как анализировать структурированные данные EAV в их исходной форме.

Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки на новую вкладку.

Скрипт загрузки содержит набор данных, который загружается в таблицу под именем `Products` в структуре EAV.

В этом примере мы по-прежнему считаем товары по атрибуту цвета. Для анализа данных, структурированных таким образом, потребуется применить фильтрацию на уровне выражения для продуктов, у которых атрибут имеет значение `Color`.

Кроме того, отдельные атрибуты недоступны для выбора в качестве измерений или полей, в результате чего сложнее определить, как создать эффективные визуализации.

Скрипт загрузки

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

Результаты

Загрузите данные и откройте лист. Создайте новую таблицу и добавьте это поле как измерение: `Value`.

Создайте следующую меру:

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

Теперь можно проверить количество товаров по цвету.

Результирующая таблица записей: Products.Status

| Значение | =Count({&lt;Attribute={'Color'}&gt;} [Product ID]) |
| --- | --- |
| Коричневый | 4 |
| Белый | 2 |

## Пример 3. Денормализация результирующих выходных таблиц из загрузки с префиксом Generic (расширенный вариант)

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

#### Скрипт загрузки и выражение диаграммы

Обзор

В этом примере мы показываем, как нормализованная структура данных, создаваемая префиксом загрузки `Generic`, может быть денормализована обратно в консолидированную таблицу измерений `Product`. Это расширенный метод моделирования, который можно использовать в рамках настройки производительности модели данных.

Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки на новую вкладку.

Скрипт загрузки

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

Результаты

Откройте средство просмотра модели данных и обратите внимание на форму результирующей модели данных. Присутствует только одна денормализованная таблица. Это комбинация трех промежуточных выходных таблиц: `Products.Size`, `Products.Status` и `Products.Color`.

Результирующая внутренняя модель данных

| Продукты |
| --- |
| ИД продукта |
| Состояние |
| Цвет |
| Размер |

Результирующая таблица записей: Продукты

| ИД продукта | Состояние | Цвет | Размер |
| --- | --- | --- | --- |
| 13 | Снято с производства | Коричневый | 13-15 |
| 20 | - | Белый | 16-18 |
| 2 | Снято с производства | Белый | - |
| 5 | - | Коричневый | - |
| 44 | - | Коричневый | - |
| 45 | - | Коричневый | 16-18 |

Загрузите данные и откройте лист. Создайте новую таблицу и добавьте это поле как измерение: `Color`.

Добавьте эту меру:

`=Count([Product ID])`

Результирующая таблица

| Цвет | =Count([Product ID]) |
| --- | --- |
| Коричневый | 4 |
| Белый | 2 |

## Подробнее

* [Load](https://help.qlik.com/ru-RU/sense/November2024/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Load.htm)
* [Select](https://help.qlik.com/ru-RU/sense/November2024/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Select.htm)
* [Crosstable](https://help.qlik.com/ru-RU/sense/November2024/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/crosstable.htm)
* [Универсальные базы данных](https://help.qlik.com/ru-RU/sense/November2024/Subsystems/Hub/Content/Sense_Hub/DataSource/generic-databases.htm)