Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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.