You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python提取多站点Tableau Server用户列表报错及添加站点列需求

问题解决:多站点提取Tableau用户列表并添加站点列

错误原因

  • 配置中site_name和site_url使用了列表,但TableauServerConnection实例一次只能绑定单个站点,直接传入列表会导致连接认证异常,进而触发分页错误。
  • get_users_dataframe方法仅针对当前已登录的单个站点生效,无法直接批量处理多站点。

修复方案

  1. 遍历每个站点,为每个站点创建独立的连接会话
  2. 为每个站点的用户数据添加专属站点名称列
  3. 将所有站点的用户数据合并为统一的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 03:37:13