# 了解脚本语法和数据结构

## 提取、转换和加载

通常，将数据加载到应用程序或脚本的方式可以按提取、转换和加载过程介绍：

* 提取

  第一步是从数据源系统提取数据。在脚本中，使用 SELECT 或 LOAD 语句定义此步骤。这些语句之间的差别是：

  * SELECT 用于从 ODBC 数据源或 OLE DB 提供程序选择数据。SELECT SQL 语句是由数据提供程序（而非 Qlik Sense）评估。
  * LOAD 用于从文件、脚本中定义的数据、之前加载的表格、网页、后续 SELECT 语句的结果中加载数据，或通过自动生成数据加载数据。

* 转变

  转换阶段涉及通过使用脚本函数和规则派生所需数据模型结构来操作数据。典型的操作包括：

  * 计算新值
  * 转换编码值
  * 重命名字段
  * 联接表格
  * 聚合值
  * 透视
  * 数据验证

* 加载或导出

  在最后一步中，可以运行脚本来加载定义到应用程序中的数据模型，或者从脚本中加载和导出数据。

您的目标应是创建数据模型，以便在 Qlik Sense 中有效地处理数据。通常，这意味着您的目标应是不使用任何循环引用合理地规范化星型模型和雪花模型，即将每个实体保存在单独的表格中的模型。换句话说，典型的数据模型如下所示：

* 中心事实表格包含维度和数字的关键项，用于计算度量（如单位数量、销售金额和预算金额）。
* 周围表格包含维度及其所有属性（如产品、客户、类别、日历和提供商）。

信息注释在许多情况下，通过在加载脚本中创建更丰富的数据模型或在图表表达式中执行聚合可以解决一个任务，如聚合。作为一般规则，如果在加载脚本中保存数据转换，将会体验到更好的性能。

提示注释一种比较好的做法是在文件中描绘数据模型。这可以通过提供数据结构帮助您提取所需的数据和执行转换。

## 数据加载语句

数据由 LOAD 或 SELECT 语句加载。每一语句都将生成一个内部表格。表格总是可以被视为数据列表，然后每一记录（行）可视为对象类型的新实例，而每一字段（列）可视为某种特定属性或对象的属性。

这些语句之间的差别是：

* SELECT 用于从 ODBC 数据源或 OLE DB 提供程序选择数据。SELECT SQL 语句是由数据提供程序（而非 Qlik Sense）评估。
* LOAD 用于从文件、脚本中定义的数据、之前加载的表格、网页、后续 SELECT 语句的结果中加载数据，或通过自动生成数据加载数据。

### 规则

在将数据加载到应用程序和脚本中时应用以下规则：

* 在 Qlik Sense 中，LOAD 或 SELECT 语句生成的表格之间无任何区别。因此，在加载多个表格时，这些表格是由 LOAD 或 SELECT 语句加载，抑或由这两者共同加载都无关紧要。
* 语句或数据库中原始表格的字段顺序是由 Qlik Sense 逻辑随机排列。
* 文件名将在后续流程中用以识别字段和进行关联。文件名需要区分大小写，这在脚本中重命名字段时经常是必需的。

## 执行脚本

对于典型的 LOAD 或 SELECT 语句，事件顺序大致如下所示：

1. 表达式评估
2. 用 as 重命名字段
3. 用 alias 重命名字段
4. 字段名限定
5. 如果字段名称匹配，则映射数据
6. 将数据存储到内部表格中

相关学习内容：

* [关联表格和转换数据](https://help.qlik.com/lnk/Assoc_tables_transform_data_QS)

## 了解详情

* [关联表格和转换数据](https://help.qlik.com/lnk/Assoc_tables_transform_data_QS)