# Qlik 脚本处理器

使用 Qlik 脚本创建或转换输入。

Qlik 脚本处理器允许您直接在文本编辑器中输入 Qlik 脚本以准备数据，或者在用作输入时加载数据。针对更高级的用户，如果您在操作表时更喜欢手动编写某些操作的代码，则可以从整个 Qlik 语法中受益。

## 用法

* 为了在数据流中使用脚本处理器，您在编辑器中添加的代码必须与传入数据的架构以及到目前为止已执行的准备操作保持一致。此外，脚本需要遵循某些规则：

  * 脚本必须包含 `resident` 语句，以使用来自输入流的表。

    ```
    resident tablename
    ```

    有关更多信息，请参阅 [Load](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/ChartLevelScripting/RegularStatements/Load.htm)。

  * 您需要包含 `NoConcatenate` 语句。

    ```
    NoConcatenate LOAD A,B
    ```

    有关更多信息，请参阅 [NoConcatenate](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/NoConcatenate.htm)。

  * 在为您要执行的特定操作添加脚本后，您必须在末尾包含 `drop table` 语句，以删除传入的表并仅保留生成的输出。

    ```
    drop table  tablename
    ```

    有关更多信息，请参阅 [Drop table](https://help.qlik.com/fr-FR/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/drop-table.htm)。

* 将处理器用作输入节点时，最多可以有两个输出流，以加载两个不同的表。

* 将处理器用作中间节点时，可以有多个输入流和最多两个输出流。

* 在一个数据流中最多可以使用 50 个 Qlik 脚本处理器。

警告注释为避免数据流中出现错误，请确保脚本处理器生成的表名是唯一的，并且与流中其他处理器生成的表名不同。

## 属性

配置

| 属性 | 配置 |
| --- | --- |
| 脚本 | 在文本编辑器中输入您的 Qlik 脚本，其中包含带有必需语句的以下占位符。<br><br>```<br>MyTable:<br>NoConcatenate Load *<br>Resident [name of input table];<br>Drop Table [name of input table];<br>```<br><br>您的输入表名称列在脚本编辑器上方。它们对应于连接到处理器的输入。单击表名可将其直接插入到脚本中。 |

要重命名处理器或编辑其描述，请将鼠标悬停在属性面板中要更改的名称或描述上，然后单击 the 编辑 icon 图标。

## 使用精简视图

在右侧面板中，您可以对处理器执行快速更新，而无需打开完整的编辑器。您可以：

* 直接在脚本中键入文本。

* 通过在输入表下单击输入表，将其添加到脚本中。

![突出显示脚本文本并选择一个输入表以将其添加到脚本中的指定位置](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Resources/Images/Dataflow/qlik_script_processor_condensed_panel.png)

有关更多选项和高级功能，请打开脚本编辑器。请参阅 [使用脚本编辑器](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataFlow/data-flow-processor-script.htm#Using)。

## 使用脚本编辑器

单击配置面板中的打开编辑器按钮将打开一个强大的脚本编辑器，以帮助您编写 Qlik 脚本。轻松插入表、字段名称或函数，打开文档，插入脚本，并检查脚本的有效性。

![使用脚本编辑器编写 qlik 脚本](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Resources/Images/Dataflow/qlik_script_expression_editor.png)

在左侧面板中，您可以查看当前加载到数据流中的表和字段，并浏览各种 Qlik 脚本函数。此面板分为三个选项卡：

* 表，其中列出了流中加载的表。将鼠标悬停在任何表名上，然后单击 + 可将其直接插入到脚本中。

* 字段，其中列出了流中此时可用的字段。将鼠标悬停在任何字段名称上，然后单击 + 可将其直接插入到表达式中。

* 函数，您可以在其中浏览 Qlik 函数。您可以使用搜索字段查找特定函数，或使用函数类别下拉列表对其进行过滤。

  将鼠标悬停在任何函数上，然后单击 + 可将其直接插入到表达式中。

  * 如果选择解释器指南切换按钮，则在单击函数时将显示简短描述和指向文档的链接。

在顶部面板中，您可以启用或禁用三个工具以在编写脚本时为您提供帮助和指导，使用快捷方式插入其他文件中的脚本，以及使用撤消和重做按钮来修复潜在的错误。

* 搜索和替换，以自动查找特定值并在需要时替换它们。

  ![脚本编辑器的搜索和替换功能](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Resources/Images/Dataflow/calculate_fields_search_replace.png)

* 帮助模式，将您在脚本中编写的任何函数转换为可单击的链接，这些链接将带您进入文档。

  ![在脚本编辑器中激活帮助模式](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Resources/Images/Dataflow/script_editor_help_mode.png)

* 自动完成，在您键入时显示建议，并带有函数的简短描述和示例。

  ![使用自动完成编写脚本函数](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Resources/Images/Dataflow/script_editor_autocomplete.png)

* 包含脚本，以插入脚本。请参阅 [在加载脚本中插入其他脚本](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/LoadData/QVS/inserting-qvs-script-editor.htm)。

  ![从 qvf 文件插入脚本](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Resources/Images/Dataflow/qlik_script_include_script.png)

底部面板描述了脚本的任何潜在错误，例如不正确的字段名称或无效的表达式。

![验证工具显示脚本中的错误](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Resources/Images/Dataflow/script_editor_validation.png)

当状态面板显示绿色的 Ok 时，您的脚本有效。单击确认以将此脚本用于您的 Qlik 脚本处理器，并返回到数据流编辑器。然后，您可以验证处理器配置。

## 示例

* 将具有相同架构的多个表加载到流的一个输入中。此示例使用目录中的两个 .txt 文件，它们具有相同的字段，但内容不同。此外，此表达式将添加一个字段以跟踪哪些数据来自哪个表，并生成一个整数作为 ID 号：

  ```
  [MyTable_1]:
  LOAD
  'table1' as source_table,
  [firstname],
  [lastname],
  [nationality]
  FROM [lib://DataFiles/MyTable_1.txt] (txt, codepage is 28591, embedded labels, delimiter is ',', msq);

  [MyTable_2]:
  CONCATENATE (MyTable_1)
  LOAD
  'table2' as source_table,
  [firstname],
  [lastname],
  [nationality]
  FROM [lib://DataFiles/MyTable_2.txt] (txt, codepage is 28591, embedded labels, delimiter is ',', msq);

  [NewTable]:
  LOAD
  recno() as id,
  * RESIDENT MyTable_1;

  drop table MyTable_1;
  ```

  有关更多信息，请参阅 [Concatenate](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/concatenate.htm)。

* 创建一个包含可编辑数据的内联表作为流的输入：

  ```
  MyTable:
  Load * Inline [
  Country, Year, Sales
  Argentina, 2014, 66295.03
  Argentina, 2015, 140037.89
  Austria, 2014, 54166.09
  Austria, 205,182739.87
  ];
  ```

  有关更多信息，请参阅 [使用内联加载来加载数据。](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/inline-loads-qs.htm)

* 从文件夹加载所有文件作为流的输入。此示例遍历文件夹中具有指定扩展名的所有文件，并将它们加载到单个表中。将数据连接名称和文件夹路径替换为您自己的值，并根据需要调整文件扩展名和格式设置：

  ```
  SET vFolderPath = 'lib://YourDataConnection/FolderName';

  FOR EACH vFile IN filelist('$(vFolderPath)/*.csv')
      LOAD * FROM [$(vFile)]
      (txt, utf8, embedded labels, delimiter is ',');
  NEXT
  ```

  有关更多信息，请参阅 [For each..next](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/ChartLevelScripting/ControlStatements/for-each.htm)。

  有关脚本表达式的更多示例，请参阅 [常规语句](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/ChartLevelScripting/modifier-regular-statements.htm) 和 [脚本和图表函数](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/functions-in-scripts-chart-expressions.htm)。