Exemple de rapport de durée de tâche de pipeline
Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2020
Combien de temps faut-il pour effectuer différentes tâches ? Cet article fournit les requêtes à partir desquelles vous pouvez générer un rapport pour un pipeline spécifique et ses tâches. Par exemple, l’image suivante répertorie le 50e, le 80e et le 95e centile en secondes pour toutes les tâches effectuées pour un pipeline spécifique du 1er septembre au 15 décembre 2022.
Important
L’intégration de Power BI et l’accès au flux OData du service Analytics sont généralement disponibles pour Azure DevOps Services et Azure DevOps Server 2020 et versions ultérieures. Les exemples de requêtes fournis dans cet article sont valides uniquement sur Azure DevOps Server 2020 et versions ultérieures, et dépendent de la version v3.0-preview ou ultérieure. Nous vous encourageons à utiliser ces requêtes et à nous fournir des commentaires.
Prérequis
- Accès : être membre d’un projet avec au moins un accès de base .
- Autorisations : par défaut, les membres du projet ont l’autorisation d’interroger Analytics et de créer des vues.
- Pour plus d’informations sur les autres prérequis concernant l’activation du service et des fonctionnalités et les activités de suivi des données générales, consultez Autorisations et conditions préalables pour accéder à Analytics.
Remarque
Cet article part du principe que vous lisez la vue d’ensemble des exemples de rapports à l’aide de requêtes OData et que vous avez une compréhension de base de Power BI.
Exemples de requêtes
Vous interrogez l’entité PipelineRunActivityResults?
définie pour retourner les informations de durée de la tâche.
Remarque
Pour déterminer les propriétés disponibles à des fins de filtre ou de rapport, consultez la référence des métadonnées pour Azure Pipelines. Vous pouvez filtrer vos requêtes ou renvoyer des propriétés à l’aide de l’une Property
des valeurs sous ou EntityType
des NavigationPropertyBinding Path
valeurs disponibles avec un EntitySet
. Chaque EntitySet
correspond à un EntityType
. Pour plus d’informations sur le type de données de chaque valeur, passez en revue les métadonnées fournies pour le type de données correspondant EntityType
.
Copiez et collez la requête Power BI suivante directement dans la fenêtre Obtenir une requête vide de données>. Pour plus d’informations, consultez Vue d’ensemble des exemples de rapports à l’aide de requêtes 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
Chaînes de substitution et répartition des requêtes
Remplacez les chaînes suivantes par vos valeurs. N’incluez pas de crochets {} avec votre substitution. Par exemple, si le nom de votre organisation est « Fabrikam », remplacez par {organization}
Fabrikam
, et non {Fabrikam}
par .
{organization}
- Nom de votre organisation{project}
- Nom de votre projet d’équipe{pipelinename}
- Nom de votre pipeline. Exemple :Fabrikam hourly build pipeline
{startdate}
- Date de démarrage de votre rapport. Format : AAAA-MM-DDZ. Exemple :2021-09-01Z
représente le 1er septembre 2021. Ne placez pas entre guillemets ou crochets et utilisez deux chiffres pour les deux, mois et date.
Répartition des requêtes
Le tableau suivant décrit chaque partie de la requête.
Composant de requête
Description
$apply=filter(
Clause Start filter()
.
Pipeline/PipelineName eq '{pipelinename}'
Retourne des exécutions de pipeline pour le pipeline spécifié.
and PipelineRunCompletedOn/Date ge {startdate}
Retourne les résultats de la tâche pour une exécution de pipeline à la date spécifiée ou après celle-ci.
and (PipelineRunOutcome eq 'Succeed' or PipelineRunOutcome eq 'PartiallySucceeded')
Retourne les résultats des tâches pour les exécutions de pipeline réussies ou partiellement réussies.
and (CanceledCount ne 1 and SkippedCount ne 1 and AbandonedCount ne 1)
Omettez les exécutions de pipeline qui ont été annulées, ignorées ou abandonnées.
)
Fermez la filter()
clause.
/compute(
Clause Start compute()
.
percentile_cont(ActivityDurationSeconds, 0.5, TaskDisplayName) as TaskDuration50thPercentileInSeconds,
Pour chaque tâche, calculez le 50e centile des durées de tâche pour toutes les tâches qui correspondent aux critères de filtre.
percentile_cont(ActivityDurationSeconds, 0.8, TaskDisplayName) as TaskDuration80thPercentileInSeconds,
Pour chaque tâche, calculez le 80e centile des durées de tâche pour toutes les tâches qui correspondent aux critères de filtre.
percentile_cont(ActivityDurationSeconds, 0.95, TaskDisplayName) as TaskDuration95thPercentileInSeconds)
Pour chaque tâche, calculez le 95e centile des durées de tâche pour toutes les tâches qui correspondent aux critères de filtre.
/groupby(
Démarrez la groupby()
clause.
(TaskDuration50thPercentileInSeconds, TaskDuration80thPercentileInSeconds,TaskDuration95thPercentileInSeconds, TaskDisplayName))
Regrouper par tâche d’exécution du pipeline et durée calculée de la tâche de 50e centile, 80e durée de tâche de centile et 95e durée de tâche de centile.
&$orderby=TaskDuration50thPercentileInSeconds desc
Commandez la réponse par tâche ayant une durée de 50e centile la plus élevée.
(Facultatif) Renommer la requête
Vous pouvez renommer l’étiquette de requête par défaut , Query1, en quelque chose de plus significatif. Entrez simplement un nouveau nom dans le volet Paramètres de requête .
Modifier le type de données de colonne
Dans le menu Transformer , modifiez le type de données des colonnes suivantes pour Decimal Number**.
savoir comment, consultez Transformer un type de données de colonne.
- TaskDuration80thPercentileInSeconds
- TaskDuration80thPercentileInSeconds
- TaskDuration95thPercentileInSeconds
.
(Facultatif) Renommer des champs de colonne
Vous pouvez renommer des champs de colonne. Par exemple, vous pouvez renommer les colonnes suivantes afin qu’elles soient plus conviviales. Pour savoir comment procéder, consultez Renommer les champs de colonne.
Nom du champ d’origine | Champ renommé |
---|---|
TaskDisplayName |
Nom de la tâche |
TaskDuration50thPercentileInSeconds |
50e centile |
TaskDuration80thPercentileInSeconds |
80e centile |
TaskDuration95thPercentileInSeconds |
95e centile |
Fermez la requête et appliquez vos modifications
Une fois que vous avez terminé toutes vos transformations de données, choisissez Fermer & Appliquer dans le menu Accueil pour enregistrer la requête et revenir à l’onglet Rapport dans Power BI.
Créer le rapport de table
Dans Power BI, sous Visualisations, choisissez le rapport Table . Les champs ont été renommés comme indiqué dans la section Renommer les champs de colonne.
Ajoutez les champs suivants aux colonnes dans l’ordre spécifié.
- Nom de la tâche
- 50e centile
- 80e centile
- 95e centile
Pour modifier le titre du rapport, sélectionnez l’icône Mettre en forme votre pinceau visuel dans le volet Visualisations, sélectionnez Général, Développez Titre et remplacez le texte existant.
L’image suivante montre une partie du rapport résultant.