Agregar datos de seguimiento de trabajo mediante Analytics

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

Puede obtener una suma de los datos de seguimiento del trabajo de una de estas dos maneras mediante Analytics con OData. El primer método devuelve un recuento simple de elementos de trabajo en función de la consulta de OData. El segundo método devuelve un resultado con formato JSON basado en la consulta de OData que ejerce la extensión de agregación de OData.

En este artículo se crea información proporcionada en Construcción de consultas de OData para Analytics y Definición de consultas básicas mediante OData Analytics. Además, las consultas se centran en recuperar datos de elementos de trabajo; sin embargo, los principios se aplican para consultar otros conjuntos de entidades.

En este artículo, aprenderá lo siguiente:

  • Acerca de la extensión de agregación de OData
  • Cómo usar la extensión de agregación para OData
  • Cómo agrupar y filtrar los resultados agregados
  • Cómo agregar datos para generar un diagrama de flujo acumulativo

Para obtener información sobre cómo generar recuentos simples, consulte Devolver un recuento de elementos (sin otros datos) y Devolver un recuento de elementos y datos.

Nota:

El servicio Analytics se habilita automáticamente y se admite en producción para todos los servicios de Azure DevOps. La integración de Power BI y el acceso a la fuente OData del servicio Analytics están disponibles con carácter general. Le recomendamos que lo use y nos envíe sus comentarios. Los datos disponibles dependen de la versión. La versión más reciente admitida es v2.0y la versión preliminar más reciente es v4.0-preview. Para obtener más información, consulte Control de versiones de la API de OData.

Nota:

El servicio Analytics se instala y admite automáticamente en producción para todas las colecciones de proyectos nuevas para Azure DevOps Server 2020 y versiones posteriores. La integración de Power BI y el acceso a la fuente OData del servicio Analytics están disponibles con carácter general. Le recomendamos que lo use y nos envíe sus comentarios. Si ha actualizado desde Azure DevOps Server 2019, puede instalar el servicio Analytics durante la actualización.

Los datos disponibles dependen de la versión. La versión más reciente admitida es v2.0y la versión preliminar más reciente es v4.0-preview. Para obtener más información, consulte Control de versiones de la API de OData.

Nota:

El servicio Analytics está en versión preliminar para Azure DevOps Server 2019. Puede habilitarlo o instalarlo para una colección de proyectos. La integración y el acceso de Power BI a la fuente OData del servicio Analytics se encuentran en versión preliminar. Le recomendamos que lo use y nos envíe sus comentarios.

Los datos disponibles dependen de la versión. La versión más reciente admitida es v2.0y la versión preliminar más reciente es v4.0-preview. Para obtener más información, consulte Control de versiones de la API de OData.

¿Qué es la extensión de agregación para OData?

Analytics se basa en OData para crear consultas sobre los datos de seguimiento del trabajo. Las agregaciones de OData se logran mediante una extensión que introduce la $apply palabra clave . A continuación se muestran algunos ejemplos de cómo usar esta palabra clave. Obtenga más información sobre la extensión en Extensión de OData para agregación de datos.

Agregar datos mediante la extensión de agregación OData

Ahora que ha visto cómo realizar recuentos sencillos, vamos a revisar cómo desencadenar agregaciones mediante el $apply token donde el formato básico al final de la dirección URL es el siguiente:

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

Donde:

  • {entitySetName} es la entidad para la que se debe consultar.
  • {columnToAggregate} es la columna de agregación.
  • {aggregationType} especificará el tipo de agregación usado.
  • {newColumnName} especifica el nombre de la columna que tiene valores después de la agregación.

Datos agregados mediante la extensión apply

Con la $apply extensión, puede obtener recuentos, sumas e información adicional al consultar los datos de seguimiento del trabajo.

Devolver la suma de todo el trabajo restante

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

Devolver el último identificador de elemento de trabajo

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

Agrupar los resultados mediante la cláusula groupby

La extensión de agregación OData también admite una groupby cláusula idéntica a la cláusula SQL GROUP BY . Puede usar esta cláusula para desglosar rápidamente los números con más detalle.

Por ejemplo, la cláusula siguiente devuelve un recuento de elementos de trabajo:

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

Agregue la groupby cláusula para devolver un recuento de elementos de trabajo por tipo:

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

Devuelve un resultado similar al de este ejemplo:

{
  "@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
    }
  ]
}

También puede agrupar por varias propiedades como en este ejemplo:

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

Devuelve un resultado similar al de este ejemplo:

{
  "@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
    }
  ]
}

También puede agrupar entre entidades, pero la agrupación de OData difiere de la forma en que normalmente se piensa en ella.

Por ejemplo, supongamos que quería saber cuántas áreas hay en cada proyecto de una organización o colección. En OData, "contar todas las áreas y agruparlas por proyecto" equivale a "proporcionarme todos los proyectos y un recuento de áreas para cada proyecto". Esto da como resultado una consulta similar a la siguiente:

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

Filtrado de los resultados agregados

También puede filtrar los resultados agregados, pero se aplican de forma ligeramente diferente a cuando no se usa la agregación. Analytics evalúa los filtros a lo largo de una canalización, por lo que siempre es mejor hacer primero el filtrado más discreto.

Los filtros tienen un aspecto similar al de este ejemplo:

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

Nota:

No es necesario proporcionar la groupby cláusula . Simplemente puede usar la aggregate cláusula para devolver un único valor.

Generación de varias agregaciones dentro de una sola llamada

Es posible que quiera proporcionar varios fragmentos de información. Un ejemplo es la suma del trabajo completado y por separado la suma del trabajo restante. En tal caso, puede realizar llamadas independientes o una sola llamada de la siguiente manera:

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

Devolverá un resultado similar al de este ejemplo:

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

Generación de propiedades calculadas para su uso dentro de una sola llamada

Es posible que tenga que usar una expresión matemática para calcular las propiedades que se usan en un conjunto de resultados. Un ejemplo es la suma del trabajo completado dividido por la suma del trabajo completado más la suma del trabajo restante para calcular el porcentaje de trabajo completado. En tal caso, puede usar este ejemplo:

/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
    }
  ]
}

Generación de un diagrama de flujo acumulativo a partir de datos agregados

Supongamos que quiere crear un diagrama de flujo acumulativo en Power BI. Puede usar una consulta similar a la siguiente:

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

Devuelve un resultado similar a este ejemplo. Después, puede usarlo directamente dentro de la visualización de datos que prefiera.

{
  "@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"
    }
  ]
}

Echemos un vistazo a lo que hace realmente esta consulta:

  • Filtra los datos a un equipo específico
  • Filtra los datos a un trabajo pendiente específico
  • Devuelve un recuento de elementos de trabajo.

Al actualizar Power BI o Excel, cuantos menos filas necesiten, más rápido se produce la actualización.

Pasos siguientes