Azure DevOps 服务 |Azure DevOps Server |Azure DevOps Server 2022
完成不同的任务需要多长时间? 本文提供了可用于为特定管道及其任务生成报表的查询。 例如,下图列出了特定管道完成的所有任务的 50 百分位数、80 百分位数和 95 百分位数(以秒为单位)。
注意
本文中的示例查询需要 v3.0-preview 或更高版本的 Analytics OData 源。 共享 反馈。
| 类别 | 要求 |
|---|---|
| 访问级别 |
-
项目成员。 - 至少 基本 访问权限。 |
| 权限 | 默认情况下,项目成员有权查询 Analytics 和创建视图。 有关服务和功能启用和常规数据跟踪活动的其他先决条件的详细信息,请参阅 访问 Analytics 的权限和先决条件。 |
注意
本文假设你已阅读使用 OData 查询的示例报表概述,并且对 Power BI 有基本了解。
示例查询
查询 PipelineRunActivityResults? 实体集以返回任务持续时间信息。
注意
若要查找用于筛选或报告的可用属性,请参阅 Azure Pipelines 的元数据参考。 可以通过使用在Property下定义的任何EntityType值,或为某个NavigationPropertyBinding Path列出的任何EntitySet值来筛选查询或返回属性。 每个 EntitySet 映射到一个 EntityType,后者记录了每个属性的数据类型。
将以下Power BI查询直接复制并粘贴到 Get Data>Blank Query 窗口中。 有关详细信息,请参阅 使用 OData 查询的示例报告概述。
let
Source = OData.Feed ("https://analytics.dev.azure.com/{organization}/{project}/_odata/v3.0-preview/PipelineRunActivityResults?"
&"$apply=filter( "
&"Pipeline/PipelineName eq '{pipelinename}' "
&"and PipelineRunCompletedOn/Date ge {startdate} "
&"and (PipelineRunOutcome eq 'Succeed' or PipelineRunOutcome eq 'PartiallySucceeded') "
&"and (CanceledCount ne 1 and SkippedCount ne 1 and AbandonedCount ne 1) "
&") "
&"/compute( "
&"percentile_cont(ActivityDurationSeconds, 0.5, TaskDisplayName) as TaskDuration50thPercentileInSeconds, "
&"percentile_cont(ActivityDurationSeconds, 0.8, TaskDisplayName) as TaskDuration80thPercentileInSeconds, "
&"percentile_cont(ActivityDurationSeconds, 0.95, TaskDisplayName) as TaskDuration95thPercentileInSeconds) "
&"/groupby( "
&"(TaskDuration50thPercentileInSeconds, TaskDuration80thPercentileInSeconds,TaskDuration95thPercentileInSeconds, TaskDisplayName)) "
&"&$orderby=TaskDuration50thPercentileInSeconds desc "
,null, [Implementation="2.0",OmitValues = ODataOmitValues.Nulls,ODataVersion = 4])
in
Source
替换字符串和查询明细
请将以下字符串替换为您的值。 不要在替换中包含大括号 {} 。 例如,如果组织名称为“Fabrikam”,请替换为{organization}Fabrikam,而不是{Fabrikam}。
-
{organization}- 组织名称 -
{project}- 团队项目名称 -
{pipelinename}- 管道名称。 示例:Fabrikam hourly build pipeline -
{startdate}- 报表的起始日期。 格式:YYYY-MM-DD后接Z(UTC 指示符)。 示例:2026-09-01Z表示 2026 年 9 月 1 日。 不要用引号或方括号引起来。
查询分解
下表描述了查询的每个部分。
查询部分
描述
$apply=filter(
开始 filter() 子句。
Pipeline/PipelineName eq '{pipelinename}'
返回指定管道的管道运行。
and PipelineRunCompletedOn/Date ge {startdate}
返回指定日期或之后管道运行的任务结果。
and (PipelineRunOutcome eq 'Succeed' or PipelineRunOutcome eq 'PartiallySucceeded')
仅返回成功或部分成功的管道运行的任务结果。
and (CanceledCount ne 1 and SkippedCount ne 1 and AbandonedCount ne 1)
省略已取消、跳过或放弃的管道运行。
)
关闭filter()句。
/compute(
开始 compute() 子句。
percentile_cont(ActivityDurationSeconds, 0.5, TaskDisplayName) as TaskDuration50thPercentileInSeconds,
对于每个任务,计算与筛选条件匹配的所有任务的任务工期的第 50 百分位。
percentile_cont(ActivityDurationSeconds, 0.8, TaskDisplayName) as TaskDuration80thPercentileInSeconds,
对于每个任务,计算与筛选条件匹配的所有任务的任务工期的第 80 百分位。
percentile_cont(ActivityDurationSeconds, 0.95, TaskDisplayName) as TaskDuration95thPercentileInSeconds)
对于每个任务,计算所有与筛选条件匹配的任务工期的第 95 百分位。
/groupby(
开始 groupby() 子句。
(TaskDuration50thPercentileInSeconds, TaskDuration80thPercentileInSeconds,TaskDuration95thPercentileInSeconds, TaskDisplayName))
按任务名称和计算得出的第 50、80 和 95 百分位任务工期值进行分组。
&$orderby=TaskDuration50thPercentileInSeconds desc
按 50 百分位数持续时间最长的任务对响应进行排序。
(可选) 重命名查询
可以将默认查询标签 Query1 重命名为更有意义的标签。 在 “查询设置” 窗格中输入新名称。
更改列数据类型
从“转换”菜单中,将以下列的数据类型更改为“十进制数字”。 若要了解如何操作,请参阅 转换列数据类型。
TaskDuration50thPercentileInSecondsTaskDuration80thPercentileInSecondsTaskDuration95thPercentileInSeconds
(可选)重命名列字段
可以重命名列字段。 例如,你可以重命名以下列,使其更易于显示。 若要了解如何操作,请参阅 “重命名列字段”。
| 原始字段名称 | 重命名的字段 |
|---|---|
TaskDisplayName |
任务名称 |
TaskDuration50thPercentileInSeconds |
第 50 百分位 |
TaskDuration80thPercentileInSeconds |
第 80 百分位 |
TaskDuration95thPercentileInSeconds |
第 95 百分位 |
关闭查询并应用更改
完成所有数据转换后,从“开始”菜单中选择“关闭并应用”。 此操作将保存查询并将你返回到Power BI中的 Report 选项卡。
创建表格报表
在 Power BI 中,在 Visualizations 下,选择 Table 报表。 根据重命名列字段部分的说明,重命名这些字段。
按指定的顺序将以下字段添加到列中:
- 任务名称
- 第 50 百分位
- 第 80 百分位
- 第 95 百分位
若要更改报表标题,请从“可视化效果”窗格中选择“设置视觉画笔”图标的格式,选择“常规”,展开“标题”并替换现有文本。
下图显示了生成的报表的一部分。