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

使用TSC获取Tableau Server指定AD组用户返回0结果,求解决方案

问题:用TableauServerClient获取指定AD组成员失败,求解决办法

我需要用TableauServerClient(TSC)包获取Tableau Server站点里3个AD组的所有用户列表。目前写了两段Python代码:第一段能正常获取站点全部用户并导出到Excel;第二段尝试过滤这3个AD组,但返回0个用户。

我们站点用AD组配置权限,接下来要验证这3个组的成员是否有权限访问仪表板用到的数据源,计划把从Tableau Server拿到的用户列表和数据源权限用户列表合并,标记出_merge为left_only的情况,麻烦帮忙解决代码问题。


获取全部用户的可用代码

import tableauserverclient as TSC
import pandas as pd

tableau_auth = TSC.PersonalAccessTokenAuth('My_Dashboard_Update','access-token-xyz',site_id = 'site-name') 
server = TSC.Server('https://tableau-site/',use_server_version=True)

with server.auth.sign_in(tableau_auth):
    request_options = TSC.RequestOptions(pagesize=1000)
    all_users, pagination_item = server.users.get(request_options)
    
    print("\n站点共有 {} 个用户: ".format(pagination_item.total_available))
    all_users_on_site = pd.DataFrame({'Users': [user.name for user in all_users]})
    all_users_on_site.to_excel(r"C:\\Users\TABLEAU_User_ME\Documents\Projects\Tableau_Users.xlsx", index = False)

尝试过滤AD组但返回0用户的代码

import tableauserverclient as TSC
import pandas as pd

tableau_auth = TSC.PersonalAccessTokenAuth('My_Dashboard_Update','access-token-xyz',site_id = 'site-name') 
server = TSC.Server('https://tableau-server-site/',use_server_version=True)

with server.auth.sign_in(tableau_auth):
    request_options = TSC.RequestOptions(pagesize=1000)
    request_options.filter.add(TSC.Filter(TSC.RequestOptions.Field.Name, 
                                          TSC.RequestOptions.Operator.In,
                                          ["AD-Group1","AD-Group2", "AD-Group3"],)         
        )
    matching_groups, pagination_item = server.users.get(request_options)
    
    print("\n站点共有 {} 个用户: ".format(pagination_item.total_available))
    all_users_on_site = pd.DataFrame({'Users': [user.name for user in matching_groups]})
    all_users_on_site.to_excel(r"C:\\Users\TABLEAU_User_ME\Documents\Projects\Tableau_Users.xlsx", index = False)

问题原因及修正方案

错误原因

第二段代码的核心问题是:用server.users.get()去过滤组名,但server.users.get()是获取用户对象,过滤的是用户的属性(比如用户名),不是组的属性。要找AD组里的成员,得先找到对应的组,再获取组内的用户。

修正后的代码

import tableauserverclient as TSC
import pandas as pd

# 配置认证信息
tableau_auth = TSC.PersonalAccessTokenAuth('My_Dashboard_Update','access-token-xyz',site_id = 'site-name') 
server = TSC.Server('https://tableau-server-site/',use_server_version=True)

target_groups = ["AD-Group1","AD-Group2", "AD-Group3"]
group_users = set()  # 用集合去重,避免用户在多个组重复出现

with server.auth.sign_in(tableau_auth):
    # 第一步:获取指定的AD组
    request_options = TSC.RequestOptions(pagesize=1000)
    request_options.filter.add(TSC.Filter(TSC.RequestOptions.Field.Name,
                                          TSC.RequestOptions.Operator.In,
                                          target_groups))
    matching_groups, _ = server.groups.get(request_options)
    
    # 第二步:遍历每个组,获取组内用户
    for group in matching_groups:
        # 获取组的所有成员
        users_in_group, _ = server.groups.get_users(group.id)
        # 把用户名加入集合
        for user in users_in_group:
            group_users.add(user.name)
    
    # 第三步:转换为DataFrame并导出到Excel
    df_group_users = pd.DataFrame({'Users': list(group_users)})
    print(f"\n指定AD组共有 {len(group_users)} 个用户")
    df_group_users.to_excel(r"C:\\Users\TABLEAU_User_ME\Documents\Projects\AD_Group_Users.xlsx", index=False)

    # 第四步:与数据源权限用户列表合并(假设数据源权限列表已读入为df_data_source_users,列名为'Users')
    # 示例:读取数据源权限列表
    # df_data_source_users = pd.read_excel("数据源权限用户列表.xlsx")
    # 合并并标记差异
    # merged_df = pd.merge(df_group_users, df_data_source_users, on='Users', how='left', indicator=True)
    # 筛选出left_only的用户(即AD组有但数据源无权限的)
    # no_access_users = merged_df[merged_df['_merge'] == 'left_only']
    # no_access_users.to_excel("无数据源权限的AD组用户.xlsx", index=False)

代码说明

  1. 获取指定组:用server.groups.get()配合过滤条件,拿到目标AD组的对象
  2. 遍历组获取成员:调用server.groups.get_users(group.id)获取每个组的所有用户
  3. 去重处理:用集合存储用户名,避免同一用户在多个组里被重复统计
  4. 合并数据源权限列表:注释部分给出了合并逻辑,读取数据源权限列表后,用pd.merge的left连接,筛选_merge为left_only的行就是AD组有但数据源无权限的用户

内容的提问来源于stack exchange,提问作者MintyLemonade

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 11:33:23