Tableau 高级 - TabPy 的使用

发布于 2023-07-18 19:22:33 字数 3540 浏览 36 评论 0

Tableau 桌面版 10.1 以上的版本支持使用 TabPy。

TabPy 简介

TabPy 实现了 tableau 的计算字段里嵌入python或R代码(可加入一些机器学习或数据处理的库)。它是一个基于 Tornado 和其他 Python 库的 Python 进程,将计算字段嵌入的代码传输到后台(web 后台基于 Tornado),由后台计算完后(可调用第三方库如机器学习相关的库)将结果再放回到前端展示。所以 TabPy 由两个主要组件构成:

  1. 基于 Tornado 的 web 服务进程(Server),运行 REST API 传回的 python 代码,执行完毕后,再传回前端。
  2. client library.

TabPy 安装与配置

安装 TabPy

$ cd /opt  # 一般自定义安装的软件安装包都放到这儿
$ sudo wget https://github.com/tableau/TabPy/archive/master.zip  # 下载TabPy
$ sudo unzip master.zip  # 解压到文件夹TabPy-master
$ sudo chown -R devops:devops TabPy-master  # 修改该目录权限为当前用户devops
$ cd TabPy-master
$ chmod u+x setup.sh
$ ./setup.sh  # 安装相应的第三方库,然后启动 TabPy 服务

启动 TabPy 服务

首次安装成功后,会启动 TabPy 服务,终端会打印出以后启动脚本的路径:

$ ./setup.sh
...
Successfully installed Tornado-JSON-1.3.2 future-0.16.0 futures-3.2.0 simplejson-3.15.0 tabpy-server-0.2
~~~~~~~~~~~~~~~  Installation completed  ~~~~~~~~~~~~~~~

From now on, you can start the server by running /home/devops/anaconda/envs/Tableau-Python-Server/lib/python2.7/site-packages/tabpy_server/startup.sh
...

如上启动脚本的路径为 /home/devops/anaconda/envs/Tableau-Python-Server/lib/python2.7/site-packages/tabpy_server/startup.sh

当前生产环境的 TabPy 部署在数仓服务器上(10.30.49.80)

TabPy 的使用

TableauDesktop

在 TableauDesktop 使用 TabPy 需进行以下配置。

  1. Tableau 工具栏中依次点击 Help->Settings and Performance->Manage External Service Connection。
  2. 键入服务器地址(如果 TabPy 安装在本地,服务器地址为 localhost)和端口号(默认为 9004)

TableauServer

发布到 TableauServer,需要在服务器端配置连接 Tabpy。

$ tabadmin stop
$ tabadmin set vizqlserver.allow_insecure_scripts true
$ tabadmin set vizqlserver.extsvc.host <ip address or host name of the machine hosting TabPy>
$ tabadmin set vizqlserver.extsvc.port <port for TabPy>
$ tabadmin configure
$ tabadmin start

TabPy 的使用

当前 Tableau 主要通过4个不同返回类型的函数来调用 TabPy 来满足使用场景:SCRIPT_INT, SCRIPT_REAL, SCRIPT_STR, SCRIPT_BOOL。这四个函数内容大体都为:Python(或 R)脚本字符串 + 参数1[参数2,参数n] 且都需要 return。

# 计算字段1
SCRIPT_STR("
import requests
return [requests.get('{url}/?contract_no={}'.format(item)).text for item in _arg1]", ATTR([contract_no]))

# 计算字段2
SCRIPT_REAL("
import json
return [json.loads(item)['result']['refund_price']['breach_price']/100.00 for item in _arg1]", [response])

调试与打印日志

在嵌入 python 代码里使用 print 函数。相关内容会打印到 TabPy 服务端的日志里,如:

SCRIPT_REAL("
print(_arg1) 
return sum(_arg1)", SUM([Sales]))

将中间过程的数据打印到csv里

参考

  1. Tableau and Python Integration
  2. Using Python in Tableau Calculations
  3. Tableau Integration with Python - Step by Step
  4. 将表达式传递到外部服务
  5. 外部服务连接疑难解答

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

孤单情人

暂无简介

文章
评论
26 人气
更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文