Pipeline pass rate trend sample report
Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2020
This article shows you how to create a report that shows a pipeline's daily pass rate trend. Pass rate of a pipeline is defined as the percentage of successful pipeline runs to the total pipeline runs. It's similar to the 'Pass rate trend' chart of the Pipeline pass rate report. The following image shows an example of such a trend.
Important
Power BI integration and access to the OData feed of the Analytics Service are generally available for Azure DevOps Services and Azure DevOps Server 2020 and later versions. The sample queries provided in this article are valid only against Azure DevOps Server 2020 and later versions, and depend on v3.0-preview or later version. We encourage you to use these queries and provide us feedback.
Prerequisites
- Access level: You must be a member of a project with Basic access or higher.
- Permission: By default, project members have permission to query Analytics and create views.
- For more information about other prerequisites regarding service and feature enablement and general data tracking activities, see Permissions and prerequisites to access Analytics.
Note
This article assumes you've read Overview of Sample Reports using OData Queries and have a basic understanding of Power BI.
Sample queries
You can use the following queries of the PipelineRuns
entity set to create different but similar pass rate trend reports.
Note
To determine available properties for filter or report purposes, see Metadata reference for Azure Pipelines. You can filter your queries or return properties using any of the Property
values under an EntityType
or NavigationPropertyBinding Path
values available with an EntitySet
. Each EntitySet
corresponds to an EntityType
. For more information about the data type of each value, review the metadata provided for the corresponding EntityType
.
Pass rate trend for a named pipeline
The following queries return the pipeline runs for a specific pipeline from a specified start date.
You can paste the Power BI query listed below directly into the Get Data->Blank Query window. For more information, review Overview of sample reports using OData queries.
let
Source = OData.Feed ("https://analytics.dev.azure.com/{organization}/{project}/_odata/v3.0-preview/PipelineRuns?"
&"$apply=filter( "
&"Pipeline/PipelineName eq '{pipelineName}' "
&"and CompletedDate ge {startdate} "
&"and CanceledCount ne 1 "
&") "
&"/groupby( "
&"(CompletedOn/Date), "
&"aggregate "
&"($count as TotalCount, "
&"SucceededCount with sum as SucceededCount , "
&"FailedCount with sum as FailedCount, "
&"PartiallySucceededCount with sum as PartiallySucceededCount)) "
&"/compute( "
&"SucceededCount mul 100.0 div TotalCount as PassRate, "
&"FailedCount mul 100.0 div TotalCount as FailRate, "
&"PartiallySucceededCount mul 100.0 div TotalCount as PartiallySuccessfulRate) "
&"&$orderby=CompletedOn/Date asc "
,null, [Implementation="2.0",OmitValues = ODataOmitValues.Nulls,ODataVersion = 4])
in
Source
Substitution strings and query breakdown
Substitute the following strings with your values. Don't include brackets {} with your substitution. For example if your organization name is "Fabrikam", replace {organization}
with Fabrikam
, not {Fabrikam}
.
{organization}
- Your organization name{project}
- Your team project name{pipelinename}
- Your pipeline name. Example:Fabrikam hourly build pipeline
{startdate}
- The date to start your report. Format: YYYY-MM-DDZ. Example:2021-09-01Z
represents September 1, 2021. Don't enclose in quotes or brackets and use two digits for both, month and date.
Query breakdown
The following table describes each part of the query.
Query part
Description
$apply=filter(
Start filter()
clause.
Pipeline/PipelineName eq '{pipelinename}'
Return pipeline runs for the specified pipeline.
and CompletedDate ge {startdate}
Return pipeline runs on or after the specified date.
and CanceledCount ne 1
Omit canceled pipeline runs.
)
Close filter()
clause.
/groupby(
Start groupby()
clause.
(CompletedOn/Date),
Group by date of completion of pipeline run.
aggregate
Start aggregate
clause for all the pipeline runs matching the filter criteria.
($count as TotalCount,
Count the total number of runs as TotalCount
.
SucceededCount with sum as SucceededCount ,
Count the number of successful runs as SucceededCount
.
FailedCount with sum as FailedCount,
Count the number of failed runs as FailedCount
.
PartiallySucceededCount with sum as PartiallySucceededCount))
Count the number of partially successful runs as PartiallySucceededCount
. Close aggregate()
and groupby()
clauses.
/compute(
Start of compute()
clause.
SucceededCount mul 100.0 div TotalCount as PassRate,
Calculate PassRate
for each day by dividing number of successful runs by number of total runs.
FailedCount mul 100.0 div TotalCount as FailRate,
Calculate FailRate
for each day by dividing number of failed runs by number of total runs.
PartiallySucceededCount mul 100.0 div TotalCount as PartiallySuccessfulRate)
Calculate PartiallySuccessfulRate
for each day by dividing number of partially successful runs by number of total runs.
&$orderby=CompletedOn/Date asc
Order the result in ascending order based on date of pipeline run.
Pass rate trend for a pipeline ID
Pipelines can be renamed. To ensure that the Power BI reports don't break when the pipeline name is changed, use pipeline ID rather than pipeline name. You can obtain the pipeline ID from the URL of the pipelines runs page.
https://dev.azure.com/{organization}/{project}/_build?definitionId={pipelineid}
The following queries return the pipeline runs for a specific pipeline ID from a specified start date.
You can paste the Power BI query listed below directly into the Get Data->Blank Query window. For more information, review Overview of sample reports using OData queries.
let
Source = OData.Feed ("https://analytics.dev.azure.com/{organization}/{project}/_odata/v3.0-preview/PipelineRuns?"
&"$apply=filter( "
&"PipelineId eq {pipelineId} "
&"and CompletedDate ge {startdate} "
&"and CanceledCount ne 1 "
&") "
&"/groupby( "
&"(CompletedOn/Date), "
&"aggregate "
&"($count as TotalCount, "
&"SucceededCount with sum as SucceededCount , "
&"FailedCount with sum as FailedCount, "
&"PartiallySucceededCount with sum as PartiallySucceededCount)) "
&"/compute( "
&"SucceededCount mul 100.0 div TotalCount as PassRate, "
&"FailedCount mul 100.0 div TotalCount as FailRate, "
&"PartiallySucceededCount mul 100.0 div TotalCount as PartiallySuccessfulRate) "
&"&$orderby=CompletedOn/Date asc "
,null, [Implementation="2.0",OmitValues = ODataOmitValues.Nulls,ODataVersion = 4])
in
Source
Pass rate trend, filter by branch
You may want to view the pass rate trend of a pipeline for a particular branch only. To create the report, do the following extra steps along with what is outlined in the Change column data type and Create the Line chart report sections.
- Expand
Branch
intoBranch.BranchName
. - Select Power BI Visualization Slicer and add
Branch.BranchName
to the slicer's Field. - Select the branch from the slicer for which you need to see the pass rate trend.
You can paste the Power BI query listed below directly into the Get Data->Blank Query window. For more information, review Overview of sample reports using OData queries.
let
Source = OData.Feed ("https://analytics.dev.azure.com/{organization}/{project}/_odata/v3.0-preview/PipelineRuns?"
&"$apply=filter( "
&"Pipeline/PipelineName eq '{pipelineName}' "
&"and CompletedDate ge {startdate} "
&"and CanceledCount ne 1 "
&") "
&"/groupby( "
&"(Branch/BranchName, CompletedOn/Date), "
&"aggregate "
&"($count as TotalCount, "
&"SucceededCount with sum as SucceededCount , "
&"FailedCount with sum as FailedCount, "
&"PartiallySucceededCount with sum as PartiallySucceededCount)) "
&"/compute( "
&"SucceededCount mul 100.0 div TotalCount as PassRate, "
&"FailedCount mul 100.0 div TotalCount as FailRate, "
&"PartiallySucceededCount mul 100.0 div TotalCount as PartiallySuccessfulRate) "
&"&$orderby=CompletedOn/Date asc "
,null, [Implementation="2.0",OmitValues = ODataOmitValues.Nulls,ODataVersion = 4])
in
Source
Pass rate trend, filter by build reason
You may want to view the pass rate trend of a pipeline for only specific Build Reasons (Manual / BatchedCI, Pull Request, and so on). To create the report, do the following extra steps along with what is outlined in the Change column data type and Create the Line chart report sections.
- Select Slicer from the Visualizations pane and add the
RunReason
to the slicer's Field. - Select the pipeline from the slicer for which you need to see the pass rate trend.
You can paste the Power BI query listed below directly into the Get Data->Blank Query window. For more information, review Overview of sample reports using OData queries.
let
Source = OData.Feed ("https://analytics.dev.azure.com/{organization}/{project}/_odata/v3.0-preview/PipelineRuns?"
&"$apply=filter( "
&"Pipeline/PipelineName eq '{pipelineName}' "
&"and CompletedDate ge {startdate} "
&"and CanceledCount ne 1 "
&") "
&"/groupby( "
&"(RunReason, CompletedOn/Date), "
&"aggregate "
&"($count as TotalCount, "
&"SucceededCount with sum as SucceededCount , "
&"FailedCount with sum as FailedCount, "
&"PartiallySucceededCount with sum as PartiallySucceededCount)) "
&"/compute( "
&"SucceededCount mul 100.0 div TotalCount as PassRate, "
&"FailedCount mul 100.0 div TotalCount as FailRate, "
&"PartiallySucceededCount mul 100.0 div TotalCount as PartiallySuccessfulRate) "
&"&$orderby=CompletedOn/Date asc "
,null, [Implementation="2.0",OmitValues = ODataOmitValues.Nulls,ODataVersion = 4])
in
Source
Pass rate trend for all project pipelines
Use the following queries to view the pass rate trend for all the pipelines of the project in a single report. To create the report, do the following extra steps along with what is outlined in the Change column data type and Create the Line chart report sections.
- Expand
Pipeline
intoPipeline.PipelineName
. - Select Slicer from the Visualizations pane, and add the field
Pipeline.PipelineName
to the slicer's Field. - Select the Build pipeline from the slicer for which you need to see the pass rate trend.
Refer Outcome summary for all pipelines sample report that has detailed similar steps as required here.
You can paste the Power BI query listed below directly into the Get Data->Blank Query window. For more information, review Overview of sample reports using OData queries.
let
Source = OData.Feed ("https://analytics.dev.azure.com/{organization}/{project}/_odata/v3.0-preview/PipelineRuns?"
&"$apply=filter( "
&"CompletedDate ge {startdate} "
&"and CanceledCount ne 1 "
&") "
&"/groupby( "
&"(Pipeline/PipelineName, CompletedOn/Date), "
&"aggregate "
&"($count as TotalCount, "
&"SucceededCount with sum as SucceededCount , "
&"FailedCount with sum as FailedCount, "
&"PartiallySucceededCount with sum as PartiallySucceededCount)) "
&"/compute( "
&"SucceededCount mul 100.0 div TotalCount as PassRate, "
&"FailedCount mul 100.0 div TotalCount as FailRate, "
&"PartiallySucceededCount mul 100.0 div TotalCount as PartiallySuccessfulRate) "
&"&$orderby=CompletedOn/Date asc "
,null, [Implementation="2.0",OmitValues = ODataOmitValues.Nulls,ODataVersion = 4])
in
Source
(Optional) Rename query
You can rename the default query label, Query1, to something more meaningful. Simply enter a new name from the Query Settings pane.
Expand columns in Power Query Editor
Prior to creating the report, you'll need to expand columns that return records containing several fields. In this instance, you'll want to expand the CompletedOn
column to flatten it to CompletedOn.Date
.
To learn how to expand work items, see Transform Analytics data to generate Power BI reports.
Change column data type
From the Transform menu change the data type for the following columns. To learn how, see Transform a column data type.
PassRate
,FailRate
andPartiallySuccessfulRate
columns to Decimal Number.`TotalCount
to Whole Number.
(Optional) Rename column fields
You can rename column fields. For example, you can rename the column Pipeline.PipelineName
to Pipeline Name
, or TotalCount
to Total Count
. To learn how, see Rename column fields.
Close the query and apply your changes
Once you've completed all your data transformations, choose Close & Apply from the Home menu to save the query and return to the Report tab in Power BI.
Create the Line chart report
In Power BI, under Visualizations, choose the Line chart report.
Add
CompletedOn.Date
to X-Axis. Right-click the field and choose CompletedOn.Date.Add
PassRate
to Y-Axis, and right-click it to ensure Sum is selected.To change the report title, select the Format your visual paint-brush icon from the Visualizations pane, select General, expand Title, and replace the existing text.
The following image shows the resulting report.