Agregar datos de seguimiento de trabajo mediante Analytics
Azure DevOps Services | Azure DevOps Server 2020 | 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 basado en la consulta de OData. El segundo método devuelve un resultado con formato JSON basado en la consulta de OData que ejecuta la extensión de agregación de OData.
En este artículo, aprenderá lo siguiente:
- Acerca de la extensión de agregación OData
- Cómo generar un recuento simple de elementos de trabajo
- Uso de la extensión de agregación para OData
- Agrupación y filtrado de resultados agregados
- Cómo agregar datos para generar un diagrama de Flow acumulativo
Nota
El servicio Analytics se habilita automáticamente para todos los Azure DevOps Services. Se admite para su uso en producción. Power BI integración 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. .
Nota
El servicio Analytics se instala automáticamente en todas las nuevas colecciones de proyectos para Azure DevOps Server 2020. Se admite para su uso en producción. Power BI integración 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. Si actualizó desde Azure DevOps Server 2019, se le proporciona la opción de instalar el servicio Analytics durante la actualización.
Nota
El servicio Analytics está en versión preliminar para Azure DevOps Server 2019. Puede acceder a Analytics habilitando o instalando para una colección de proyectos. Power BI integración 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.
¿Qué es la extensión de agregación para OData?
Analytics se basa en OData para crear consultas sobre los datos de seguimiento de trabajo. Las agregaciones en OData se logran mediante una extensión que introduce la palabra $apply 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 OData para agregación de datos.
Dirección URL raíz básica
Use esta dirección URL raíz básica como prefijo para todos los ejemplos proporcionados en este artículo.
https://analytics.dev.azure.com/{OrganizationName}/{ProjectName}/_odata/{version}/
https://{servername}:{port}/tfs/{OrganizationName}/{ProjectName}/_odata/{version}/
Nota
Los ejemplos que se muestran en este artículo se basan en una dirección URL Azure DevOps Services, tendrá que sustituirla en la dirección URL Azure DevOps Server url.
Agregaciones de recuento simples
En primer lugar, veamos cómo realizar recuentos sin las extensiones de agregación.
El recuento básico se realiza agregando la $count opción de consulta al final de la dirección URL. Por ejemplo, para averiguar cuántos elementos de trabajo se definen en su organización, agregue esta cadena a la consulta:
/WorkItems/$count
Donde está la consulta completa de OData:
https://analytics.dev.azure.com/{OrganizationName}/_odata/{version}/WorkItems/$count
Nota
El {version} valor tiene el formato v1.0 . 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.
Para la comparación, mediante la extensión de agregación OData, agregue esta cadena a la consulta:
/WorkItems?$apply=aggregate($count as Count)
Donde está la consulta completa de OData:
https://analytics.dev.azure.com/{OrganizationName}/_odata/{version}/WorkItems?
$apply=aggregate($count as Count)
Para recuentos simples, el enfoque de no agregación tiene una sintaxis más sencilla.
Nota
El $count uso de devuelve un número único; el uso de la extensión de agregación OData devuelve un JSON con formato.
También puede filtrar lo que desea contar. Por ejemplo, si desea saber cuántos elementos de trabajo están en el estado "En curso", especifique la cadena siguiente en la consulta:
/WorkItems/$count?$filter=State eq 'In Progress'
Donde está la consulta completa de OData:
https://analytics.dev.azure.com/{OrganizationName}/_odata/{version}/WorkItems/$count?
$filter=State eq 'In Progress'
Para la comparación, mediante agregaciones de datos, agregue este fragmento de código a la consulta:
/WorkItems?$apply=filter(State eq 'In Progress')/aggregate($count as Count)
Donde está la consulta completa de OData:
https://analytics.dev.azure.com/{OrganizationName}/_odata/{version}/WorkItems?
$apply=
filter(State eq 'In Progress')/
aggregate($count as Count)
Agregar datos mediante la extensión de agregación OData
Ahora que ha visto cómo realizar recuentos simples, vamos a revisar cómo desencadenar agregaciones mediante el token donde el formato básico al final de la dirección URL es el $apply siguiente:
/{entitySetName}?$apply=aggregate({columnToAggregate} with {aggregationType} as {newColumnName})
Donde:
- {entitySetName} es la entidad para la que es necesario 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.
Devuelve 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 cláusula idéntica a groupby la SQL GROUP BY de datos. Puede usar esta cláusula para dividir rápidamente los números con más detalle.
Por ejemplo, esta cláusula devolverá 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 podría pensar en ella.
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 realizar primero el filtrado más discreto.
Los filtros son parecidos 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 tiene que proporcionar la groupby cláusula . Simplemente puede usar la aggregate cláusula para devolver un valor único.
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 como se muestra a continuación:
/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 para su uso en un conjunto de resultados. Un ejemplo es la suma del trabajo completado que se divide entre 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 Flow a partir de datos agregados
Supongamos que desea 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 al de este ejemplo. A continuación, 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 realmente hace 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, cuanto menos filas se requieran, más rápida será la actualización.