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

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

Vous pouvez obtenir la somme de vos données de suivi de travail de deux façons à l’aide de Analytics avec OData. La première méthode retourne un nombre simple d’éléments de travail en fonction de votre requête OData. La deuxième méthode retourne un résultat au format JSON basé sur votre requête OData qui exerce l’extension d’agrégation OData.

Cet article s’appuie sur les informations fournies dans Construire des requêtes OData pour Analytics et Définir des requêtes de base à l’aide d’OData Analytics. En outre, les requêtes de cet article sont axées sur la récupération des données d’élément de travail. Toutefois, les principes s’appliquent à l’interrogation d’autres jeux d’entités.

Dans cet article, vous apprendrez ce qui suit :

  • À propos de l’extension d’agrégation OData
  • Comment utiliser l’extension d’agrégation pour OData
  • Guide pratique pour regrouper et filtrer les résultats agrégés
  • Guide pratique pour agréger des données pour générer un diagramme de flux cumulé

Pour savoir comment générer des nombres simples, consultez Retourner un nombre d’éléments (aucune autre donnée) et Retourner un nombre d’éléments et de données.

Notes

Le service Analytics est automatiquement activé et pris en charge en production pour toutes les Azure DevOps Services. L’intégration power BI et l’accès au flux OData du service Analytics sont en disponibilité générale. Nous vous encourageons à l’utiliser et à nous faire part de vos commentaires. Les données disponibles dépendent de la version. La dernière version prise en charge est v2.0, et la dernière préversion est v4.0-preview. Pour plus d’informations, consultez Gestion des versions de l’API OData.

Notes

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 power BI et l’accès au flux OData du service Analytics sont en disponibilité générale. Nous vous encourageons à l’utiliser et à nous faire part de vos commentaires. Si vous avez effectué une mise à niveau à partir de 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 est v2.0, et la dernière préversion est v4.0-preview. Pour plus d’informations, consultez Gestion des versions de l’API OData.

Notes

Le service Analytics est en préversion pour Azure DevOps Server 2019. Vous pouvez l’activer ou l’installer pour une collection de projets. L’intégration power BI et l’accès au flux OData du service Analytics sont en préversion. Nous vous encourageons à l’utiliser et à nous faire part de vos commentaires.

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

Qu’est-ce que l’extension d’agrégation pour OData ?

Analytics s’appuie sur OData pour créer des requêtes sur vos données de suivi de travail. Les agrégations dans OData sont obtenues à l’aide d’une extension qui introduit le $apply mot clé. Nous avons quelques exemples d’utilisation de cette mot clé ci-dessous. Pour en savoir plus sur l’extension , consultez Extension OData pour l’agrégation de données.

Agréger des données à l’aide de l’extension d’agrégation OData

Maintenant que vous avez vu comment effectuer des comptages simples, examinons comment déclencher des agrégations à l’aide du $apply jeton où le format de base à la fin de l’URL est le suivant :

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

Où :

  • {entitySetName} est l’entité qui doit être interrogée pour
  • {columnToAggregate} est la colonne d’agrégation
  • {aggregationType} spécifie le type d’agrégation utilisé
  • {newColumnName} spécifie le nom de la colonne ayant des valeurs après l’agrégation.

Données agrégées à l’aide de l’extension apply

À l’aide de l’extension $apply , vous pouvez obtenir des nombres, des sommes et des informations supplémentaires lorsque vous interrogez vos données de suivi du travail.

Retourner la somme de tout le travail restant

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

Retourner l’identificateur du dernier élément de travail

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

Regrouper les résultats à l’aide de la clause groupby

L’extension d’agrégation OData prend également en charge une groupby clause identique à la clause SQL GROUP BY . Vous pouvez utiliser cette clause pour décomposer rapidement les nombres plus en détail.

Par exemple, la clause suivante retourne un nombre d’éléments de travail :

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

Ajoutez la groupby clause pour renvoyer un nombre d’éléments de travail par type :

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

Elle retourne un résultat similaire à cet exemple :

{
  "@odata.context":"https://analytics.dev.azure.com/{OrganizationName}/_odata/{version}/$metadata#WorkItems(WorkItemType,Count)","value":[
    {
      "@odata.id":null,"WorkItemType":"Bug","Count":3
    },
    {
      "@odata.id":null,"WorkItemType":"Product Backlog Item","Count":13
    }
  ]
}

Vous pouvez également regrouper par plusieurs propriétés comme dans cet exemple :

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

Elle retourne un résultat similaire à cet exemple :

{
  "@odata.context": "https://analytics.dev.azure.com/{OrganizationName}/_odata/{version}/$metadata#WorkItems(WorkItemType,State,Count)",
  "value": [
    {
      "@odata.id": null,
      "State": "Active",
      "WorkItemType": "Bug",
      "Count": 2
    },
    {
      "@odata.id": null,
      "State": "Committed",
      "WorkItemType": "Bug",
      "Count": 1
    },
    {
      "@odata.id": null,
      "State": "Active",
      "WorkItemType": "Product Backlog Item",
      "Count": 5
    },
    {
      "@odata.id": null,
      "State": "Committed",
      "WorkItemType": "Product Backlog Item",
      "Count": 8
    }
  ]
}

Vous pouvez également regrouper des entités, mais le regroupement OData diffère de la façon dont vous pouvez normalement y penser.

Par exemple, supposons que vous vouliez savoir combien de zones se trouvent dans chaque projet dans un organization ou une collection. Dans OData, « compter toutes les zones et les regrouper par projet » équivaut à « me donner tous les projets et un nombre de zones pour chaque projet ». Il en résulte une requête similaire à :

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

Filtrer les résultats agrégés

Vous pouvez également filtrer les résultats agrégés, mais ils sont appliqués légèrement différemment que lorsque vous n’utilisez pas l’agrégation. Analytics évalue les filtres le long d’un canal de sorte qu’il est toujours préférable d’effectuer d’abord le filtrage le plus discret.

Les filtres ressemblent à cet exemple :

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

Notes

Vous n’avez pas besoin de fournir la groupby clause . Vous pouvez simplement utiliser la aggregate clause pour retourner une valeur unique.

Générer plusieurs agrégations dans un seul appel

Vous souhaiterez peut-être fournir plusieurs informations. Par exemple, la somme du travail terminé et, séparément, la somme du travail restant. Dans ce cas, vous pouvez effectuer des appels distincts ou un seul appel comme suit :

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

Elle retourne un résultat qui ressemble à cet exemple :

{
  "@odata.context":"https://analytics.dev.azure.com/{OrganizationName}/_odata/{version}/$metadata#WorkItems(SumOfCompletedWork,SumOfRemainingWork)","value":[
    {
      "@odata.id":null,"SumOfCompletedWork":1525841.2900000005,"SumOfRemainingWork":73842.39
    }
  ]
}

Générer des propriétés calculées à utiliser dans un seul appel

Vous devrez peut-être utiliser une expression mathématique pour calculer les propriétés à utiliser dans un jeu de résultats. Par exemple, la somme du travail terminé est divisée par la somme du travail terminé plus la somme du travail restant pour calculer le pourcentage de travail terminé. Dans ce cas, vous pouvez utiliser cet exemple :

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

{
  "@odata.context":"https://analytics.dev.azure.com/{OrganizationName}/_odata/{version}/$metadata#WorkItems(SumOfCompletedWork,SumOfRemainingWork)","value":[
    {
      "@odata.id":null,"DonePercentage":0.96760221857946638,"SumOfRemainingWork":50715.95,"SumOfCompletedWork":1514698.3400000033
    }
  ]
}

Générer un diagramme de flux cumulé à partir de données agrégées

Supposons que vous souhaitiez créer un diagramme de flux cumulé dans Power BI. Vous pouvez utiliser une requête similaire à celle ci-dessous :

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

Elle retourne un résultat similaire à cet exemple. Vous pouvez ensuite l’utiliser directement dans la visualisation de données de votre choix.

{
  "@odata.context": "https://analytics.dev.azure.com/{OrganizationName}/{ProjectName}/_odata/{version}//$metadata#WorkItemBoardSnapshot(DateValue,ColumnName,Count)",
  "value": [
    {
      "@odata.id": null,
      "DateValue": "2015-07-16T00:00:00-07:00",
      "Count": 324,
       "ColumnName": "Completed"
    },
    {
      "@odata.id": null,
      "DateValue": "2015-07-16T00:00:00-07:00",
      "Count": 5,
      "ColumnName": "In Progress"
    }
  ]
}

Examinons ce que fait réellement cette requête :

  • Filtre les données pour une équipe spécifique
  • Filtre les données dans un backlog spécifique
  • Retourne un nombre d’éléments de travail.

Lors de l’actualisation de Power BI ou d’Excel, moins il y a de lignes requises, plus l’actualisation se produit rapidement.

Étapes suivantes