在近期项目中,我们需要借助 Python 脚本在 Tableau Prep 中完成辅助计算。但查阅大量相关文章及官方文档后,发现缺乏系统且详细的调用步骤说明,AI 给出的回答也未能满足需求。经过多轮实操钻研与 AI 辅助排查,我们终于理清了桌面端与服务器端的完整实现路径,同时总结了过程中需要规避的“坑”,现整理成详细指南分享给大家。
一、环境准备:基础依赖安装与配置
1. Python 环境搭建
首先需完成 Python 环境部署,可选择独立 Python 安装包或 Anaconda 集成环境,相关教程网络上较为丰富,可自行参考完成。
2. TabPy 安装与启动(核心依赖)
TabPy 是 Tableau Prep 调用 Python 脚本的必需组件,用于建立两者的通信连接,安装与启动步骤如下:
● 打开命令行工具,输入 pip install tabpy 完成安装;
● 安装成功后,输入 tabpy 命令启动程序。默认情况下,TabPy 会监听本地 9004 端口;
● 注意:启动 TabPy 的命令行窗口需保持开启,后续运行中的报错信息会在此输出,便于排查问题。

3. 配置文件调整(解决大文件/超时问题)
默认配置下,TabPy 的请求大小限制(100MB)和超时时间可能无法满足 Tableau Prep 的数据处理需求(如大文件、复杂计算),需根据操作系统修改配置:
(1)Windows 系统
直接修改默认配置文件:
1. 可能的路径:C:\Program Files\Python313\Lib\site-packages\tabpy\tabpy_server\common\default.conf
2. 关键配置项修改(按需调整数值):
# 最大请求大小(单位:MB),建议改为 800MB
TABPY_MAX_REQUEST_SIZE_MB = 800
# 脚本执行超时时间(单位:秒),建议改为 300 秒
TABPY_EVALUATE_TIMEOUT = 300
(2)Mac 系统(如无默认配置文件,可手动创建)
1. 打开终端,创建配置文件目录:mkdir -p ~/.tabpy
2. 新建并编辑配置文件:nano ~/.tabpy/tabpy.conf
3. 输入以下配置(必须包含 [TabPy] 头部,否则无法解析):
[TabPy]
server_timeout = 300 # 超时时间(秒)
max_request_size = 209715200 # 最大请求大小(200MB,单位:字节)
port = 9004 # 端口(与默认保持一致)
host = 127.0.0.1 # 本地主机
auth_required = False # 暂不启用认证(生产环境可按需开启)
4. 保存退出:按 ctrl+o 确认保存。

5. 终端再次启动 TabPy 时指定配置文件:tabpy –config ~/.tabpy/tabpy.conf
二、Tableau Prep 桌面端:Python 脚本调用实操
1. 脚本文件准备
编写 Python 脚本(保存为 XXX.py),核心需包含两个函数:
● 计算函数(如 calculation):接收上一节点传递的表格默认参数用 df 既可,执行自定义计算并返回结果,必须是DataFrame;
● 输出函数(get_output_schema):定义输出字段的名称和数据类型,确保 Tableau Prep 能识别。
示例脚本:
import pandas as pd
def calculation(df):
……
# 此处省略具体计算逻辑,最终返回结果 DataFrame
result_df = pd.DataFrame(leakage_rates)
return result_df
def get_output_schema():
"""定义输出数据结构,需与 calculation 函数的输出字段完全匹配"""
schema_dict = {
'AC_TAIL': prep_string(), # AC_TAIL字段为字符串类型
'NAME': prep_string(), # NAME 字段为字符串类型
'REFUEL_INTERVAL': prep_int(), # REFUEL_INTERVAL为整数类型
'START_DATE': prep_date(), # START_DATE字段为日期类型
'END_DATE': prep_date(), # 日期类型
'DAYS_IN_INTERVAL': prep_int(), # 整数类型
'START_VALUE': prep_decimal(), # 小数类型
'END_VALUE': prep_decimal(), # 小数类型
'AVG_DAILY_LEAKAGE_RATE': prep_decimal(), # 小数类型
'SLOPE': prep_decimal(), # 小数类型
'SLOPE_RATE': prep_decimal(), # 小数类型
'R_SQUARED': prep_decimal() # 小数类型
}
return pd.DataFrame(schema_dict)
2. Prep 中配置脚本节点
1. 打开 Tableau Prep,在数据流程中添加「脚本」节点;
2. 配置脚本节点参数: 连接类型:选择「Tableau Python (TabPy) 服务器」;
a. 服务器:默认 localhost:9004(与 TabPy 启动端口一致,连接成功会显示提示);
b. 文件名:通过「浏览」选择已编写的 XXX.py 脚本;
c. 函数名称:输入脚本中定义的计算函数名(如calculation)。

3. 脚本调试与问题排查
calculation 函数是实现自定义计算的核心,参数df代表上一节点传递至脚本节点的表格数据。需注意的是,日常环境中可正常运行的 Python 脚本,直接移植到 TabPy 调用场景时可能频繁报错,这多源于格式兼容性问题(尤其是日期格式),需根据 TabPy 的解析规则调整代码。建议通过查看 TabPy 终端窗口的报错信息,结合 AI 工具分析问题原因,反复优化脚本直至运行正常。
calculation 函数最终输出的 DataFrame,还需通过get_output_schema函数明确指定各字段的数据类型与格式,确保符合 Tableau Prep 的数据解析规范 —— 这是后续节点能够正确读取脚本输出结果的关键前提。
三、Tableau 服务器端:TabPy 配置与使用
若需在 Tableau Server 中使用 Prep 脚本,需额外配置服务器端 TabPy 连接:
1. 服务器端 TabPy 配置(通过 TSM 命令)
1. 打开服务器终端,输入以下命令配置 TabPy 连接,指定连接模式、服务器地址、端口号等。这里的–tabpy-connect-timeout-ms 300000表示超时时间(300 秒),最好与配置文件一致)。
tsm security maestro-tabpy-ssl enable --connection-type maestro-tabpy --tabpy-host localhost --tabpy-port 9004 --tabpy-connect-timeout-ms 300000
2. 应用配置并重启服务器:
tsm pending-changes apply # 应用待生效配置
tabpy # 启动 TabPy 服务(需保持运行)
2. 服务器端扩展程序配置
1. 登录 Tableau Server 管理界面,进入「设置」→「扩展程序」→「分析扩展程序」;
2. 点击「创建新连接」,配置如下: 名称:自定义(如 tabpy);
a. 类型:TabPy/Analytics Extension;
b. 主机名:localhost;
c. 端口:9004;
d. 其他:无需用户名密码(暂不启用认证),取消「需要 SSL」;
3. 保存配置后,启用「为站点启用分析扩展程序」。

3. 服务器端 Prep 脚本使用
配置完成后,服务器端 Tableau Prep 的脚本节点使用逻辑与桌面端一致:
● 选择「Tableau Python (TabPy) 服务器」连接;
● 指定脚本文件和函数名称;
● 确保脚本的 get_output_schema 字段定义正确。
关键注意事项
1. TabPy 窗口必须始终开启,否则 Prep 无法连接,且报错信息仅在该窗口输出;
2. 配置文件修改后需重启 TabPy 才能生效;
3. Python 脚本中的日期格式需符合 TabPy 要求,避免因格式不兼容报错;
4. 服务器端需确保 TabPy 服务持续运行(可配置为后台进程),否则脚本无法执行;
5. 生产环境建议启用 TabPy 认证(配置用户名密码),避免安全风险。
