如何在 Tableau Server 中获取视图图像的可视化类型?
2024-03-17 23:20:20
在 Tableau Server 中获取视图图像的可视化类型
简介
Tableau Server 提供了将视图呈现为图像的功能。然而,如果没有正确的方法,检索图像的可视化类型(例如饼图、条形图或表格)可能具有挑战性。本文将深入探讨如何使用 Tableau Server Client 和 Python 来解决这个问题,并提供一个逐步的指南,帮助您轻松获取视图的可视化类型。
获取视图图像
第一步是获取视图的图像。为此,我们将使用 Tableau Server Client 库。以下代码片段演示了如何完成此操作:
import tableauserverclient as TSC
# 设置 Tableau Server 凭据
tableau_server_url = 'my_server_url'
username = 'my_user_name'
password = 'my_password'
siteName = 'my_sitename'
# 身份验证和连接到 Tableau Server
tableau_auth = TSC.TableauAuth(username, password, site_id=siteName)
server = TSC.Server(tableau_server_url, use_server_version=True, http_options={'verify' : False})
with server.auth.sign_in(tableau_auth) as conn:
# 获取视图 ID
view_id = "my_view_id"
# 获取视图项
view_item = server.views.get_by_id(view_id=view_id)
# 使用 Tableau Server Client 库获取图像
server.views.populate_image(view_item)
# 将图像保存到本地文件
with open('./view_image.png', 'wb') as f:
f.write(view_item.image)
获取可视化类型
虽然 Tableau Server Client 无法直接提供可视化类型,但我们可以通过 Tableau REST API 检索此信息。
import requests
import json
# 获取 Tableau Server 令牌
url = f'{tableau_server_url}/api/3.10/auth/signin'
response = requests.post(url, data={'username': username, 'password': password, 'site': siteName})
token = response.json()['auth']['token']
# 获取视图 PDF
url = f'{tableau_server_url}/api/3.10/sites/{siteName}/views/{view_id}/pdf'
headers = {'Authorization': f'Bearer {token}'}
response = requests.get(url, headers=headers)
# 解析 PDF 文件并获取可视化类型
pdf_data = response.content
visual_type = json.loads(pdf_data[pdf_data.find(b'vizqlData={'):pdf_data.find(b', sheetConfig=')])['vizqlData'][0]['viz']['marks'][0]['markType']
# 打印可视化类型
print(visual_type)
完整示例
以下代码段将结合视图图像的获取和可视化类型的检索:
import tableauserverclient as TSC
import requests
import json
# 设置 Tableau Server 凭据
tableau_server_url = 'my_server_url'
username = 'my_user_name'
password = 'my_password'
siteName = 'my_sitename'
# 获取视图 ID
view_id = "my_view_id"
# 身份验证和连接到 Tableau Server
tableau_auth = TSC.TableauAuth(username, password, site_id=siteName)
server = TSC.Server(tableau_server_url, use_server_version=True, http_options={'verify' : False})
with server.auth.sign_in(tableau_auth) as conn:
# 获取视图项并获取图像
view_item = server.views.get_by_id(view_id=view_id)
server.views.populate_image(view_item)
# 获取 Tableau Server 令牌并获取视图 PDF
url = f'{tableau_server_url}/api/3.10/auth/signin'
response = requests.post(url, data={'username': username, 'password': password, 'site': siteName})
token = response.json()['auth']['token']
url = f'{tableau_server_url}/api/3.10/sites/{siteName}/views/{view_id}/pdf'
headers = {'Authorization': f'Bearer {token}'}
response = requests.get(url, headers=headers)
# 解析 PDF 文件并获取可视化类型
pdf_data = response.content
visual_type = json.loads(pdf_data[pdf_data.find(b'vizqlData={'):pdf_data.find(b', sheetConfig=')])['vizqlData'][0]['viz']['marks'][0]['markType']
# 打印可视化类型
print(visual_type)
结论
本文提供了一种全面的方法来获取 Tableau Server 中视图图像的可视化类型。通过结合 Tableau Server Client 和 Python,我们能够检索图像并使用 Tableau REST API 解析 PDF 文件以提取可视化信息。这种技术使我们能够进一步分析视图并获得对其内容的更深入理解。
常见问题解答
1. 这种方法是否适用于 Tableau Server 的所有版本?
是的,此方法适用于 Tableau Server 的所有受支持版本。
2. 我可以使用此方法获取其他可视化属性吗?
是的,此方法还可以用于获取其他可视化属性,例如颜色、大小和标签。
3. 是否可以自动执行此过程?
是的,可以编写脚本或程序来自动执行此过程并定期生成可视化类型报告。
4. 是否有其他库可以用于此目的?
虽然 Tableau Server Client 是首选库,但也可以使用其他 Python 库来连接到 Tableau Server REST API,例如 Python SDK 或 Requests 库。
5. Tableau Server 的许可证成本是多少?
Tableau Server 许可证的成本根据组织规模、部署类型和其他因素而异。有关定价信息,请联系 Tableau 销售团队。