Interroger les données de suivi de l'activité à l'aide d'Analytics

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

Vous pouvez interroger vos données de suivi de travail Azure DevOps à l’aide des requêtes de base fournies dans cet article. Ces requêtes répondent aux besoins quotidiens tout en démontrant différentes fonctionnalités d’Analytics. Vous pouvez adapter la plupart de ces requêtes pour répondre à vos besoins.

Cet article s’appuie sur les informations fournies dans Construire des requêtes OData pour l’analytique et Référence des métadonnées pour Azure Boards Analytics.

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.

Prérequis

Catégorie Spécifications
Niveaux d’accès - Membre du projet.
- Au moins un accès de base (Basic).
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.

Tous les exemples sont étendus à un projet sur Azure DevOps. Pour des exemples de ciblage au niveau de l'organisation ou d'Azure DevOps Server, consultez Requêtes avec ciblage de projet et d'organisation.

Conseil

Vous pouvez utiliser l’extension WIQL pour OData Azure DevOps Marketplace pour générer rapidement une requête OData basée sur une requête d’élément de travail à partir de la page Requêtes . Cette extension prend en charge la conversion de la liste plate des éléments de travail et des éléments de travail et liens directs. Les extensions ne sont pas prises en charge par Azure Boards et ne sont donc pas prises en charge par l’équipe produit. Pour les questions, suggestions ou problèmes que vous rencontrez lors de l’utilisation de ces extensions, visitez la page d’extension correspondante.

Filtrer les éléments de travail en fonction d’une date modifiée

Vous interrogez l’ensemble WorkItems d’entités pour répertorier les éléments de travail qui répondent à vos critères de champ.

La requête suivante retourne les éléments, bogues et fonctionnalités du backlog produit dont la date de modification est supérieure au 12 décembre 2021.

https://analytics.dev.azure.com/{OrganizationName}/{ProjectName}/_odata/v1.0/WorkItems?
  $select=WorkItemId, WorkItemType, Title, State 
  &$expand=AssignedTo($select=UserEmail)
  &$filter=(Project/ProjectName eq 'Fabrikam Fiber'
    AND (WorkItemType eq 'Product Backlog Item' or WorkItemType eq 'Bug' or WorkItemType eq 'Feature')
    AND ChangedOn/Date ge 2021-12-16T23:44:15.619Z)
  &$orderby=WorkItemType desc 

Filtrer les éléments de travail en fonction de la zone

Vous pouvez modifier la requête suivante pour répertorier tous les éléments de travail sous un chemin d’accès à la zone spécifique.

https://analytics.dev.azure.com/{OrganizationName}/{ProjectName}/_odata/{version}/WorkItems?
  $filter=Area/AreaPath eq '{area path}'
  &$select=WorkItemId, Title, State

Exemple de requête :

Par exemple, la syntaxe suivante interroge le nombre d’éléments de travail pour chaque projet défini pour l’organisation fabrikam .

https://analytics.dev.azure.com/fabrikam/_odata/v4.0-preview/WorkItems?$apply=groupby((Project/ProjectName), aggregate($count as Count))

Exemple de réponse :

Et la réponse retourne des données pour les cinq projets suivants.

{
   "@odata.context":"https://analytics.dev.azure.com/fabrikam/_odata/v4.0-preview/$metadata#WorkItems(Project(ProjectName),Count)",
   "value":[
      {
         "@odata.id":null,
         "Count":2,
         "Project":{
            "@odata.id":null,
            "ProjectName":"Basic Fabrikam"
         }
      },
      {
         "@odata.id":null,
         "Count":19,
         "Project":{
            "@odata.id":null,
            "ProjectName":"Demo 11"
         }
      },
      {
         "@odata.id":null,
         "Count":188,
         "Project":{
            "@odata.id":null,
            "ProjectName":"Fabrikam Fiber"
         }
      },
      {
         "@odata.id":null,
         "Count":89,
         "Project":{
            "@odata.id":null,
            "ProjectName":"MyFirstProject"
         }
      },
      {
         "@odata.id":null,
         "Count":2,
         "Project":{
            "@odata.id":null,
            "ProjectName":"MyPublicProject"
         }
      }
   ]
}

Filtrer les éléments de travail en fonction de l’itération

https://analytics.dev.azure.com/{OrganizationName}/{ProjectName}/_odata/{version}/WorkItems?
  $filter=Iteration/IterationPath eq '{iteration path}'
  &$select=WorkItemId, Title, State

Exemple de requête :

Par exemple, les requêtes de syntaxe suivantes interrogent des éléments de travail pour le projet Fabrikam Fibre sous le chemin d’itération =Fabrikam Fiber\Release 1\Sprint 6.

https://analytics.dev.azure.com/fabrikam/_odata/v4.0-preview/WorkItems?$select=WorkItemId, WorkItemType, Title, State&$expand=Iteration($select=IterationPath)&$filter=(Project/ProjectName eq 'Fabrikam Fiber' AND WorkItemType ne '' AND Iteration/IterationPath eq 'Fabrikam Fiber\Release 1\Sprint 6')

Exemple de réponse :

Et la réponse retourne des données pour les quatre éléments de travail suivants.

{
   "@odata.context":"https://analytics.dev.azure.com/fabrikam/_odata/v4.0-preview/$metadata#WorkItems(WorkItemId,WorkItemType,Title,State,Iteration(IterationPath))",
   "value":[
      {
         "WorkItemId":361,
         "Title":"Hello World Web Site",
         "WorkItemType":"Product Backlog Item",
         "State":"New",
         "Iteration":{
            "IterationPath":"Fabrikam Fiber\\Release 1\\Sprint 6"
         }
      },
      {
         "WorkItemId":1126,
         "Title":"web site task",
         "WorkItemType":"Task",
         "State":"To Do",
         "Iteration":{
            "IterationPath":"Fabrikam Fiber\\Release 1\\Sprint 6"
         }
      },
      {
         "WorkItemId":1136,
         "Title":"Add a new task with two new tags",
         "WorkItemType":"Task",
         "State":"To Do",
         "Iteration":{
            "IterationPath":"Fabrikam Fiber\\Release 1\\Sprint 6"
         }
      },
      {
         "WorkItemId":1140,
         "Title":"New task - test for Blocked",
         "WorkItemType":"Task",
         "State":"To Do",
         "Iteration":{
            "IterationPath":"Fabrikam Fiber\\Release 1\\Sprint 6"
         }
      }
   ]
}

Récupérer des éléments pour une itération

Vous pouvez récupérer tous les éléments de travail pour une itération donnée qui se situent entre le premier jour de l’itération et le dernier jour de l’itération. Ici, votre requête est limitée par les données contenues dans les données de suivi du travail.

https://analytics.dev.azure.com/{OrganizationName}/{ProjectName}/_odata/{version}/WorkItems?
  $filter=Iteration/IterationPath eq '{iteration path}' 
    and ChangedDate ge Iteration/StartDate 
    and ChangedDate le Iteration/EndDate
  &$select=WorkItemId, Title, State

Filtrer les éléments de travail contenant des balises spécifiques

L'opérateur any est utilisé ici, car il existe une collection de tags qui peuvent être associés à un élément de travail. Du point de vue de l’utilisation, le format est le suivant : {Navigation Property}/any(d:d/{Field Name} {operator} {expression}). Tout élément non entouré de crochets ({}) est un littéral. Il y a des variantes. Par exemple, vous n’avez pas besoin d’utiliser « d » comme utilisé dans l’expression ci-dessus. Suivre ce format facilite les choses.

https://analytics.dev.azure.com/{OrganizationName}/{ProjectName}/_odata/{version}/WorkItems?
  $filter=Tags/any(d:d/TagName eq '{tag name}')
  &$select=WorkItemId, Title, State

Filtrer les éléments de travail d’une équipe spécifique

Utilisez la requête suivante pour répertorier les éléments de travail d’une équipe spécifique.

https://analytics.dev.azure.com/{OrganizationName}/{ProjectName}/_odata/{version}/WorkItems?
  $filter=Teams/any(d:d/TeamName eq '{team name}')
  &$select=WorkItemId, Title, State

Filtrer les éléments de travail en fonction d’un champ ayant déjà une valeur spécifique

La requête suivante est similaire à une requête d’élément de travail qui utilise l’opérateur Was Ever .

https://analytics.dev.azure.com/{OrganizationName}/{ProjectName}/_odata/{version}/WorkItems?
  $filter=WorkItemType eq '{Type}'
     and Revisions/any(r:r/ResolvedBy/UserName eq '{User}') 

Exemple de requête :

La requête suivante retourne les éléments de travail qui ont été attribués à Jamal Hartnett dont l’e-mail est «fabrikamfiber4@hotmail.com » pour le projet Fabrikam Fiber .

https://analytics.dev.azure.com/fabrikam/Fabrikam Fiber/_odata/v4.0-preview/WorkItems?
  $select=WorkItemType, Title, State, 
  &$expand=AssignedTo($select=UserEmail), Area($select=AreaPath)
  &$filter=(WorkItemType ne '' AND State ne '' AND Revisions/any(r:r/AssignedTo/UserEmail eq 'fabrikamfiber4@hotmail.com'))
  &$orderby=WorkItemType asc

Exemple de réponse :

La réponse retourne deux éléments de travail.

{
   "@odata.context":"https://analytics.dev.azure.com/fabrikam/Design%20Agile/_odata/v4.0-preview/$metadata#WorkItems(Priority,WorkItemType,Title,State,TagNames,AssignedTo(UserEmail),Area(AreaPath))",
   "value":[
      {
         "Title":"New home page design",
         "WorkItemType":"Feature",
         "State":"Closed",
         "AssignedTo":{
            "UserEmail":"fabrikamfiber4@hotmail.com"
         },
         "Area":{
            "AreaPath":"Design Agile"
         }
      },
      {
         "Title":"Check performance",
         "WorkItemType":"User Story",
         "State":"New",
         "AssignedTo":{
            "UserEmail":"fabrikamfiber4@hotmail.com"
         },
         "Area":{
            "AreaPath":"Design Agile"
         }
      }
   ]
}

Récupérer les équipes affectées à un parcours de zone

La requête suivante retourne les noms des équipes affectées aux chemins de zone dans la zone Gestion des comptes pour le projet Fabrikam Fiber.

> https://analytics.dev.azure.com/fabrikam/Fabrikam Fiber/_odata/v4.0-preview/Areas?
>      $filter=startswith(AreaPath,'Fabrikam Fiber\Account Management')
>      &$select=AreaPath&$expand=Teams($select=TeamName)
>```
The response returns three area paths and the names of several teams assigned to each. 

> [!div class="tabbedCodeSnippets"]
```OData
> @odata.context	"https://analytics.dev.azure.com/fabrikam/Fabrikam%20Fiber/_odata/v4.0-preview/$metadata#Areas(AreaPath,Teams(TeamName))"
> value	
> 0	
>   AreaPath             "Fabrikam Fiber\\Account Management\\Customer Profile"
>   Teams	
>       0	
>           TeamName     "Organization Management"
>       1	
>           TeamName     "Fabrikam Team"
>       2	
>           TeamName     "Customer Profile"
> 1	
>   AreaPath             "Fabrikam Fiber\\Account Management\\Shopping Cart"
>   Teams	
>       0	
>           TeamName     "Organization Management"
>       1	
>           TeamName     "Shopping Cart"
>       2	
>           TeamName     "Fabrikam Team"
> 2	
>   AreaPath             "Fabrikam Fiber\\Account Management"
>   Teams	
>       0	
>           TeamName     "Organization Management"
>       1	
>           TeamName     "Fabrikam Team"

Retourner l’historique d’un élément de travail spécifique

Vous interrogez l’ensemble WorkItemRevisions d’entités pour répertorier l’historique des éléments de travail. La requête suivante retourne la valeur du Titre, de l'État et du Chemin d'itération pour chaque révision d'un élément de travail spécifié.

https://analytics.dev.azure.com/{OrganizationName}/{ProjectName}/_odata/{version}/WorkItemRevisions?
  $filter=WorkItemId eq {Id}
  &$select=WorkItemId, Title, State, Iteration Path

Remarque

Chaque fois qu’une modification est apportée à un élément de travail, y compris une modification de la valeur de classement de la pile, une révision est créée. Pour plus d’informations sur les données historiques, consultez Application de filtres aux données historiques.

Exemple de requête :

Par exemple, la syntaxe suivante interroge les révisions pour ID=1145 dans le projet Fabrikam Fibre.

https://analytics.dev.azure.com/fabrikam/Fabrikam Fiber/_odata/v1.0/WorkItemRevisions?$select=WorkItemId, Title, State&$expand=Iteration($select=IterationPath)&$filter=(Project/ProjectName eq 'Fabrikam Fiber' AND WorkItemId eq 1145 AND State ne '' AND Revision gt 1)

Exemple de réponse :

Et la réponse retourne des données pour les quatre révisions :

{
   "@odata.context":"https://analytics.dev.azure.com/fabrikam/Fabrikam%20Fiber/_odata/v4.0-preview/$metadata#WorkItemRevisions(WorkItemId,Title,State,Iteration(IterationPath))",
   "value":[
      {
         "WorkItemId":1145,
         "Title":"Sprint 2 work added in June",
         "State":"New",
         "Iteration":{
            "IterationPath":"Fabrikam Fiber\\Future"
         }
      },
      {
         "WorkItemId":1145,
         "Title":"Sprint 2 work added in June",
         "State":"New",
         "Iteration":{
            "IterationPath":"Fabrikam Fiber\\Future"
         }
      },
      {
         "WorkItemId":1145,
         "Title":"Sprint 2 work added in June",
         "State":"New",
         "Iteration":{
            "IterationPath":"Fabrikam Fiber\\Release 1\\Sprint 2"
         }
      },
      {
         "WorkItemId":1145,
         "Title":"Sprint 2 work added in June",
         "State":"Done",
         "Iteration":{
            "IterationPath":"Fabrikam Fiber\\Release 1\\Sprint 2"
         }
      }
   ]
}