Python提取多站点Tableau Server用户列表报错及添加站点列需求
问题解决:多站点提取Tableau用户列表并添加站点列
错误原因
- 配置中
site_name和site_url使用了列表,但TableauServerConnection实例一次只能绑定单个站点,直接传入列表会导致连接认证异常,进而触发分页错误。 get_users_dataframe方法仅针对当前已登录的单个站点生效,无法直接批量处理多站点。
修复方案
- 遍历每个站点,为每个站点创建独立的连接会话
- 为每个站点的用户数据添加专属站点名称列
- 将所有站点的用户数据合并为统一的DataFrame
修改后的代码
from tableau_api_lib import TableauServerConnection import pandas as pd from tableau_api_lib.utils.querying import get_users_dataframe # 基础服务器配置(所有站点共用的部分) tableau_base_config = { 'server': 'https://myserver.com', 'api_version': '3.21', 'username': 'user', 'password': 'pass' } # 站点信息列表,包含每个站点的名称和URL后缀 target_sites = [ {'site_name': 'FT', 'site_url': 'FT'}, {'site_name': 'INT', 'site_url': 'INT'}, {'site_name': 'ss', 'site_url': 'ss'} ] # 初始化总数据容器 all_users_df = pd.DataFrame() for site in target_sites: # 构建当前站点的专属配置 site_config = { 'my_env': {**tableau_base_config, **site} } # 创建连接并登录当前站点 conn = TableauServerConnection(site_config, env='my_env') conn.sign_in() # 获取当前站点的用户数据 site_users = get_users_dataframe(conn=conn) # 添加站点名称列 site_users['所属站点'] = site['site_name'] # 移除不需要的列 site_users.drop(columns=['domain', 'externalAuthUserId', 'locale','language'], inplace=True) # 合并到总数据框 all_users_df = pd.concat([all_users_df, site_users], ignore_index=True) # 登出当前站点连接 conn.sign_out() print(all_users_df)
关键细节
- 每个站点单独创建连接会话,避免多站点切换时的认证冲突
- 通过
pd.concat合并多站点数据,ignore_index=True确保索引不重复 - 新增的
所属站点列清晰区分用户归属的站点
内容的提问来源于stack exchange,提问作者Snyder Fox
相关产品推荐
相关产品推荐

