在流程中使用 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) 伺服器。

有關如何在 Tableau Server 上使用工作簿的分析擴充功能設定站台的資訊,請參閱使用分析擴充功能設定連線

必要條件

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

  1. 下載並安裝 Python(連結在新視窗開啟)。下載並安裝適用於 Linux、Mac 或 Windows 的最新版本 Python。

  2. 下載並安裝 Tableau Python 伺服器 (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']),
})

支援下列資料類型:

Tableau Prep Builder 中的資料類型Python 中的資料類型
字串標準 UTF-8 字串
DecimalDouble
Int整數
Bool布林值
日期ISO_DATE 格式為「YYYY-MM-DD」的字串,具有可選的時區位移。例如,「2011-12-03」是有效的日期。
DateTimeISO_DATE_TIME 格式為「YYYY-MM-DDT:HH:mm:ss」的字串,具有可選的時區位移。例如,「2011-12-03T10:15:30+01:00」是有效日期。

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

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

在 get_output_schema 中為欄位指定資料類型時,請使用以下語法:

Python 中的函數產生的資料類型
prep_string()字串
prep_decimal()Decimal
prep_int()整數
prep_bool()布林值
prep_date()日期
prep_datetime()DateTime

可使用中括弧存取 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) 伺服器

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

  1. 選取「說明」>「設定與效能」>「管理 Analytics 擴充連線」
  2. 「選取 Analytics 擴充」下拉清單中,選取「Tableau Python (TabPy) 伺服器」

  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(連結在新視窗開啟)。然後執行 pip uninstall tornado 以解除安裝目前版本,然後執行 pip install tornado==5.1.1 以安裝所需的版本。

  1. 開啟 Tableau Prep Builder,並按一下「新增連線」按鈕。

    在 Web 製作中,從首頁按一下「建立」 > 「流程」,或者從「瀏覽」頁面按一下「新建」 > 「流程」。然後按一下「連線到資料」

  2. 從連線器清單中,選取檔案類型或託管您的資料的伺服器。如果出現提示,請輸入所需的資訊以登錄並存取資料。

  3. 按一下加號 圖示,並從內容功能表中選取「新增指令碼」

  4. 在「指令碼」窗格中的「連線類型」部分,選取「Tableau Python (TabPy) 伺服器」

  5. 「檔案名稱」部分中,按一下「瀏覽」以選取您的指令碼檔案。
  6. 輸入「函數名稱」,然後按 Enter 鍵以執行您的指令碼。

感謝您的意見反應!已成功提交您的意見回饋。謝謝!