如何在Power BI中通过API批量获取Azure DevOps工作项数据?
批量从Azure DevOps获取工作项到Power BI
要批量获取所有工作项,无需手动罗列ID,推荐使用**Azure DevOps的WIQL(工作项查询语言)**先获取目标工作项的ID列表,再批量拉取详细信息,具体实现步骤如下:
1. 用WIQL获取工作项ID列表
WIQL是Azure DevOps专属的工作项查询语法,支持按项目、类型、状态等条件过滤,能一次性返回所有符合要求的工作项ID,替代手动罗列的繁琐操作。
对应M脚本(获取ID列表)
新建空白查询,替换脚本中的组织名、项目名和个人访问令牌(PAT):
let // WIQL查询语句:获取当前项目下所有工作项ID,可按需修改过滤条件 WIQLQuery = "SELECT [System.Id] FROM WorkItems", // WIQL API地址 APIUrl_WIQL = "https://dev.azure.com/你的组织名/你的项目名/_apis/wit/wiql?api-version=7.1-preview.2", // 个人访问令牌(需授予工作项读取权限) PAT = "你的个人访问令牌", // 构造请求头,PAT需转Base64编码(格式为":" + PAT) Headers = [ #"Content-Type" = "application/json", #"Authorization" = "Basic " & Binary.ToText(Text.ToBinary(":" & PAT), BinaryEncoding.Base64) ], // 发送POST请求执行WIQL查询 WIQL_Response = Json.Document(Web.Contents(APIUrl_WIQL, [Headers=Headers, Content=Text.ToBinary(Json.FromValue([query=WIQLQuery]))])), // 提取工作项ID列表 WorkItemIds = List.Transform(WIQL_Response[workItems], each _[id]), // 将ID列表转为逗号分隔的字符串,用于后续批量查询 IdString = Text.Combine(List.Transform(WorkItemIds, Text.From), ",") in IdString
2. 批量获取工作项详细信息
基于上述步骤得到的ID字符串,调用批量获取工作项的API,一次性拉取所有工作项的结构化数据:
完整整合脚本(直接生成工作项表格)
将两步逻辑整合,直接得到可使用的工作项数据表:
let // --- 第一步:获取工作项ID列表 --- WIQLQuery = "SELECT [System.Id] FROM WorkItems", APIUrl_WIQL = "https://dev.azure.com/你的组织名/你的项目名/_apis/wit/wiql?api-version=7.1-preview.2", PAT = "你的个人访问令牌", Headers = [ #"Content-Type" = "application/json", #"Authorization" = "Basic " & Binary.ToText(Text.ToBinary(":" & PAT), BinaryEncoding.Base64) ], WIQL_Response = Json.Document(Web.Contents(APIUrl_WIQL, [Headers=Headers, Content=Text.ToBinary(Json.FromValue([query=WIQLQuery]))])), WorkItemIds = List.Transform(WIQL_Response[workItems], each _[id]), IdString = Text.Combine(List.Transform(WorkItemIds, Text.From), ","), // --- 第二步:批量获取工作项详细信息 --- APIUrl_WorkItems = "https://dev.azure.com/你的组织名/你的项目名/_apis/wit/workitems?ids=" & IdString & "&api-version=7.1-preview.3&$expand=All", WorkItems_Response = Json.Document(Web.Contents(APIUrl_WorkItems, [Headers=Headers])), // 将返回的工作项数组转为表格 WorkItems_Table = Table.FromList(WorkItems_Response[value], Splitter.SplitByNothing(), null, null, ExtraValues.Error), // 展开工作项基础信息 Expanded_Fields = Table.ExpandRecordColumn(WorkItems_Table, "Column1", {"id", "fields"}, {"ID", "字段详情"}), // 展开需要的具体字段(可按需添加更多字段) Expanded_Details = Table.ExpandRecordColumn(Expanded_Fields, "字段详情", {"System.Title", "System.AssignedTo", "System.State", "System.CreatedDate"}, {"标题", "负责人", "状态", "创建日期"} ) in Expanded_Details
关键注意事项
- PAT权限:个人访问令牌需在Azure DevOps的「用户设置」-「个人访问令牌」中创建,至少授予
Work Items (Read)权限。 - WIQL自定义:若不需要所有工作项,可修改WIQL条件,比如过滤用户故事:
SELECT [System.Id] FROM WorkItems WHERE [System.WorkItemType] = 'User Story'。 - 批量上限处理:批量API默认最多返回200条数据,若工作项超过200条,可拆分ID列表为多个批次(如每200个ID一批),循环调用API后合并结果。
- 字段扩展:脚本中仅展开了常用字段,可在
Expanded_Details步骤中添加更多System.开头的系统字段,或自定义字段。
内容的提问来源于stack exchange,提问作者Cheries
相关产品推荐
相关产品推荐

