Acumulación de valores de elementos de trabajo secundarios en el informe de ejemplo primario

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

El paquete acumulativo proporciona compatibilidad para mostrar un recuento de elementos de trabajo o una suma de puntos de historia, trabajo restante u otro campo personalizado de elementos secundarios. En este artículo se proporcionan varios ejemplos de cómo generar un informe acumulativo tabular para epopeyas, características o casos de usuario que contienen elementos de trabajo secundarios. En la imagen siguiente se muestra un ejemplo de puntos de historia inscritos para sus características principales.

Captura de pantalla del informe de matriz de acumulación de características.

Para más información sobre el paquete acumulativo y las opciones para mostrar el paquete acumulativo, consulte Visualización del progreso del resumen o totales en Azure Boards.

Nota:

En este artículo se supone que ha leído Información general de informes de ejemplo mediante consultas de OData y que tiene conocimientos básicos de Power BI.

Requisitos previos

  • Para ver los datos de Analytics y consultar el servicio, debe ser miembro de un proyecto con acceso básico o superior. De forma predeterminada, a todos los miembros del proyecto se les conceden permisos para consultar Analytics y definir vistas de Analytics.
  • Para obtener información sobre otros requisitos previos relacionados con las actividades de habilitación de características y servicios y seguimiento de datos generales, consulte Permisos y requisitos previos para acceder a Analytics.

Consultas de ejemplo

Las consultas siguientes devuelven datos del WorkItems conjunto de entidades para admitir la generación de informes de matriz de acumulación.

Nota:

Para determinar las propiedades disponibles con fines de filtro o informe, consulte Referencia de metadatos para Azure Boards. Puede filtrar las consultas o devolver propiedades mediante cualquiera de los Property valores de un EntityType valor o NavigationPropertyBinding Path disponible con .EntitySet Cada EntitySet uno corresponde a un objeto EntityType. Para obtener más información sobre el tipo de datos de cada valor, revise los metadatos proporcionados para el correspondiente EntityType.

Artículo acumulativo apunta a características de casos de usuario secundarios basados en la ruta de acceso del área

Puede pegar la consulta de Power BI que se muestra a continuación directamente en la ventana Obtener consulta en blanco de datos>. Para obtener más información, consulte Introducción a los informes de ejemplo mediante consultas de OData.

let
    Source = OData.Feed("https://analytics.dev.azure.com/{organization}/{project}/_odata/v3.0-preview/WorkItems?"
            &"$filter=WorkItemType eq 'Feature'"
            &" and State ne 'Cut'"
            &" and startswith(Area/AreaPath,'{areapath}')"
            &" and Descendants/any()"    
        &"& $select=WorkItemId,Title,WorkItemType,State,AreaSK"
        &"& $expand=AssignedTo($select=UserName),Iteration($select=IterationPath),Area($select=AreaPath),"        
            &"Descendants("
                &"$apply=filter(WorkItemType eq 'User Story')"
                &"/aggregate($count as CountOfUserStories, StoryPoints with sum as TotalStoryPoints)"
            &")", 
        null, [Implementation="2.0",OmitValues = ODataOmitValues.Nulls,ODataVersion = 4])  
in
    Source

Cadenas de sustitución y desglose de consultas

Sustituya las cadenas siguientes por sus valores. No incluya corchetes {} con la sustitución. Por ejemplo, si el nombre de la organización es "Fabrikam", reemplace por {organization}Fabrikam, no {Fabrikam}por .

  • {organization} - El nombre de la organización
  • {project} - El nombre del proyecto de equipo, o bien omite "/{project}" por completo, para una consulta entre proyectos.
  • {areapath} - Ruta de acceso del área. Formato de ejemplo: Project\Level1\Level2.

Desglose de consultas

En la tabla siguiente se describe cada parte de la consulta.

Elemento de consulta

Descripción

$filter=WorkItemType eq 'Feature'

Devuelve características.

and State ne 'Cut'

Omitir errores cerrados.

and startswith(Area/AreaPath,'{areapath}')

Devuelve elementos de trabajo en una ruta de acceso de área específica, reemplazando Area/AreaPath eq '{areapath}' los elementos en una ruta de acceso de área específica. Para filtrar por nombre de equipo, use la instrucción Teams/any(x:x/TeamName eq '{teamname})'filter .

and Descendants/any()

Incluya todas las características, incluso las que no tienen casos de usuario. Reemplace por "any(d/WorkItemType eq 'User Story')" para omitir las características que no tienen casos de usuario secundarios.

&$select=WorkItemId, Title, WorkItemType, State

Seleccione los campos que desea devolver.

&$expand=AssignedTo($select=UserName), Iteration($select=IterationPath), Area($select=AreaPath),

Seleccione los campos AssignedTode propiedades expandibles , Iteration, Area.

Descendants(

Expanda la Descendants cláusula .

$apply=filter(WorkItemType eq 'User Story')

Filtre los descendientes para que solo incluyan casos de usuario (omite tareas y errores).

/aggregate($count as CountOfUserStories, StoryPoints with sum as TotalStoryPoints)

Para todos los descendientes que coinciden con la cláusula filter, los cuenta y suman la StoryPoints propiedad .

)

Cierre Descendants().

Resumen de puntos a las características de casos de usuario secundarios basados en Teams

Las consultas siguientes muestran cómo generar informes acumulativos filtrados por nombre de equipo en lugar de ruta de acceso de área.

Puede pegar la consulta de Power BI que se muestra a continuación directamente en la ventana Obtener consulta en blanco de datos>. Para obtener más información, consulte Introducción a los informes de ejemplo mediante consultas de OData.

let
    Source = OData.Feed("https://analytics.dev.azure.com/{organization}/{project}/_odata/v3.0-preview/WorkItems?"
            &"$filter=WorkItemType eq 'Feature'"
            &" and State ne 'Cut'"
            &" and (Teams/any(x:x/TeamName eq '{teamname}) or Teams/any(x:x/TeamName eq '{teamname}) or Teams/any(x:x/TeamName eq '{teamname})"
            &" and Descendants/any()"    
        &"& $select=WorkItemId,Title,WorkItemType,State,AreaSK"
        &"& $expand=AssignedTo($select=UserName),Iteration($select=IterationPath),Area($select=AreaPath),"        
            &"Descendants("
                &"$apply=filter(WorkItemType eq 'User Story')"
                &"/aggregate($count as CountOfUserStories, StoryPoints with sum as TotalStoryPoints)"
            &")", 
        null, [Implementation="2.0",OmitValues = ODataOmitValues.Nulls,ODataVersion = 4])  
in
    Source

Resumen de historias apunta a epopeyas

Puede resumir los puntos del artículo a Epics mediante las siguientes consultas.

Puede pegar la consulta de Power BI que se muestra a continuación directamente en la ventana Obtener consulta en blanco de datos>. Para obtener más información, consulte Introducción a los informes de ejemplo mediante consultas de OData.

let
    Source = OData.Feed("https://analytics.dev.azure.com/{organization}/{project}/_odata/v3.0-preview/WorkItems?"
            &"$filter=WorkItemType eq 'Epic'"
            &" and State ne 'Cut'"
            &" and startswith(Area/AreaPath,'{areapath}')"
            &" and Descendants/any(d:d/WorkItemType eq 'User Story')"    
        &"& $select=WorkItemId,Title,WorkItemType,State,AreaSK"
        &"& $expand=AssignedTo($select=UserName),Iteration($select=IterationPath),Area($select=AreaPath),"        
            &"Descendants("
                &"$apply=filter(WorkItemType eq 'User Story')"
                &"/aggregate(StoryPoints with sum as TotalStoryPoints)"
            &")", 
        null, [Implementation="2.0",OmitValues = ODataOmitValues.Nulls,ODataVersion = 4])  
in
    Source

Tareas de acumulación trabajo restante y trabajo completado en casos de usuario

En la consulta siguiente se muestra cómo acumular trabajo restante y trabajo completado asignado a tareas secundarias a casos de usuario en la jerarquía. Estas consultas suponen que las tareas se asignan como elementos secundarios de un caso de usuario en la ruta de acceso de área especificada.

Puede pegar la consulta de Power BI que se muestra a continuación directamente en la ventana Obtener consulta en blanco de datos>. Para obtener más información, consulte Introducción a los informes de ejemplo mediante consultas de OData.

let
    Source = OData.Feed("https://analytics.dev.azure.com/{organization}/{project}/_odata/v3.0-preview/WorkItems?"
            &"$filter=WorkItemType eq 'User Story'"
            &" and State ne 'Removed'"
            &" and startswith(Area/AreaPath,'{areapath}')"
            &" and Descendants/any()"    
        &"& $select=WorkItemId,Title,WorkItemType,State,AreaSK"
        &"& $expand=AssignedTo($select=UserName),Iteration($select=IterationPath),Area($select=AreaPath),"        
            &"Descendants("
                &"$apply=filter(WorkItemType eq 'Task')"
                &"/aggregate(RemainingWork with sum as TotalRemainingWork, CompletedWork with sum as TotalCompletedWork)"
            &")", 
        null, [Implementation="2.0",OmitValues = ODataOmitValues.Nulls,ODataVersion = 4])  
in
    Source

Recuento de errores acumulativos en características

Las consultas siguientes muestran cómo acumular el recuento de errores asignados a características. Estas consultas suponen que los errores se definen como elementos secundarios de una característica en la ruta de acceso de área especificada.

Puede pegar la consulta de Power BI que se muestra a continuación directamente en la ventana Obtener consulta en blanco de datos>. Para obtener más información, consulte Introducción a los informes de ejemplo mediante consultas de OData.

let
    Source = OData.Feed("https://analytics.dev.azure.com/{organization}/{project}/_odata/v3.0-preview/WorkItems?"
            &"$filter=WorkItemType eq 'Feature'"
            &" and State ne 'Removed'"
            &" and startswith(Area/AreaPath,'{areapath}')"
            &" and Descendants/any()"    
        &"& $select=WorkItemId,Title,WorkItemType,State,AreaSK"
        &"& $expand=AssignedTo($select=UserName),Iteration($select=IterationPath),Area($select=AreaPath),"        
            &"Descendants("
                &"$apply=filter(WorkItemType eq 'Bug')"
                &"/aggregate($count as CountOfBugs)"
            &")", 
        null, [Implementation="2.0",OmitValues = ODataOmitValues.Nulls,ODataVersion = 4])  
in
    Source

(Opcional) Cambiar el nombre de la consulta

Puede cambiar el nombre de la etiqueta de consulta predeterminada, Query1, a algo más significativo. Simplemente escriba un nuevo nombre en el panel Configuración de consulta.

Captura de pantalla de las opciones del menú de consulta de Power BI, cambiar el nombre de la consulta.

Expansión de columnas en Power BI

La &$expand=AssignedTo($select=UserName), Iteration($select=IterationPath), Area($select=AreaPath) cláusula devuelve registros que contienen varios campos. Antes de crear el informe, debe expandir el registro para aplanarlo en campos específicos. En este caso, querrá expandir los registros siguientes:

  • AssignedTo
  • AreaPath
  • IterationPath

Para obtener información sobre cómo hacerlo, consulte Transformación de datos de Análisis para generar informes de Power BI.

(Opcional) Cambiar nombre de los campos

Una vez que haya expandido las columnas, puede que desee cambiar el nombre de uno o varios campos. Por ejemplo, puede cambiar el nombre de la columna AreaPath a Area Path. Para obtener información sobre cómo hacerlo, consulte Cambiar el nombre de los campos de columna.

Reemplazar valores NULL en campos acumulativos

Si un elemento de trabajo no tiene elementos secundarios, el valor acumulativo puede ser NULL. Por ejemplo, Descendants.CountOfUserStories es "null" si una característica no tiene historias de usuario secundarias.

Para facilitar la creación de informes, reemplace todos los valores NULL por cero siguiendo estos pasos.

  1. Seleccione la columna haciendo clic en el encabezado de columna.
  2. Seleccione el menú Transformar .
  3. Seleccione Reemplazar valores. Aparece el cuadro de diálogo Reemplazar valores .
  4. Escriba "null" en Valor para buscar.
  5. Escriba "0" en Reemplazar por.
  6. Elija Aceptar.

Repita para todas las columnas de acumulación.

Cierre la consulta y aplique los cambios

Una vez que haya completado todas las transformaciones de datos, elija Cerrar y aplicar en el menú Inicio para guardar la consulta y volver a la pestaña Informe en Power BI.

Captura de pantalla de Editor de Power Query opción Cerrar y aplicar.

Creación del informe de tabla

  1. En Power BI, elija el informe Tabla en Visualizaciones.

    Captura de pantalla de las selecciones visualizaciones y campos de Power BI para el informe de tabla de acumulación.

  2. Agregue los siguientes campos a Columnas en el orden indicado:

    • WorkItemI, elija No resumir para mostrar el identificador si es necesario.
    • WorkItemType
    • Title
    • State
    • Count of User Stories
    • Total Story Points.

Se muestra el informe de ejemplo.

Captura de pantalla del informe de matriz de acumulación de características de ejemplo.