通过


使用 OData 聚合查询趋势数据

Azure DevOps Services |Azure DevOps Server |Azure DevOps Server 2022

分析将每个工作项的每日快照存储在两个实体集:WorkItemSnapshot(跟踪字段值,如状态和工作量)和WorkItemBoardSnapshot(跟踪板列位置)。 由于每个实体每天每个工作项包含一行,因此这些表会迅速增长。 在将数据返回到客户端工具之前,使用 OData 聚合扩展 按日期和分组结果进行筛选。

本文介绍如何使用$applyfiltergroupbyaggregate根据日期范围和迭代来生成趋势查询。

注意

Azure DevOps Services 中所有服务的生产中会自动启用并支持 Analytics 服务。 Power BI 集成 和对 Analytics 服务的 OData 源 的访问权限已正式发布。 我们鼓励您使用 Analytics OData 数据源并提供反馈。

可用数据依赖于版本。 OData API 的最新支持版本是 v2.0,最新的预览版本是 v4.0-preview。 有关详细信息,请参阅 OData API 版本控制

注意

Azure DevOps Server 2020 及更高版本的所有新项目集合在生产环境中会自动安装并支持 Analytics 服务。 Power BI 集成 和对 Analytics 服务的 OData 源 的访问权限已正式发布。 我们鼓励您使用 Analytics OData 数据源并提供反馈。 如果从 Azure DevOps Server 2019 升级,可以在升级期间安装 Analytics 服务。

可用数据依赖于版本。 OData API 的最新支持版本是 v2.0,最新的预览版本是 v4.0-preview。 有关详细信息,请参阅 OData API 版本控制

注意

本文中所示的示例基于 Azure DevOps Services URL。 根据需要替换 Azure DevOps Server 的网址。

https://{servername}:{port}/tfs/{OrganizationName}/{ProjectName}/_odata/{version}/

小窍门

可以在本文后面了解如何使用 AI 来帮助完成此任务,或查看Azure DevOps MCP Server 中的 Enable AI Assistance以便开始。

先决条件

类别 要求
访问级别 - Project 成员
- 至少 基本 访问权限。
权限 默认情况下,项目成员有权查询 Analytics 和创建视图。 有关服务和功能启用和常规数据跟踪活动的其他先决条件的详细信息,请参阅 访问 Analytics的权限和先决条件。

按日期范围查询趋势数据

查询快照表时,请遵循两个要求:

  1. 按日期进行筛选 — 每个表每天包含每个工作项的一行,因此未筛选的查询会返回非常大的结果集。
  2. 按日期 分组 - 如果省略日期分组,响应将包含警告。

以下查询按地区返回 2016 年 3 月的每日故障计数:

https://analytics.dev.azure.com/{OrganizationName}/{ProjectName}/_odata/{version}/WorkItemSnapshot?
  $apply=
    filter(DateValue ge 2016-03-01Z and DateValue le 2016-03-31Z and WorkItemType eq 'Bug')/
    groupby((DateValue, State), aggregate($count as Count))
  &$orderby=DateValue

返回:

{
  "value": [
    { "DateValue": "2016-03-01T00:00:00-08:00", "State": "Active", "Count": 2666 },
    { "DateValue": "2016-03-01T00:00:00-08:00", "State": "Closed", "Count": 51408 }
  ]
}

此查询返回的结果不超过 31 天乘以bug状态(激活、已解决、已关闭)的数量,最多为 93 行,与工作项数量无关。

按迭代查询趋势数据

而不是硬编码日期,可按迭代进行筛选并引用其开始日期和结束日期,以便日期范围自动调整。 检查 Iteration/EndDate eq null 处理尚未有结束日期的迭代。

https://analytics.dev.azure.com/{OrganizationName}/{ProjectName}/_odata/{version}/WorkItemSnapshot?
  $apply=
    filter(WorkItemType eq 'Bug')/
    filter(Iteration/IterationName eq 'Sprint 99')/
    filter(DateValue ge Iteration/StartDate and (Iteration/EndDate eq null or DateValue le Iteration/EndDate))/
    groupby((DateValue, State), aggregate($count as Count))
  &$orderby=DateValue

返回:

{
  "value": [
    { "DateValue": "2016-04-04T00:00:00-07:00", "State": "Active", "Count": 320 },
    { "DateValue": "2016-04-04T00:00:00-07:00", "State": "Closed", "Count": 38 }
  ]
}

注意

如果快照表上的查询不包含 $apply$select,响应将返回警告。 始终将聚合与快照实体集一起使用。

使用 AI 生成趋势查询

如果配置 Azure DevOps MCP 服务器,可以使用 AI 助手帮助针对快照实体集构造和排查趋势查询问题。

示例提示

任务 示例提示
按日期范围排序的 Bug 趋势 Write an OData trend query that shows the daily bug count by state over the last 30 days in <ProjectName>.
冲刺快照 Create an OData query against WorkItemSnapshot that shows work item counts grouped by date for the current sprint in <ProjectName>.
按迭代进行筛选 Generate an OData trend query that uses the iteration start and end dates from <IterationName> to show story point burndown in <ProjectName>.
面板列趋势 Write an OData query against WorkItemBoardSnapshot to track work items by board column over the past two weeks in <ProjectName> in the <OrganizationName> organization.
优化性能 My WorkItemSnapshot trend query for <ProjectName> is timing out. Suggest specific date filters and aggregation to reduce the row count without losing the key metrics.
比较迭代 Create an OData trend query that compares bug counts between <SprintName> and the previous sprint in <ProjectName> in the <OrganizationName> organization.
剩余工时趋势 Write an OData trend query that shows the daily sum of remaining work grouped by Area Path for the current iteration in <ProjectName>.
检测状态更改 Create an OData snapshot query that tracks how many work items moved from Active to Resolved each day over the past <NumberOfDays> days in <ProjectName>.
范围更改分析 Generate an OData trend query that shows the daily count of user stories added or removed from <SprintName> by comparing WorkItemSnapshot data in <ProjectName>.

小窍门

如果使用 Visual Studio Code,则代理模式对于迭代趋势查询特别有用-优化日期范围、故障排除 $apply 语法和验证快照结果。

后续步骤