Tableau 高级 - TabPy 的使用
Tableau 桌面版 10.1 以上的版本支持使用 TabPy。
TabPy 简介
TabPy 实现了 tableau 的计算字段里嵌入python或R代码(可加入一些机器学习或数据处理的库)。它是一个基于 Tornado 和其他 Python 库的 Python 进程,将计算字段嵌入的代码传输到后台(web 后台基于 Tornado),由后台计算完后(可调用第三方库如机器学习相关的库)将结果再放回到前端展示。所以 TabPy 由两个主要组件构成:
- 基于 Tornado 的 web 服务进程(Server),运行 REST API 传回的 python 代码,执行完毕后,再传回前端。
- 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 需进行以下配置。
- Tableau 工具栏中依次点击 Help->Settings and Performance->Manage External Service Connection。
- 键入服务器地址(如果 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里
参考
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论