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

如何用Python调用SSRS API获取其他用户发布的报表订阅

获取SSRS所有报表订阅的解决方案

1. 权限要求

要获取服务器上所有用户的报表订阅,你使用的认证账号必须拥有SSRS的系统管理员或内容管理员角色权限。默认情况下,/Subscriptions端点仅返回当前用户有权限查看的订阅内容,只有当账号具备上述高权限时,API才会返回全量订阅数据。

2. 优化后的代码实现

以下代码会先遍历服务器上所有报表,再逐个获取每个报表的订阅信息,同时关联报表的名称和路径,最后导出为CSV:

from requests_negotiate_sspi import HttpNegotiateAuth
import requests
import csv

def fetch_all_subscriptions(server_base_url):
    # 初始化会话和认证
    session = requests.Session()
    session.auth = HttpNegotiateAuth()
    
    all_subscriptions = []
    
    # 获取所有目录项(筛选出报表)
    catalog_endpoint = f"{server_base_url}/reports/api/v2.0/CatalogItems"
    catalog_resp = session.get(catalog_endpoint)
    catalog_resp.raise_for_status()
    catalog_items = catalog_resp.json()
    
    # 遍历每个报表,获取对应的订阅
    for item in catalog_items:
        # Type=2 对应SSRS中的报表类型,排除文件夹、数据源等其他类型
        if item["Type"] == 2:
            sub_endpoint = f"{server_base_url}/reports/api/v2.0/CatalogItems/{item['Id']}/Subscriptions"
            sub_resp = session.get(sub_endpoint)
            if sub_resp.status_code == 200:
                subs = sub_resp.json()
                # 把报表的名称和路径关联到订阅数据中
                for sub in subs:
                    sub["报表名称"] = item["Name"]
                    sub["报表路径"] = item["Path"]
                    all_subscriptions.append(sub)
    
    session.close()
    return all_subscriptions

# 替换为你的SSRS服务器地址
server_url = "http://<my_server_url>"
full_subscription_list = fetch_all_subscriptions(server_url)

# 导出到CSV文件
with open("全量报表订阅.csv", "w", newline="", encoding="utf-8") as csv_file:
    if full_subscription_list:
        # 自动获取所有字段名
        field_names = full_subscription_list[0].keys()
        writer = csv.DictWriter(csv_file, fieldnames=field_names)
        writer.writeheader()
        writer.writerows(full_subscription_list)

3. 注意事项

  • 权限校验:如果运行后仍只能获取自己的订阅,联系SSRS管理员确认你的账号已被分配系统管理员或内容管理员角色。
  • 分页处理:若报表或订阅数量过大,API会返回分页数据,需解析响应中的@odata.nextLink字段来循环获取后续页内容。
  • 类型筛选:代码中Type=2用于筛选报表,你可以根据需求调整类型值(如Type=1为文件夹,Type=5为数据源)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 08:30:18