在您的流程中使用 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 字符串
十进制双精度
整数整数
布尔值布尔值
日期ISO_DATE 格式“YYYY-MM-DD”的字符串,带有可选区域偏移。例如,“2011-12-03”是有效日期。
日期时间ISO_DATE_TIME 格式“YYYY-MM-DDT:HH:mm:ss”的字符串,带有可选区域偏移。例如,“2011-12-03T10:15:30+01:00”是有效日期。

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

如果要返回不同于输入的字段,则需要在脚本中包含定义输出和数据类型的 get_output_schema 函数。否则,输出将使用输入数据中的字段,这些字段是从流程中脚本步骤之前的步骤中获取的。

在 get_output_schema 中指定字段的数据类型时,请使用以下语法:

Python 中的函数生成的数据类型
prep_string()字符串
prep_decimal()十进制
prep_int()整数
prep_bool()布尔值
prep_date()日期
prep_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. 选择“帮助”>“设置和性能”>“管理分析扩展程序连接”
  2. “选择分析扩展程序”下拉列表中,选择“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 运行脚本。

感谢您的反馈!您的反馈已成功提交。谢谢!