使用 Analytics 聚合工作跟踪数据

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

可以通过两种方式之一将 Analytics 与 OData 配合使用来获取工作跟踪数据的总和。 第一种方法根据 OData 查询返回简单的工作项计数。 第二种方法基于执行 OData 聚合扩展的 OData 查询返回 JSON 格式的结果。

本文基于 为 Analytics 构造 OData 查询和使用 OData Analytics定义基本查询中提供的信息。 此外,本文的查询侧重于检索工作项数据,但是,这些原则适用于查询其他实体集。

在本文中,你将了解:

  • 关于 OData 聚合扩展
  • 如何使用 OData 的聚合扩展
  • 如何对聚合结果进行分组和筛选
  • 如何聚合数据以生成累积流关系图

若要了解如何生成简单计数,请参阅 返回项计数 (没有其他数据) 返回项和数据计数

注意

Analytics 服务在生产环境中自动启用并支持所有Azure DevOps Services。 Power BI 集成 和对分析服务的 OData 源 的访问已正式发布。 我们鼓励你使用它并向我们提供反馈。 可用数据依赖于版本。 支持的最新版本是 v2.0,最新的预览版本是 v4.0-preview。 有关详细信息,请参阅 OData API 版本控制

注意

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

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

注意

分析服务在 2019 Azure DevOps Server处于预览状态。 可以为项目集合 启用或安装它Power BI 集成 和对分析服务的 OData 源 的访问处于预览状态。 我们鼓励你使用它并向我们提供反馈。

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

什么是 OData 的聚合扩展?

分析依赖于 OData 来创作对工作跟踪数据的查询。 OData 中的聚合是使用引入关键字 (keyword) 的扩展实现的$apply。 下面提供了有关如何使用此关键字 (keyword) 的一些示例。 若要详细了解该扩展,请参阅 用于数据聚合的 OData 扩展

使用 OData 聚合扩展聚合数据

现在,你已了解如何执行简单计数,让我们回顾一下如何使用令牌触发聚合 $apply ,其中 URL 末尾的基本格式如下所示:

/{entitySetName}?$apply=aggregate({columnToAggregate} with {aggregationType} as {newColumnName})

其中:

  • {entitySetName} 是需要查询的实体
  • {columnToAggregate} 是聚合列
  • {aggregationType} 将指定使用的聚合类型
  • {newColumnName} 指定聚合后具有值的列的名称。

使用应用扩展的聚合数据

使用 扩展 $apply ,可以在查询工作跟踪数据时获取计数、总和和其他信息。

返回所有剩余工时的总和

https://analytics.dev.azure.com/{OrganizationName}/_odata/{version}/WorkItems?
  $apply=aggregate(RemainingWork with sum as SumOfRemainingWork)

返回最后一个工作项标识符

https://analytics.dev.azure.com/{OrganizationName}/_odata/{version}/WorkItems?
  $apply=aggregate(WorkItemId with max as MaxWorkItemId)

使用 groupby 子句对结果进行分组

OData 聚合扩展还支持与 groupby SQL GROUP BY 子句相同的子句。 可以使用此子句来更详细地快速细分数字。

例如,thie following 子句返回工作项计数:

https://analytics.dev.azure.com/{OrganizationName}/_odata/{version}/WorkItems?
  $apply=aggregate($count as Count)

groupby添加 子句以按类型返回工作项计数:

https://analytics.dev.azure.com/{OrganizationName}/_odata/{version}/WorkItems?
  $apply=groupby((WorkItemType), aggregate($count as Count))

它返回类似于以下示例的结果:

{
  "@odata.context":"https://analytics.dev.azure.com/{OrganizationName}/_odata/{version}/$metadata#WorkItems(WorkItemType,Count)","value":[
    {
      "@odata.id":null,"WorkItemType":"Bug","Count":3
    },
    {
      "@odata.id":null,"WorkItemType":"Product Backlog Item","Count":13
    }
  ]
}

还可以按多个属性进行分组,如以下示例所示:

https://analytics.dev.azure.com/{OrganizationName}/_odata/{version}/WorkItems?
  $apply=groupby((WorkItemType, State), aggregate($count as Count))

它返回类似于以下示例的结果:

{
  "@odata.context": "https://analytics.dev.azure.com/{OrganizationName}/_odata/{version}/$metadata#WorkItems(WorkItemType,State,Count)",
  "value": [
    {
      "@odata.id": null,
      "State": "Active",
      "WorkItemType": "Bug",
      "Count": 2
    },
    {
      "@odata.id": null,
      "State": "Committed",
      "WorkItemType": "Bug",
      "Count": 1
    },
    {
      "@odata.id": null,
      "State": "Active",
      "WorkItemType": "Product Backlog Item",
      "Count": 5
    },
    {
      "@odata.id": null,
      "State": "Committed",
      "WorkItemType": "Product Backlog Item",
      "Count": 8
    }
  ]
}

还可以跨实体进行分组,但 OData 分组与通常的看法不同。

例如,假设你想要知道组织或集合中每个项目中有多少个区域。 在 OData 中,“统计所有区域并按项目对其进行分组”等效于“给我所有项目和每个项目的面积计数”。 这会生成类似于以下内容的查询:

https://analytics.dev.azure.com/{OrganizationName}/_odata/{version}/Areas?
  $apply=groupby((Project/ProjectName), aggregate($count as Count))

筛选聚合结果

还可以筛选聚合结果,但它们的应用方式与不使用聚合时略有不同。 Analytics 会评估管道上的筛选器,因此始终最好先执行最离散的筛选。

筛选器如下所示:

https://analytics.dev.azure.com/{OrganizationName}/_odata/{version}/WorkItems?
  $apply=
    filter(Iteration/IterationName eq 'Sprint 89')/
    filter(WorkItemType eq 'User Story')/
    groupby((State), aggregate($count as Count))

注意

无需提供 groupby 子句。 只需使用 aggregate 子句即可返回单个值。

在单个调用中生成多个聚合

你可能想要提供多条信息。 例如已完成工时和剩余工时的总和。 在这种情况下,可以进行单独的调用或单个调用,如下所示:

/WorkItems?$apply=aggregate(CompletedWork with sum as SumOfCompletedWork, RemainingWork with sum as SumOfRemainingWork)

它将返回类似于以下示例的结果:

{
  "@odata.context":"https://analytics.dev.azure.com/{OrganizationName}/_odata/{version}/$metadata#WorkItems(SumOfCompletedWork,SumOfRemainingWork)","value":[
    {
      "@odata.id":null,"SumOfCompletedWork":1525841.2900000005,"SumOfRemainingWork":73842.39
    }
  ]
}

生成在单个调用中使用的计算属性

可能需要使用数学表达式来计算在结果集中使用的属性。 例如,已完成工时的总和除以已完成工时的总和加上剩余工时的总和,以计算已完成工时百分比。 在这种情况下,可以使用以下示例:

/WorkItems?$apply=aggregate(CompletedWork with sum as SumOfCompletedWork, RemainingWork with sum as SumOfRemainingWork)/compute(SumOfCompletedWork div (SumOfCompletedWork add SumOfRemainingWork) as DonePercentage)

{
  "@odata.context":"https://analytics.dev.azure.com/{OrganizationName}/_odata/{version}/$metadata#WorkItems(SumOfCompletedWork,SumOfRemainingWork)","value":[
    {
      "@odata.id":null,"DonePercentage":0.96760221857946638,"SumOfRemainingWork":50715.95,"SumOfCompletedWork":1514698.3400000033
    }
  ]
}

从聚合数据生成累积流图

假设你想要在 Power BI 中创建 累积流图 。 可以使用类似于以下查询的查询:

https://analytics.dev.azure.com/{OrganizationName}/{ProjectName}/_odata/{version}//WorkItemBoardSnapshot?$apply=filter(DateValue gt 2015-07-16Z and DateValue le 2015-08-16Z)/filter(BoardName eq 'Stories' and Team/TeamName eq '{teamName}')/groupby((DateValue, ColumnName), aggregate(Count with sum as Count))&$orderby=DateValue

它返回与此示例类似的结果。 然后,可以直接在所选的数据可视化效果中使用它。

{
  "@odata.context": "https://analytics.dev.azure.com/{OrganizationName}/{ProjectName}/_odata/{version}//$metadata#WorkItemBoardSnapshot(DateValue,ColumnName,Count)",
  "value": [
    {
      "@odata.id": null,
      "DateValue": "2015-07-16T00:00:00-07:00",
      "Count": 324,
       "ColumnName": "Completed"
    },
    {
      "@odata.id": null,
      "DateValue": "2015-07-16T00:00:00-07:00",
      "Count": 5,
      "ColumnName": "In Progress"
    }
  ]
}

让我们看一下此查询的实际用途:

  • 筛选特定团队的数据
  • 将数据筛选到特定的积压工作
  • 返回工作项计数。

刷新 Power BI 或 Excel 时,所需的行数越少,刷新速度就越快。

后续步骤