Partager via


Agréger des données de suivi de travail à l’aide d’Analytics

Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022

Vous pouvez agréger des données de suivi de travail à l’aide d’Analytics avec OData de deux manières : utiliser $count pour des totaux simples ou utiliser l’extension d’agrégation OData $apply pour retourner des résultats groupés, filtrés et calculés au format JSON.

Conseil / Astuce

Vous pouvez utiliser l’IA pour vous aider à effectuer cette tâche plus loin dans cet article, ou voir Activer l’aide à l’IA avec Azure DevOps MCP Server pour commencer.

Cet article s’appuie sur construire des requêtes OData pour Analytics et définir des requêtes de base à l’aide d’OData Analytics. Les exemples se concentrent sur les données d’élément de travail, mais les mêmes principes s’appliquent à d’autres jeux d’entités. Pour les requêtes de nombre simple, consultez Obtenir le nombre d’éléments.

Remarque

Le service Analytics est automatiquement activé et pris en charge en production pour tous les services dans Azure DevOps Services. L’intégration de Power BI et l’accès au flux OData du service Analytics sont généralement disponibles. Vous êtes encouragé à utiliser le flux OData Analytics et à fournir des commentaires.

Les données disponibles dépendent de la version. La dernière version prise en charge de l’API OData est v2.0, et la dernière version préliminaire est v4.0-preview. Pour plus d’informations, consultez gestion des versions de l’API OData.

Remarque

Le service Analytics est automatiquement installé et pris en charge en production pour toutes les nouvelles collections de projets pour Azure DevOps Server 2020 et versions ultérieures. L’intégration de Power BI et l’accès au flux OData du service Analytics sont généralement disponibles. Vous êtes encouragé à utiliser le flux OData Analytics et à fournir des commentaires. Si vous effectuez une mise à niveau à partir d’Azure DevOps Server 2019, vous pouvez installer le service Analytics pendant la mise à niveau.

Les données disponibles dépendent de la version. La dernière version prise en charge de l’API OData est v2.0, et la dernière version préliminaire est v4.0-preview. Pour plus d’informations, consultez gestion des versions de l’API OData.

Conditions préalables

Catégorie Exigences
niveaux d’accès - membre du projet.
- Au moins 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 conditions préalables 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.

À propos de l’extension d’agrégation $apply

OData fournit une extension d’agrégation qui introduit le mot clé $apply pour le regroupement, le filtrage et le calcul des valeurs d’agrégation sur vos données de suivi du travail. Les sections suivantes montrent comment utiliser $apply avec aggregate, , groupbyfilteret compute. Pour obtenir la spécification complète, consultez l’extension OData pour l’agrégation de données.

Agréger des données à l’aide de $apply

Ajoutez le $apply jeton à votre URL de requête pour déclencher des agrégations. La syntaxe de base est la suivante :

/{entitySetName}?$apply=aggregate({columnToAggregate} with {aggregationType} as {newColumnName})

Paramètre Description
{entitySetName} Entité définie à interroger, par exemple WorkItems.
{columnToAggregate} Champ à agréger, tel que RemainingWork.
{aggregationType} Fonction d’agrégation : sum, , minmax, average, ou countdistinct.
{newColumnName} Alias de la colonne de résultat agrégée.

Les exemples suivants montrent les opérations courantes aggregate .

Renvoie la somme de tout le travail restant

https://analytics.dev.azure.com/{OrganizationName}/_odata/{version}/WorkItems?
  $apply=aggregate(RemainingWork with sum as SumOfRemainingWork)

Renvoyer le dernier identifiant d’élément de travail

https://analytics.dev.azure.com/{OrganizationName}/_odata/{version}/WorkItems?
  $apply=aggregate(WorkItemId with max as MaxWorkItemId)

Résultats de groupe à l’aide de groupby

La groupby clause fonctionne comme SQL GROUP BY : elle décompose les résultats agrégés par une ou plusieurs propriétés.

Compter les éléments de travail par type

https://analytics.dev.azure.com/{OrganizationName}/_odata/{version}/WorkItems?
  $apply=groupby((WorkItemType), aggregate($count as Count))

Retourne un résultat tel que :

{
  "value": [
    { "WorkItemType": "Bug", "Count": 3 },
    { "WorkItemType": "Product Backlog Item", "Count": 13 }
  ]
}

Regrouper par plusieurs propriétés

Ajoutez d’autres propriétés entre groupby parenthèses pour créer des répartitions plus fines :

https://analytics.dev.azure.com/{OrganizationName}/_odata/{version}/WorkItems?
  $apply=groupby((WorkItemType, State), aggregate($count as Count))

Retourne une ligne pour chaque combinaison unique de type et d’état (par exemple, Bug/Active, Bug/Commit, Product Backlog Item/Active).

Regrouper à travers les entités

Vous pouvez regrouper des entités associées à l’aide des propriétés de navigation. Par exemple, pour compter les zones par projet :

https://analytics.dev.azure.com/{OrganizationName}/_odata/{version}/Areas?
  $apply=groupby((Project/ProjectName), aggregate($count as Count))

Filtrer les résultats agrégés

Utilisez filter() à l'intérieur de $apply pour affiner les données avant ou après l’agrégation. Chaînez plusieurs filtres à l'aide de / (pipe) et placez le filtre le plus sélectif en premier pour des performances optimales.

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))

Remarque

La groupby clause est facultative. Utilisez-la aggregate seule pour retourner une valeur unique.

Agréger plusieurs champs dans un seul appel

Répertoriez plusieurs champs à l’intérieur d’une clause unique aggregate , séparées par des virgules, pour éviter des allers-retours supplémentaires.

/WorkItems?$apply=aggregate(CompletedWork with sum as SumOfCompletedWork, RemainingWork with sum as SumOfRemainingWork)

Returns:

{
  "value": [
    { "SumOfCompletedWork": 1525841.29, "SumOfRemainingWork": 73842.39 }
  ]
}

Calculer les propriétés calculées

Acheminer les résultats agrégés dans compute() pour dériver de nouvelles valeurs à l’aide d’expressions arithmétiques (div, add, sub, mul). L’exemple suivant calcule le pourcentage de travail terminé :

/WorkItems?$apply=aggregate(CompletedWork with sum as SumOfCompletedWork, RemainingWork with sum as SumOfRemainingWork)/compute(SumOfCompletedWork div (SumOfCompletedWork add SumOfRemainingWork) as DonePercentage)

Returns:

{
  "value": [
    { "DonePercentage": 0.9676, "SumOfCompletedWork": 1514698.34, "SumOfRemainingWork": 50715.95 }
  ]
}

Créer une requête de diagramme de flux cumulé

La requête suivante combine filter, groupbyet aggregate par rapport à l’ensemble WorkItemBoardSnapshot d’entités pour produire des données pour un diagramme de flux cumulé dans Power BI ou Excel.

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

Cette requête applique des filtres sur une plage de dates, ainsi que sur un tableau et une équipe spécifiques, regroupe les résultats par date et par colonne du tableau, et retourne un décompte par groupe. Returns:

{
  "value": [
    { "DateValue": "2015-07-16T00:00:00-07:00", "ColumnName": "Completed", "Count": 324 },
    { "DateValue": "2015-07-16T00:00:00-07:00", "ColumnName": "In Progress", "Count": 5 }
  ]
}

Conseil / Astuce

Moins il y a de lignes renvoyées, plus Power BI ou Excel s'actualise rapidement. Utilisez des plages de dates précises ainsi que des filtres spécifiques pour les tableaux et les équipes afin de réduire l'ensemble de résultats.

Utiliser l’IA pour agréger les données de suivi du travail

Si vous configurez le serveur MCP Azure DevOps, vous pouvez demander à votre assistant IA de récupérer des données d’élément de travail en temps réel à partir de votre organisation Azure DevOps et de vous aider à rédiger ou dépanner des requêtes d’agrégation OData $apply Analytics basées sur ces données.

Tâche Exemple d’invite
Nombre par état In <OrganizationName>, draft an Analytics OData $apply query that counts work items grouped by State in <ProjectName>. Use placeholders for <ODataVersion> and any filters I need.
Compter par type et état Create an Analytics OData $apply query for <OrganizationName> that groups WorkItems by WorkItemType and State and returns a count for each group in <ProjectName>.
Filtrer puis agréger Write an Analytics OData query that filters WorkItems to bugs with Priority = 1 in <ProjectName>, then groups by Area/AreaPath and State and returns counts.
Somme restante et travail terminé Generate an Analytics OData $apply query that filters to Iteration/IterationPath startswith '<IterationPath>' in <ProjectName>, then returns SumOfCompletedWork and SumOfRemainingWork.
Agréger à travers les équipes Help me create an Analytics OData $apply query for WorkItemBoardSnapshot that filters to BoardName '<BoardName>' and Team/TeamName '<TeamName>' in <ProjectName>, then groups by DateValue and ColumnName and returns Count.
Expliquer chaque clause Explain what each part of this $apply query does and how to adjust it for a different iteration: <ODataQueryOrUrl>.
Déboguer les erreurs de $apply This Analytics OData query returns a 400 error. Diagnose the $apply syntax and suggest a corrected query: <ODataQueryOrUrl>.
Valider les résultats Given this Analytics OData query for <OrganizationName>/<ProjectName>: <ODataQueryOrUrl>, tell me what columns and shape of JSON to expect back, and what common mistakes to check if results look wrong.

Conseil / Astuce

Si vous utilisez Visual Studio Code, le mode agent est particulièrement utile pour effectuer une itération sur les requêtes d’agrégation : affinement des filtres, résolution des problèmes $apply de syntaxe et validation des résultats.

Étape suivante