# Generic

Generic 加载前缀允许将实体-属性-值建模数据 (EAV) 转换为传统的规范化关系表结构。EAV 建模也称为“通用数据建模”或“开放模式”。

EAV 建模数据和等效非规范化关系表示例

EAV 建模数据和等效非规范化关系表示例

EAV 建模数据和等效非规范化关系表示例 ![显示将具有三列和五行的表转换为具有四列和两行的表的图。](https://help.qlik.com/zh-CN/sense/May2025/Subsystems/Hub/Content/Resources/Images/scripting-functions-generic-EAV-denormalized.png)

EAV 建模数据和一组等效的规范化关系表示例

EAV 建模数据和一组等效的规范化关系表示例

EAV 建模数据和一组等效的规范化关系表示例 ![显示将具有三列和五行的表转换为三个单独表的图表。](https://help.qlik.com/zh-CN/sense/May2025/Subsystems/Hub/Content/Resources/Images/scripting-functions-generic-EAV-normalized.png)

虽然在技术上可以加载和分析 Qlik 中 EAV建模的数据，但使用等效的传统关系数据结构通常更容易。

语法：

Generic( loadstatement | selectstatement )

* 有关使用 Load 语句的更多信息，请参阅[Load](https://help.qlik.com/zh-CN/sense/May2025/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Load.htm)。
* 有关使用 SELECT 语句的更多信息，请参阅[Select](https://help.qlik.com/zh-CN/sense/May2025/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Select.htm)。

这些主题可以帮助您使用此函数：

相关主题

| 主题 | 说明 |
| --- | --- |
| [Crosstable](https://help.qlik.com/zh-CN/sense/May2025/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/crosstable.htm) | `Crosstable` 加载前缀将水平方向的数据转换为垂直方向的数据。从纯特性的角度来看，它执行与 `Generic` 加载前缀相反的转换，尽管前缀通常服务于完全不同的用例。 |
| [通用数据库](https://help.qlik.com/zh-CN/sense/May2025/Subsystems/Hub/Content/Sense_Hub/DataSource/generic-databases.htm) | 这里进一步描述了 EAV 结构化数据模型。 |

## 示例 1 – 使用通用加载前缀转换 EAV 结构化数据

[](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 ID` 关联。

结果的数据模型查看器表示

结果的数据模型查看器表示

结果的数据模型查看器表示 ![在数据模型查看器中显示此示例的结果。](https://help.qlik.com/zh-CN/sense/May2025/Subsystems/Hub/Content/Resources/Images/scripting-functions-generic-results-data-model-viewer.png)

所得记录表：Products.Status

| 产品 ID | 状态 |
| --- | --- |
| 13 | 中断 |
| 2 | 中断 |

所得记录表：Products.Size

| 产品 ID | 大小 |
| --- | --- |
| 13 | 13-15 |
| 20 | 16-18 |
| 45 | 16-18 |

所得记录表：Products.Color

| 产品 ID | 颜色 |
| --- | --- |
| 13 | 棕色 |
| 5 | 棕色 |
| 44 | 棕色 |
| 45 | 棕色 |
| 20 | 白色 |
| 2 | 白色 |

## 示例 2 – 分析没有通用加载前缀的EAV结构化数据

[](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 – 从通用加载中去规范化结果输出表（高级）

[](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`。

得到内部数据模型

| 产品 |
| --- |
| 产品 ID |
| 状态 |
| 颜色 |
| 大小 |

所得记录表：产品

| 产品 ID | 状态 | 颜色 | 大小 |
| --- | --- | --- | --- |
| 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/zh-CN/sense/May2025/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Load.htm)
* [Select](https://help.qlik.com/zh-CN/sense/May2025/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Select.htm)
* [Crosstable](https://help.qlik.com/zh-CN/sense/May2025/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/crosstable.htm)
* [通用数据库](https://help.qlik.com/zh-CN/sense/May2025/Subsystems/Hub/Content/Sense_Hub/DataSource/generic-databases.htm)