如何获取Azure DevOps中当前或曾关联指定迭代(Sprint)的所有工作项
我之前也帮不少人解决过这个Azure DevOps的痛点——默认的工作项查询确实只盯着当前状态,要抓那些中途移出目标Sprint的工作项,除了逐个拉取历史记录,还有几个更高效的方案:
1. 用Azure DevOps Analytics Service的OData查询
这是最直接的方案,因为Analytics服务专门维护了工作项的历史快照数据,不像常规API只返回当前状态。你可以通过OData查询WorkItemHistory实体,筛选所有曾关联目标Sprint的工作项。
举个实际的查询示例(替换掉你的组织、项目和Sprint ID):
https://analytics.dev.azure.com/{your-org}/{your-project}/_odata/v3.0-preview/WorkItemHistory ?$filter=Iteration/IterationId eq {target-sprint-id} &$select=WorkItemId, Title, Iteration/IterationName, RevisedDate &$expand=Iteration &$distinct=true
这个查询会返回所有在历史中曾属于目标Sprint的工作项,包括中途被移到其他迭代的。$distinct=true用来去重,避免同一个工作项的多条历史记录重复出现。
需要注意的是,Analytics的数据有几小时的延迟,不过对于计算Sprint可预测性这类不需要实时的指标,完全够用。另外,你需要有项目的「View Analytics」权限才能访问这个接口。
2. 通过Power BI连接Azure DevOps数据源
如果你不擅长写OData查询,Power BI的Azure DevOps连接器可以帮你轻松获取历史数据。连接后,Power BI会自动拉取工作项的所有历史快照,你可以在数据模型中添加筛选条件,找出所有曾关联目标Sprint的工作项,还能直接生成报表或者导出数据到CSV。
操作步骤大概是:
- 打开Power BI Desktop,选择「获取数据」→「Azure DevOps」
- 输入你的组织和项目信息,选择要导入的工作项类型
- 导入后,在数据视图中找到
WorkItemHistory表,筛选IterationId等于目标Sprint的ID,然后去重得到唯一的工作项列表
这个方案适合非技术人员,可视化和导出都很方便。
3. 事前配置自动化规则(适合未来Sprint)
如果需要避免以后再遇到这个问题,可以提前设置一个自定义字段,比如OriginalSprint,然后通过Azure DevOps的工作项规则或者Pipeline来自动化填充:
- 当工作项从目标Sprint移出时,触发规则,把当前的Sprint名称/ID存入
OriginalSprint字段 - 这样后续查询时,直接筛选
OriginalSprint等于目标Sprint的工作项即可
不过这个方案只能覆盖配置之后的Sprint,无法追溯之前的历史数据,算是一个预防措施。
内容的提问来源于stack exchange,提问作者Richard Fay

