---
schema_version: "1"
id: c5ef37ff22f3ff8be298c6b63a44b15ffdbccb09fe8568a0f9bd392caf6a55d6
title: 在您的流程中使用 Python 脚本
collection: tableau
version: current
locale: zh-cn
portal_url: https://docs.salesforce.com/tableau/current/zh-cn/prep/prep_scripts_TabPy.md
canonical_url: https://help.tableau.com/current/prep/zh-cn/prep_scripts_TabPy.htm
source_site: help.tableau.com
content_type: documentation
content_hash: f971a286981606612c37aef51a1a475684be4f5bd4802e1af991522f76b5bcdc
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-cn/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>十进制</td><td>双精度</td></tr><tr><td>整数</td><td>整数</td></tr><tr><td>布尔值</td><td>布尔值</td></tr><tr><td>日期</td><td>ISO_DATE 格式“YYYY-MM-DD”的字符串，带有可选区域偏移。例如，“2011-12-03”是有效日期。</td></tr><tr><td>日期时间</td><td>ISO_DATE_TIME 格式“YYYY-MM-DDT:HH:mm:ss”的字符串，带有可选区域偏移。例如，“2011-12-03T10:15:30+01:00”是有效日期。</td></tr></tbody></table>

**注意：**日期和日期时间必须始终以有效字符串形式返回。

如果要返回不同于输入的字段，则需要在脚本中包含定义输出和数据类型的 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>十进制</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>日期时间</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. 选择“帮助”\>“设置和性能”\>“管理分析扩展程序连接”。
2. 在“选择分析扩展程序”下拉列表中，选择“Tableau Python (TabPy) 服务器”。
    
    ![分析扩展程序连接设置登录表单。](/tableau/current/zh-cn/prep/zh-cn/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-cn/prep/zh-cn/Img/prep_addconnection.png) 按钮。
    
    在 Web 制作中，从“主页”中单击“创建”\>“流程”，或从“浏览”页面中单击“新建”\>“流程”。然后单击“连接到数据”。
2. 从连接器列表中，选择文件类型或托管您的数据的服务器。如果出现提示，请输入所需的信息以登录并访问数据。
3. 单击加号 ![带有加号的按钮。](/tableau/current/zh-cn/prep/zh-cn/Img/prep_addicon.png) 图标，并从上下文菜单中选择“添加脚本”。
    
    ![向 Tableau Prep 添加脚本。](/tableau/current/zh-cn/prep/zh-cn/Img/prep_script_add.png)
4. 在“脚本”窗格中的“连接类型”部分，选择“Tableau Python (TabPy) 服务器”。
    
    ![prep\_scripts\_python2.png](/tableau/current/zh-cn/prep/zh-cn/Img/prep_scripts_python2.png)
5. 在“文件名”部分，单击“浏览”选择您的脚本文件。
6. 输入“函数名称”，然后按 Enter 运行脚本。
    
    ![用于设置连接类型设置的脚本。](/tableau/current/zh-cn/prep/zh-cn/Img/prep_scripts_python_pane.png)