# 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-TW/cloud-services/Subsystems/Hub/Content/Resources/Images/Dataflow/qlik_script_processor_condensed_panel.png)

如需更多選項和進階功能，請開啟指令碼編輯器。請參閱 [使用指令碼編輯器](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataFlow/data-flow-processor-script.htm#Using)。

## 使用指令碼編輯器

按一下組態面板中的 開啟編輯器 按鈕會開啟強大的指令碼編輯器，以協助您撰寫 Qlik 指令碼。輕鬆插入表格、欄位名稱或函數、開啟文件、插入指令碼，並檢查指令碼的有效性。

![使用指令碼編輯器撰寫 qlik 指令碼](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Resources/Images/Dataflow/qlik_script_expression_editor.png)

在左側面板中，您可以檢視目前載入至資料流程中的表格和欄位，並瀏覽各種 Qlik 指令碼函數。此面板分為三個索引標籤：

* 表格，其中列出流程中載入的表格。將滑鼠游標停留在任何表格名稱上，然後按一下 + 以將其直接插入指令碼中。

* 欄位，其中列出流程中此時可用的欄位。將滑鼠游標停留在任何欄位名稱上，然後按一下 + 以將其直接插入運算式中。

* 函數，您可以在其中瀏覽 Qlik 函數。您可以使用搜尋欄位來尋找特定函數，或使用 函數類別 下拉式清單來篩選它們。

  將滑鼠游標停留在任何函數上，然後按一下 + 以將其直接插入運算式中。

  * 如果您選取 解說指南 切換開關，按一下函數時將會顯示簡短說明和文件連結。

在頂部面板中，您可以啟用或停用三個工具，以在撰寫指令碼時協助和引導您，使用捷徑從其他檔案插入指令碼，以及使用復原和重做按鈕來修正潛在的錯誤。

* 搜尋和取代，以自動尋找特定值並在需要時取代它們。

  ![指令碼編輯器的搜尋和取代功能](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Resources/Images/Dataflow/calculate_fields_search_replace.png)

* 說明模式，將您在指令碼中撰寫的任何函數轉換為可點擊的連結，這些連結會將您帶往文件。

  ![在指令碼編輯器中啟動說明模式](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Resources/Images/Dataflow/script_editor_help_mode.png)

* 自動完成，在您輸入時顯示建議，並附有函數的簡短說明和範例。

  ![使用自動完成撰寫指令碼函數](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Resources/Images/Dataflow/script_editor_autocomplete.png)

* 包含指令碼，以插入指令碼。請參閱 [將其他指令碼插入載入指令碼](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/LoadData/QVS/inserting-qvs-script-editor.htm)。

  ![從 qvf 檔案插入指令碼](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Resources/Images/Dataflow/qlik_script_include_script.png)

底部面板會說明指令碼的任何潛在錯誤，例如不正確的欄位名稱或無效的運算式。

![驗證工具顯示指令碼中的錯誤](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Resources/Images/Dataflow/script_editor_validation.png)

當狀態面板顯示綠色的 確定 時，表示您的指令碼有效。按一下 確認 以將此指令碼用於您的 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)。