使用 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 时,所需的行数越少,刷新速度就越快。