---
schema_version: "1"
id: 46143340571b958af6388348900da75e8ba5a7effc0440568f097b7bcfa7abf2
title: 在流程中使用 Python 指令碼
collection: tableau
version: current
locale: zh-tw
portal_url: https://docs.salesforce.com/tableau/current/zh-tw/prep/prep_scripts_TabPy.md
canonical_url: https://help.tableau.com/current/prep/zh-tw/prep_scripts_TabPy.htm
source_site: help.tableau.com
content_type: documentation
content_hash: 2d023c3caecf8b4ff53072b92b46f0aa5a3af31998ec0865bba088784e8d816e
description: Use Python scripts via TabPy in a Tableau Prep flow.
---
[跳至主要內容](#main-content)

# 在流程中使用 Python 指令碼

**免責聲明：**本主題包括有關協力廠商產品的資訊。請注意，儘管我們會盡力保持協力廠商內容引用的正確性，但是，隨著 Python 變更，我們提供的資訊可能會隨時變更而不另行通知。有關最新資訊，請查閱 Python 文件與支援。

Python 是廣泛用於一般用途程式設計的高階程式設計語言。您可透過 Tableau Prep Builder 傳送 Python 命令到外部服務的方式，執行新增列數、排名欄位、填寫欄位及執行其他也可使用計算欄位執行的清理作業，藉此輕鬆擴展自己的資料準備選項。

若要在流程中包含 Python 指令碼，您需要設定 Tableau 和 TabPy 伺服器之間的連線。然後，您可以使用 Python 指令碼，以利用 pandas 資料框架將支援的函數套用至流程的資料。當您將指令碼步驟新增至流程，並指定您要使用的組態詳細資訊、檔案及函數時，資料會安全地傳遞到 TabPy 伺服器、在指令碼中套用運算式，並以表格形式傳回結果，您可以視需要清除或輸出該表格。

設定與 TabPy 伺服器的連線後，就可以在 Tableau Server 中執行包含指令碼步驟的流程。目前不支援在 Tableau Cloud 中使用指令碼步驟執行流程。若要設定 Tableau Server，請參閱[為 Tableau Server 設定 Tableau Python (TabPy) 伺服器。](#TabServer_TabPy)。

有關如何在 Tableau Server 上使用工作簿的分析擴充功能設定站台的資訊，請參閱[使用分析擴充功能設定連線](https://help.tableau.com/current/server/zh-tw/config_r_tabpy.htm)。

## 必要條件

若要在流程中包含 Python 指令碼，請完成以下設定。目前不支援在 Tableau Cloud 中使用指令碼步驟建立或執行流程。

1. 下載並安裝 [Python](https://www.python.org/downloads/)。下載並安裝適用於 Linux、Mac 或 Windows 的最新版本 Python。
2. 下載並安裝 Tableau Python 伺服器 ([TabPy](https://github.com/tableau/TabPy))。請依照安裝和組態說明來安裝 TabPy。Tableau Prep Builder 使用 TabPy 以透過 TabPy 傳遞流程資料作為輸入、套用指令碼，然後將結果傳回流程。
3. 安裝 Pandas。執行 `pip3 install pandas`。必須在指令碼中使用 pandas 資料框架才能與 Tableau Prep Builder 整合。

### 為 Tableau Server 設定 Tableau Python (TabPy) 伺服器。

如果計劃在 Tableau Server 中發佈、建立、編輯和執行包含指令碼步驟的流程，將需要設定 TabPy 伺服器和 Tableau Server 之間的連線。

- **版本 2019.3 及更高版本**：可以在 Tableau Server 中執行包含指令碼步驟的已發佈流程。
- **版本 2020.4.1 及更高版本**：可以在 Tableau Server 中建立、編輯和執行包含指令碼步驟的流程。
- **Tableau Cloud**：目前不支援使用指令碼步驟建立或執行流程。

1. 開啟 TSM 命令列/shell。
2. 輸入以下命令以設定主機位址、連接埠值，以及連線逾時：
    
    `tsm security maestro-tabpy-ssl enable --connection-type {maestro-tabpy-secure/maestro-tabpy} --tabpy-host <TabPy IP address or host name> --tabpy-port <TabPy port> --tabpy-username <TabPy username> --tabpy-password <TabPy password> --tabpy-connect-timeout-ms <TabPy connect timeout>`
    
    - 選取 `{maestro-tabpy-secure}` 以啟用安全連線，或 `{maestro-tabpy}` 以啟用不安全的連線。
    - 如果您選取 `{maestro-tabpy-secure}`，請透過命令列指定憑證檔案 `-cf<certificate file path>`。
    - 指定 `--tabpy-connect-timeout-ms <TabPy connect timeout>`（以毫秒為單位）。例如，`--tabpy-connect-timeout-ms 900000`。
3. 若要停用 TabPy 連線，請輸入以下命令
    
    `tsm security maestro-tabpy-ssl disable`

## 建立 python 指令碼

當您建立指令碼時，請包含指定 pandas (pd.DataFrame) 作為函數引數的函數。這將從 Tableau Prep Builder 呼叫您的資料。您也需要使用支援的資料類型在 pandas (pd.DataFrame) 中傳回結果。

例如，若要將編碼新增至流程中的一組欄位，您可以編寫以下指令碼：

def encode(input):     
  le = preprocessing.LabelEncoder()
  Return pd.DataFrame({
    'Opportunity Number' : input\['Opportunity Number'\],
    'Supplies Subgroup Encoded' : le.fit\_transform(input\['Supplies Subgroup'\]),
    'Region Encoded' : le.fit\_transform(input\['Region'\]),
    'Route To Market Encoded' : le.fit\_transform(input\['Route To Market'\]),
    'Opportunity Result Encoded' : le.fit\_transform(input\['Opportunity Result'\]),
    'Competitor Type Encoded' : le.fit\_transform(input\['Competitor Type'\]),
    'Supplies Group Encoded' : le.fit\_transform(input\['Supplies Group'\]),
})

支援下列資料類型：

<table style="width: 100%;" class="simple-table"><colgroup><col><col></colgroup><tbody><tr><th>Tableau Prep Builder 中的資料類型</th><th>Python 中的資料類型</th></tr><tr><td>字串</td><td>標準 UTF-8 字串</td></tr><tr><td>Decimal</td><td>Double</td></tr><tr><td>Int</td><td>整數</td></tr><tr><td>Bool</td><td>布林值</td></tr><tr><td>日期</td><td>ISO_DATE 格式為「YYYY-MM-DD」的字串，具有可選的時區位移。例如，「2011-12-03」是有效的日期。</td></tr><tr><td>DateTime</td><td>ISO_DATE_TIME 格式為「YYYY-MM-DDT:HH:mm:ss」的字串，具有可選的時區位移。例如，「2011-12-03T10:15:30+01:00」是有效日期。</td></tr></tbody></table>

**附註**：Date 和 DateTime 必須一律以有效字串傳回。

如果要傳回的欄位與輸入的欄位不同，您需要在定義輸出和資料類型的指令碼中，包含 get\_output\_schema 函數。否則，輸出將會使用來自輸入資料的欄位，這些欄位取自於流程中指令碼步驟之前的步驟。

在 get\_output\_schema 中為欄位指定資料類型時，請使用以下語法：

<table style="width: 100%;" class="simple-table"><colgroup><col><col></colgroup><tbody><tr><th>Python 中的函數</th><th>產生的資料類型</th></tr><tr><td>prep_string()</td><td>字串</td></tr><tr><td>prep_decimal()</td><td>Decimal</td></tr><tr><td>prep_int()</td><td>整數</td></tr><tr><td>prep_bool()</td><td>布林值</td></tr><tr><td>prep_date()</td><td>日期</td></tr><tr><td>prep_datetime()</td><td>DateTime</td></tr></tbody></table>

可使用中括弧存取 DataFrame 中的列。單括弧輸出 Pandas Series，而雙括弧將輸出 Pandas DataFrame。

def create\_key(df):
return pd.DataFrame({
"Key": \['12345'\]
})

以下範例顯示新增至欄位編碼 python 指令碼的 get\_output\_schema 函數：

def get\_output\_schema():       
  return pd.DataFrame({
    'Opportunity Number' : prep\_int(),
    'Supplies Subgroup Encoded' : prep\_int(),
    'Region Encoded' : prep\_int(),
    'Route To Market Encoded' : prep\_int(),
    'Opportunity Result Encoded' : prep\_int(),
    'Competitor Type Encoded' : prep\_int(),
    'Supplies Group Encoded' : prep\_int()
})

## 連線到您的 Tableau Python (TabPy) 伺服器

> [!IMPORTANT]
> 
> **重要資訊**：從 Tableau Prep Builder 版本 2020.3.3 開始，可從頂部的「說明」功能表一次設定伺服器連線，而無需透過按一下「連線到 Tableau Python (TabPy) 伺服器」並輸入連線詳細資訊在「指令碼」步驟中逐一設定每個流程的連線。需要使用此新功能表，針對在 2020.3.3 版本中開啟但於 Tableau Prep Builder 舊版中建立的任何流程設定連線。

1. 選取「說明」\>「設定與效能」\>「管理 Analytics 擴充連線」。
2. 在「選取 Analytics 擴充」下拉清單中，選取「Tableau Python (TabPy) 伺服器」。
    
    ![分析擴充功能連線設定登入表單。](/tableau/current/zh-tw/prep/zh-tw/Img/prep_scripts_tabpy_signin.png)
3. 輸入您的認證：
    - 連接埠 9004 是 TabPy 的預設連接埠。
    - 如果伺服器需要認證，請輸入使用者名稱和密碼。
    - 如果伺服器使用 SSL 加密，請選取「需要 SSL」核取方塊，然後按一下「未指定自訂組態檔」...連結，以為連線選取憑證。這是您的 SSL 伺服器憑證檔案。
        
        **附註：**Tableau Prep Builder 未提供測試連線的方法。如果連線發生問題，則會顯示錯誤訊息。

## 將指令碼新增至流程

啟動您的 TabPy 伺服器，然後完成下列步驟：

**附註：**TabPy 需要執行 tornado 封裝版本 5.1.1。如果在嘗試啟動 TabPy 時收到錯誤訊息 'tornado.web' has no attribute 'asynchronous'（'tornado.web' 沒有屬性 'asynchronous'），請從命令列執行 `pip list` 以檢查安裝的 tornado 版本。如果您已安裝不同版本，請下載 [tornado 封裝版本 5.1.1](https://pypi.org/project/tornado/5.1.1/#files)。然後執行 `pip uninstall tornado` 以解除安裝目前版本，然後執行 `pip install tornado==5.1.1` 以安裝所需的版本。

1. 開啟 Tableau Prep Builder，並按一下「新增連線」![新增資料連線的按鈕。](/tableau/current/zh-tw/prep/zh-tw/Img/prep_addconnection.png)按鈕。
    
    在 Web 製作中，從首頁按一下「建立」 > 「流程」，或者從「瀏覽」頁面按一下「新建」 > 「流程」。然後按一下「連線到資料」。
2. 從連線器清單中，選取檔案類型或託管您的資料的伺服器。如果出現提示，請輸入所需的資訊以登錄並存取資料。
3. 按一下加號 ![帶有加號的按鈕。](/tableau/current/zh-tw/prep/zh-tw/Img/prep_addicon.png) 圖示，並從內容功能表中選取「新增指令碼」。
    
    ![將指令碼新增至 Tableau Prep。](/tableau/current/zh-tw/prep/zh-tw/Img/prep_script_add.png)
4. 在「指令碼」窗格中的「連線類型」部分，選取「Tableau Python (TabPy) 伺服器」。
    
    ![prep\_scripts\_python2.png](/tableau/current/zh-tw/prep/zh-tw/Img/prep_scripts_python2.png)
5. 在「檔案名稱」部分中，按一下「瀏覽」以選取您的指令碼檔案。
6. 輸入「函數名稱」，然後按 Enter 鍵以執行您的指令碼。
    
    ![設定連線類型設定的指令碼。](/tableau/current/zh-tw/prep/zh-tw/Img/prep_scripts_python_pane.png)