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
Analytics expose les données de projet Azure DevOps via un point de terminaison OData que vous pouvez interroger à partir de n’importe quel navigateur web ou outil client pris en charge . Ce tutoriel vous guide tout au long de la structure d’URL de requête ( métadonnées, jeux d’entités et options de requête) pour commencer à générer vos propres requêtes. Pour obtenir une comparaison des outils de requête, consultez Outils de requête Analytics.
Dans ce tutoriel, vous allez apprendre à :
- Interrogez les métadonnées Analytics.
- Interrogez un jeu d’entités.
- Appliquez les options de requête dans l’ordre recommandé.
- Gérer la pagination côté serveur.
Conseil
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.
Prérequis
| Catégorie | Spécifications |
|---|---|
| Niveaux d’accès |
-
Membre du projet. Au moins un accès de base. |
| Permissions | 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. |
Interroger les métadonnées
Pour récupérer le modèle d’entité OData, ajoutez $metadata l’URL racine du service Analytics. Les métadonnées décrivent les éléments de données que vous pouvez utiliser dans les requêtes, notamment :
- Types d’entités, jeux d’entités et conteneurs
- Propriétés et propriétés de navigation
- Clés de substitution et listes énumérées
- Fonctions de filtre prises en charge (
Org.OData.Capabilities.V1.FilterFunctions) - Agrégations prises en charge (
Org.OData.Aggregation.V1.ApplySupported) - Type de support Batch (
Org.OData.Capabilities.V1.BatchSupportType)
Entrez l’URL suivante dans un navigateur web. Remplacez <OrganizationName> et <ProjectName> par vos valeurs. Omettez le nom du projet pour retourner les métadonnées pour l’ensemble de l’organisation.
https://analytics.dev.azure.com/<OrganizationName>/<ProjectName>/_odata/version/$metadata
Par exemple, la requête suivante retourne des métadonnées pour l’organisation fabrikam :
https://analytics.dev.azure.com/fabrikam/_odata/v4.0-preview/$metadata
Entrez l’URL suivante dans un navigateur web. Remplacez <ServerName>, <CollectionName> et <ProjectName> par vos valeurs. Omettez le nom du projet pour renvoyer les métadonnées de la collection entière.
https://<ServerName>/<CollectionName>/<ProjectName>/_odata/version/$metadata
Par exemple, la requête suivante retourne des métadonnées pour le fabrikam serveur et son DefaultCollection:
https://fabrikam/DefaultCollection/_odata/v4.0-preview/$metadata
Remarque
La dernière version d’OData d’Analytics est v4.0-preview. Utilisez cette version pour toutes les requêtes sur Azure DevOps. Pour plus d’informations sur les versions d’Analytics et les données disponibles, consultez Le modèle de données pour Analytics.
Interpréter la réponse aux métadonnées
Le point de terminaison de métadonnées retourne un document XML qui contient deux schémas principaux :
-
Microsoft.VisualStudio.Services.Analytics.Model— définit les types d’entités, les types énumérés et leurs membres. -
Default: définit des conteneurs d’entités, des jeux d’entités et des fonctions de filtre, de transformation et d’agrégation OData prises en charge.
L’exemple suivant montre la structure de haut niveau :
<?xml version="1.0" encoding="UTF-8"?>
<edmx:Edmx xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx" Version="4.0">
<edmx:DataServices>
<Schema xmlns="http://docs.oasis-open.org/odata/ns/edm" Namespace="Microsoft.VisualStudio.Services.Analytics.Model">
<EntityType Name="Entity Name"/>
</Schema>
<Schema xmlns="http://docs.oasis-open.org/odata/ns/edm" Namespace="Default">
<EntityContainer Name="Container"/>
</Schema>
</edmx:DataServices>
</edmx:Edmx>
Conseil
Certains navigateurs ne mettent pas en forme XML pour la lisibilité. Recherchez en ligne un formateur XML gratuit ou utilisez la fonction de recherche de votre navigateur pour rechercher des noms d’entités spécifiques dans la sortie brute.
Pour plus d'informations, consultez les métadonnées OData Analytics.
Propriétés générales et propriétés de navigation
Les métadonnées de chaque type d’entité répertorient deux types de membres que vous pouvez utiliser dans les requêtes :
-
Propriétés (
Property) : correspond aux champs d’élément de travail et aux données spécifiques à Analytics, telles queLeadTimeDaysetCycleTimeDays. Utilisez les propriétés dans$select,$filteret$orderbyclauses. -
Propriétés de navigation (
NavigationProperty) : lien vers des jeux d’entités connexes tels queRevisions, ,LinksChildren,Parent, et .TeamsUtilisez les propriétés de navigation pour filtrer par des entités associées telles que des chemins d’itération, des chemins de zone ou des équipes, et dans les clauses$expand.
L’extrait de code suivant montre une vue partielle des métadonnées d’entité WorkItem :
<Key>
<PropertyRef Name="WorkItemId"/>
</Key>
<Property Name="WorkItemId" Type="Edm.Int32" Nullable="false">
<Annotation Term="Ref.ReferenceName" String="System.Id"/>
<Annotation Term="Display.DisplayName" String="Work Item Id"/>
</Property>
<Property Name="InProgressDate" Type="Edm.DateTimeOffset">
<Annotation Term="Display.DisplayName" String="InProgress Date"/>
</Property>
<Property Name="LeadTimeDays" Type="Edm.Double">
<Annotation Term="Display.DisplayName" String="Lead Time Days"/>
</Property>
<Property Name="CycleTimeDays" Type="Edm.Double">
<Annotation Term="Display.DisplayName" String="Cycle Time Days"/>
</Property>
...
<NavigationProperty Name="Teams" Type="Collection(Microsoft.VisualStudio.Services.Analytics.Model.Team)"/>
<NavigationProperty Name="Revisions" Type="Collection(Microsoft.VisualStudio.Services.Analytics.Model.WorkItemRevision)"/>
<NavigationProperty Name="Links" Type="Collection(Microsoft.VisualStudio.Services.Analytics.Model.WorkItemLink)"/>
<NavigationProperty Name="Children" Type="Collection(Microsoft.VisualStudio.Services.Analytics.Model.WorkItem)"/>
<NavigationProperty Name="Parent" Type="Microsoft.VisualStudio.Services.Analytics.Model.WorkItem">
<ReferentialConstraint Property="ParentWorkItemId" ReferencedProperty="WorkItemId"/>
</NavigationProperty>
<NavigationProperty Name="Project" Type="Microsoft.VisualStudio.Services.Analytics.Model.Project" Nullable="false">
<ReferentialConstraint Property="ProjectSK" ReferencedProperty="ProjectSK"/>
</NavigationProperty>
...
Pour obtenir des détails complets sur les propriétés et les relations pour chaque zone de service, consultez :
- Date du calendrier, référence des métadonnées du projet et de l’utilisateur.
- Référence des métadonnées pour Azure Boards.
- Informations de référence sur les métadonnées pour Azure Pipelines.
- Informations de référence sur les métadonnées pour les plans de test.
Jeux d'entités à interroger
Pour générer des rapports, interrogez un jeu d’entités tel que WorkItems, WorkItemSnapshotou PipelineRuns. Pour obtenir la liste complète des entités prises en charge, consultez les métadonnées OData Analytics.
https://analytics.dev.azure.com/<OrganizationName>/<ProjectName>/_odata/version/<EntitySet>?<QueryOptions>
Par exemple, la requête suivante compte les éléments de travail du projet Fabrikam Fiber :
https://analytics.dev.azure.com/fabrikam/Fabrikam%20Fiber/_odata/v4.0-preview/WorkItems?%20$apply=aggregate($count%20as%20Count)
La réponse retourne un nombre de 1399:
{
"@odata.context": "https://analytics.dev.azure.com/fabrikam/Fabrikam%20Fiber/_odata/v4.0-preview/$metadata#WorkItems(Count)",
"value": [
{
"@odata.id": null,
"Count": 1399
}
]
}
https://<ServerName>/<CollectionName>/<ProjectName>/_odata/version/<EntitySet>?<QueryOptions>
Par exemple, la requête suivante compte les éléments de travail dans le projet Fabrikam sur le serveur fabrikam.
https://fabrikam/DefaultCollection/Fabrikam/_odata/v4.0-preview/WorkItems?%20$apply=aggregate($count%20as%20Count)
La réponse retourne un nombre de 44:
{
"@odata.context": "http://fabrikam/DefaultCollection/Fabrikam/_odata/v4.0-preview/$metadata#WorkItems(Count)",
"value": [
{
"@odata.id": null,
"Count": 44
}
]
}
Important
Incluez toujours une clause $select ou $apply pour éviter les limites d’utilisation. Sans un, Analytics retourne toutes les colonnes et lignes, ce qui peut être lent pour les jeux de données volumineux et déclenche la pagination côté serveur au-dessus de 10 000 enregistrements.
Exemple : répertorier des projets avec $select
L’exemple suivant utilise $select pour renvoyer uniquement la ProjectName propriété du jeu d’entités Projects . Pour obtenir la liste complète des jeux d’entités, consultez Le modèle de données pour Analytics.
https://analytics.dev.azure.com/fabrikam/_odata/v4.0-preview/Projects?$select=ProjectName
La réponse répertorie les noms de projet dans l’organisation :
{
"@odata.context": "https://analytics.dev.azure.com/fabrikam/_odata/v4.0-preview/$metadata#Projects(ProjectName)",
"value": [
{ "ProjectName": "Basic Fabrikam" },
{ "ProjectName": "Fabrikam Fiber" },
{ "ProjectName": "MyFirstProject" },
{ "ProjectName": "Fabrikam Test" },
{ "ProjectName": "MyPublicProject" }
]
}
https://fabrikam/DefaultCollection/_odata/v4.0-preview/Projects?$select=ProjectName
La réponse répertorie les noms de projet dans la collection :
{
"@odata.context": "http://fabrikam/DefaultCollection/_odata/v4.0-preview/$metadata#Projects(ProjectName)",
"value": [
{ "ProjectName": "Fabrikam Fiber" },
{ "ProjectName": "Fabrikam" },
{ "ProjectName": "Fabrikam Florida" }
]
}
Utiliser les options de requête
Ajoutez des options de requête à l’URL pour mettre en forme la réponse. Spécifiez-les dans l’ordre indiqué ici.
| Option de requête | Descriptif | Exemples |
|---|---|---|
$apply |
Transforme les résultats avec filter, , groupbyaggregate, compute, expand, ou concat. |
Données agrégées |
$compute |
Définit les propriétés calculées à utiliser dans $select, $filterou $orderby. |
|
$filter |
Retourne uniquement les ressources pour lesquelles l’expression évalue à true. Les ressources qui évaluent à false, à null, ou ne sont pas disponibles en raison des autorisations sont omises. |
Interroger les données de suivi du travail |
$orderby |
Définit l’ordre de tri des enregistrements retournés. | Interroger les données de suivi du travail |
$top / $skip |
Limite le nombre d’enregistrements retournés ou ignore un nombre spécifié. | Requêtes ciblées sur l’organisation |
$select |
Spécifie les colonnes à renvoyer. | |
$expand |
Inclut les entités associées en ligne. Passez les options de requête imbriquées ($filter, $select, $orderby, $skip, $top, $count, $search, $expand) entre parenthèses après le nom de la propriété de navigation. |
Recettes d’analytique |
$skiptoken |
Passe à la page suivante des résultats (utilisée avec la pagination côté serveur). | |
$count=true |
Ajoute un nombre total d’enregistrements à la réponse. Utilisez $count seule pour renvoyer uniquement le nombre. |
Données agrégées |
Conseil
Ne combinez $apply pas et $filter dans la même requête. Utilisez l’un ou l’autre. Pour filtrer à l’intérieur d’une $apply clause, utilisez $apply=filter(...). Le mélange des deux peut produire des résultats inattendus.
Comprendre la pagination côté serveur
Lorsqu’une requête retourne plus de 10 000 enregistrements, Analytics pages automatiquement les résultats. La réponse inclut une @odata.nextLink URL qui pointe vers la page suivante. Les outils clients tels que Power BI Desktop et Excel suivent automatiquement ces liens.
L’exemple suivant montre une réponse paginée :
{
"@odata.context":"https://analytics.dev.azure.com/fabrikam/_odata/v4.0-preview/$metadata#WorkItems",
"value":[
// first 10,000 records
],
"@odata.nextLink":"https://analytics.dev.azure.com/fabrikam/_odata/v4.0-preview/WorkItems?$skiptoken=10000"
}
Si vous interrogez depuis le code, suivez chaque @odata.nextLink jusqu'à ce que la réponse n'en contienne plus un.
Utiliser l’IA pour construire des requêtes Analytics
Si vous configurez le serveur MCP Azure DevOps, vous pouvez utiliser des assistants IA pour générer des requêtes OData pour Analytics.
Exemples d’invites pour la construction de requêtes
| Tâche | Exemple d’invite |
|---|---|
| Métadonnées de requête | Show me the properties available for the WorkItems entity set in <Contoso> organization |
| Créer une requête de base | Write an OData query to list all active user stories in <Contoso> project |
| Filtrer et trier | Write an OData query to get bugs with priority 1, sorted by created date, in <Contoso> project |
| Sélectionner des colonnes spécifiques | Write an OData query that returns only the Title, State, and AssignedTo for work items in <Contoso> project |
| Utiliser des agrégations | Write an OData query that groups work items by state and counts them in <Contoso> project |
| Gérer la pagination | Explain how to handle server-side paging when querying Analytics for large datasets |
| Requête inter-projets | Write an OData query to get all bugs across all projects in <Contoso> organization |
| Requête d’instantané | Write an OData query using WorkItemSnapshot to show a burndown of remaining work over the last sprint in <Contoso> project |
| Éléments de travail obsolètes | Write an OData query to find work items that haven't been updated in the last 30 days in <Contoso> project |
| Charge de travail d’équipe | Write an OData query that shows how many active work items are assigned to each team member in <Contoso> project |
| Échecs de pipeline | Write an OData query to list the pipeline runs that failed in the last 7 days in <Contoso> project |