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.
Este artículo se basa en la 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, pero 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 todas las Azure DevOps Services.
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 proporcione sus comentarios.
Los datos disponibles dependen de la versión. La versión compatible más reciente es v2.0
y la versión preliminar más reciente es v4.0-preview
. Para 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 proporcione 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 compatible más reciente es v2.0
y la versión preliminar más reciente es v4.0-preview
. Para 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 habilitarla o instalarla para una colección de proyectos. La integración de Power BI y el acceso a la fuente OData del servicio Analytics se encuentran en versión preliminar. Le recomendamos que lo use y nos proporcione sus comentarios.
Los datos disponibles dependen de la versión. La versión compatible más reciente es v2.0
y la versión preliminar más reciente es v4.0-preview
. Para 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 presenta 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 la agregación de datos.
Agregar datos mediante la extensión de agregación de OData
Ahora que ha visto cómo realizar recuentos simples, 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, thie following clause 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 podría pensar 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 se parecen a 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 desee 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 en 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
}
]
}
Generar 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, se requieren menos filas, cuantos más rápido se produzca la actualización.