管道任务工期趋势示例报告
Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2020
若要可视化任务完成特定管道所需的时间,可以创建趋势报表。 例如,下图显示了 2022 年 9 月 1 日至 12 月 15 日为特定管道完成的所有任务的第 80 百分位(以秒为单位)。
重要
Power BI 集成 和对 分析服务的 OData 源 的访问权限通常用于 Azure DevOps Services 和 Azure DevOps Server 2020 及更高版本。 本文中提供的示例查询仅适用于 Azure DevOps Server 2020 及更高版本,具体取决于 v3.0-preview 或更高版本。 我们鼓励你使用这些查询并提供反馈。
先决条件
- Access:至少是具有基本访问权限的项目的成员。
- 权限: 默认情况下,项目成员有权查询 Analytics 和创建视图。
- 有关服务和功能启用和常规数据跟踪活动的其他先决条件的详细信息,请参阅 访问 Analytics 的权限和先决条件。
注意
本文假设你阅读 了使用 OData 查询 的示例报表概述,并基本了解 Power BI。
示例查询
可以使用实体集的以下查询 PipelineRunActivityResults?
来创建不同的但类似的任务工期趋势报告。
注意
若要确定用于筛选器或报表目的的可用属性,请参阅 Azure Pipelines 的元数据参考。 可以使用 提供的 EntitySet
或 NavigationPropertyBinding Path
值下EntityType
的任何Property
值筛选查询或返回属性。 每个对应 EntitySet
一个 EntityType
。 有关每个值的数据类型的详细信息,请查看为相应 EntityType
值提供的元数据。
指定管道名称的任务持续时间趋势
将以下 Power BI 查询直接复制并粘贴到 “获取数据>空白查询” 窗口中。 有关详细信息,请参阅 使用 OData 查询的示例报告概述。
let
Source = OData.Feed ("https://analytics.dev.azure.com/{organization}/{project}/_odata/v3.0-preview/PipelineRunActivityResults?"
&"$apply=filter( "
&"Pipeline/PipelineName eq '{pipelinename}' "
&"and TaskDisplayName eq '{taskname}' "
&"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.8, PipelineRunCompletedDateSK) as TaskDuration80thPercentileInSeconds) "
&"/groupby( "
&"(TaskDuration80thPercentileInSeconds, PipelineRunCompletedOn/Date)) "
&"&$orderby=PipelineRunCompletedOn/Date asc "
,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-DDZ。 示例:2021-09-01Z
表示 2021 年 9 月 1 日。 不要将引号或括号括起来,并且对月份和日期使用两个数字。
查询明细
下表描述了查询的每个部分。
查询部件
描述
$apply=filter(
Start filter()
子句。
Pipeline/PipelineName eq '{pipelinename}'
返回特定管道的任务结果。
and TaskDisplayName eq '{taskname}'
返回特定任务的任务结果。
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)
省略已取消、跳过或放弃的管道运行。
)
Close filter()
子句。
/compute(
Start compute()
子句。
percentile_cont(ActivityDurationSeconds, 0.8, PipelineRunCompletedDateSK) as TaskDuration80thPercentileInSeconds)
对于每天,计算与筛选条件匹配的所有任务的任务工期的第 80 百分位。
/groupby(
Start groupby()
子句。
(TaskDuration80thPercentileInSeconds, PipelineRunCompletedOn/Date))
按管道运行完成日期分组,并计算第 80 百分位任务工期。
&$orderby=PipelineRunCompletedOn/Date asc
按完成日期对响应进行排序。
管道的任务持续时间趋势,指定管道 ID
可以重命名管道。 若要确保在更改管道名称时 Power BI 报表不会中断,请使用管道 ID 而不是管道名称。 可以从管道运行页的 URL 获取管道 ID。
https://dev.azure.com/{organization}/{project}/_build?definitionId={pipelineid}
将以下 Power BI 查询直接复制并粘贴到 “获取数据>空白查询” 窗口中。 有关详细信息,请参阅 使用 OData 查询的示例报告概述。
let
Source = OData.Feed ("https://analytics.dev.azure.com/{organization}/{project}/_odata/v3.0-preview/PipelineRunActivityResults?"
&"$apply=filter( "
&"Pipeline/PipelineId eq {pipelineid} "
&"and TaskDisplayName eq '{taskname}' "
&"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.8, PipelineRunCompletedDateSK) as TaskDuration80thPercentileInSeconds) "
&"/groupby( "
&"(TaskDuration80thPercentileInSeconds, PipelineRunCompletedOn/Date)) "
&"&$orderby=PipelineRunCompletedOn/Date asc "
,null, [Implementation="2.0",OmitValues = ODataOmitValues.Nulls,ODataVersion = 4])
in
Source
管道的第 50、80 和 90 百分位任务工期趋势
若要查看使用其他百分位值计算的任务工期趋势,请使用以下查询,该查询提供第 50 和第 95 百分位任务工期以及第 80 百分位。
将以下 Power BI 查询直接复制并粘贴到 “获取数据>空白查询” 窗口中。 有关详细信息,请参阅 使用 OData 查询的示例报告概述。
let
Source = OData.Feed ("https://analytics.dev.azure.com/{organization}/{project}/_odata/v3.0-preview/PipelineRunActivityResults?"
&"$apply=filter( "
&"Pipeline/PipelineName eq '{pipelinename}' "
&"and TaskDisplayName eq '{taskname}' "
&"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, PipelineRunCompletedDateSK) as TaskDuration50thPercentileInSeconds, "
&"percentile_cont(ActivityDurationSeconds, 0.8, PipelineRunCompletedDateSK) as TaskDuration80thPercentileInSeconds, "
&"percentile_cont(ActivityDurationSeconds, 0.95, PipelineRunCompletedDateSK) as TaskDuration95thPercentileInSeconds) "
&"/groupby( "
&"(TaskDuration50thPercentileInSeconds, TaskDuration80thPercentileInSeconds, TaskDuration95thPercentileInSeconds, PipelineRunCompletedOn/Date)) "
&"&$orderby=PipelineRunCompletedOn/Date asc "
,null, [Implementation="2.0",OmitValues = ODataOmitValues.Nulls,ODataVersion = 4])
in
Source
按分支筛选的管道的任务持续时间趋势
若要查看特定 分支任务的持续时间趋势,请使用以下查询。 若要创建报表,请执行以下步骤:
- 展开
Branch
到Branch.BranchName
- 更改列数据类型
- 创建折线图报表
- 从“可视化效果”窗格中选择切片器,然后将切片器字段添加到
Branch.BranchName
切片器字段 - 从切片器中选择要查看其任务工期趋势的分支。
将以下 Power BI 查询直接复制并粘贴到 “获取数据>空白查询” 窗口中。 有关详细信息,请参阅 使用 OData 查询的示例报告概述。
let
Source = OData.Feed ("https://analytics.dev.azure.com/{organization}/{project}/_odata/v3.0-preview/PipelineRunActivityResults?"
&"$apply=filter( "
&" Pipeline/PipelineName eq '{pipelinename}' "
&" and TaskDisplayName eq '{taskname}' "
&" 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.8, BranchSK, PipelineRunCompletedDateSK) as TaskDuration80thPercentileInSeconds) "
&"/groupby( "
&" (TaskDuration80thPercentileInSeconds, Branch/BranchName, PipelineRunCompletedOn/Date)) "
&"&$orderby=PipelineRunCompletedOn/Date asc "
,null, [Implementation="2.0",OmitValues = ODataOmitValues.Nulls,ODataVersion = 4])
in
Source
所有管道任务的任务持续时间趋势
若要查看单个报表中所有管道任务的任务工期趋势,请使用以下查询。 若要创建报表,请执行以下步骤:
将以下 Power BI 查询直接复制并粘贴到 “获取数据>空白查询” 窗口中。 有关详细信息,请参阅 使用 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.8, TaskDisplayName, PipelineRunCompletedDateSK) as TaskDuration80thPercentileInSeconds) "
&"/groupby( "
&"(TaskDuration80thPercentileInSeconds, TaskDisplayName, PipelineRunCompletedOn/Date)) "
&"&$orderby=PipelineRunCompletedOn/Date asc "
,null, [Implementation="2.0",OmitValues = ODataOmitValues.Nulls,ODataVersion = 4])
in
Source
(可选) 重命名查询
可以将默认查询标签 Query1 重命名为更有意义的标签。 只需在 “查询设置” 窗格中输入新名称。
展开 Power Query 编辑器 中的列
在创建报表之前,需要展开返回包含多个字段的记录的列。 在此实例中,需要展开 PipelineRunCompletedOn
列以将其平展到 PipelineRunCompletedOn.Date
。
若要了解如何展开工作项,请参阅 转换分析数据以生成 Power BI 报表。
更改列数据类型
从“ 转换 ”菜单中,将列的 TaskDuration80thPercentileInSeconds
数据类型更改为 十进制数字。 若要了解如何操作,请参阅 转换列数据类型。
(可选)重命名列字段
可以重命名列字段。 例如,可以将列 TaskDuration80thPercentileInSeconds
重命名为 80th Percentile
。 若要了解如何操作,请参阅 “重命名列字段”。
关闭查询并应用更改
完成所有数据转换后,从“开始”菜单中选择“关闭和应用”以保存查询并返回到 Power BI 中的“报表”选项卡。
创建折线图报表
在 Power BI 的“可视化效果”下,选择折线图报表。
添加到
PipelineRunCompletedOn.Date
X 轴。 右键单击该字段,然后选择 PipelineRunCompletedOn.Date 代替 日期层次结构。添加到
TaskDuration80thPercentileInSeconds
Y 轴,然后右键单击它以确保 已选择 Sum 。若要更改报表标题,请从“可视化效果”窗格中选择“设置视觉画笔”图标的格式,选择“常规”,展开“标题”并替换现有文本。
下图显示了生成的报表。