用Python获取Tableau Server所有的数据源清单(含代码)

工具:Pycharm
解释器版本3.6
系统:Windows10
编辑工具:Markdown Nice
其他:Excel

一、背景

当我们在Tableau Server设置多个站点时,为了方便统一规范和监控管理,是否需要汇总数据库表清单等,人工维护会存在滞后性和遗漏的可能,所以考虑用程序进行自动提取。

批量获取Tableau Server上发布数据源

使用 Tableau Server Client(Python)批量获取的所有工作薄和发布数据源。不过有个前提,就是你至少得是Tableau Server的站点管理员用户,或者是服务器管理员用户.

Tableau Server Client(Python)

安装 Tableau Server Client(Python):

WINDOS环境:
快捷键 WIN+R 运行 CMD
输入:

pip install tableauserverclient

令牌获取

登录 Tableau Server 获取 TOKEN_NAME 和 TOKEN_VALUE 和 SITENAME

右上角账户菜单>我的账户设置

找到个人访问令牌,进行生成并记录令牌信息;

代码部分

1. 配置令牌登录信息:

import tableauserverclient as TSC
# https://tableau.github.io/server-client-python/docs/api-ref#data-sources
# 登录信息
# 默认站点名为""
server_address = 'https://tableau.XXXXX.com/' # 输入你的tableau server地址
site_name = '' #站点名称,主站点默认为''
token_name = '输入你设置的token name'
token_value = '输入你的令牌token' 

2. 构建空的DataFrame 用以存储后续的站点信息

import pandas as pd
df = pd.DataFrame (columns= [ '站点名称', '站点id','数据源名称','数据源id','是否数据提取','数据库地址'])

3. 获取所有站点的数据源信息

import tableauserverclient as TSC
import pandas as pd

# https://tableau.github.io/server-client-python/docs/api-ref#data-sources


# 登录信息
# 默认站点名为""
server_address = 'https://tableau.XXXXX.com/' # 输入你的tableau server地址
site_name = '' #站点名称,主站点默认为''
token_name = '输入你设置的token name'
token_value = '输入你的令牌token' 

## 登录配置
tableau_auth = TSC.PersonalAccessTokenAuth(token_name, token_value, site_name)
server = TSC.Server(server_address, use_server_version=True)

# 构建空的DataFrame
df = pd.DataFrame (columns= [ '站点名称', '站点id','数据源名称','数据源id','是否数据提取','数据库地址'])
# 登入
with server.auth.sign_in(tableau_auth):
    # 获取所有站点信息 all_sites
    all_sites, pagination_item = server.sites.get()

    # 遍历切换站点进行读取操作
    for site_sw in all_sites:
        # 切换站点 	[content_url:站点的路径,name:站点的名称]
        server.auth.switch_site(site_sw)
        # 获取当前站点下所有的 数据源信息
        all_datasources, pagination_item = server.datasources.get()
        # 遍历数据源
        for i in all_datasources:
            # 填充数据源的连接 来自 Tableau Server 的响应不包含有关 组成工作簿的视图或连接
            # 如果要获取视图和连接,则需要调用`populate_connections`函数
            # datasource = server.datasources.get_by_id(i.id)
            # 把 对象传入 填充相关数据
            server.datasources.populate_connections(i)
            # 指定数据源的数据连接列表 ()。必须先调用该方法才能访问此数据
            connection = i.connections[0]
            data_info={
                '站点名称':site_sw.name,
                '站点id':site_sw.id,
                '数据源名称':i.name,
                '数据源id':i.id,
                '是否数据提取':i.has_extracts,
                '数据库地址':connection.server_address
            }
            # 转化为DataFrame 用concat连接
            # 由于Python版本更替的问题,用append添加字典的方法可能失效,这里直接用concat方法 df=df.append(data_info,ignore_index=True)
            df2=pd.DataFrame(data_info,index=[0])
            # axis=0 纵向连接,ignore_index=True 重新规划 索引
            df=pd.concat([df,df2],axis=0,ignore_index=True)
server.auth.sign_out()

4. 存储所有站点的数据源信息

with pd.ExcelWriter("数据源信息表.xlsx",engine='openpyxl') as writer:
    df.to_excel(writer, index=True,encoding='UTF-8')
#    writer.save()
print("执行完成")
报错提示

如果出现下述错误:

可以通过安装openpyxl包解决

成果:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值