Informe de ejemplo de la versión de burndown

Azure DevOps Services | Azure DevOps Server 2020 | Azure DevOps Server 2019

En este artículo se muestra cómo mostrar la lista de casos de usuario de una versión basada en elementos de trabajo etiquetados con una etiqueta de versión. En la imagen siguiente se muestra un resumen tanto por puntos de historia como por recuento de casos de usuario.

Sample - Release Burndown - Report

Nota

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

Requisitos previos

  • Debe ser miembro de un proyecto con acceso Básico o superior. Si no se ha agregado como miembro del proyecto, ahora se le agregará. Cualquier persona con acceso al proyecto, excepto las partes interesadas, puede ver las vistas de Analytics.
  • Para que los datos de Analytics estén disponibles, se debe habilitar el servicio correspondiente. Por ejemplo, para consultar los datos de seguimiento del trabajo, Boards debe estar habilitado. Si está deshabilitada, no se mostrarán las vistas de Analytics. Para volver a habilitar un servicio, consulte Activación o desactivación de Azure DevOps servicio de mantenimiento.
  • Para usar vistas de Analytics,habilite la característica vista previa vistas de Analytics para usuarios individuales o para la organización.
  • Además, debe tener el permiso *View Analytics establecido en Permitir. Para más información, consulte Concesión de permisos para acceder al servicio Analytics.
  • Para usar Power BI para Azure DevOps o para ejecutar una consulta de OData para Analytics, debe tener el permiso de View Analytics establecido en Permitir. De forma predeterminada, se concede acceso a todos los colaboradores con acceso Básico. Para editar vistas compartidas de Analytics,debe tener el permiso * Editar vistascompartidas de Analytics establecido en Permitir. Para más información, consulte Concesión de permisos para acceder al servicio Analytics.
  • Debe ser miembro de un proyecto con acceso Básico o superior. Si no se ha agregado como miembro del proyecto, ahora se le agregará. Cualquier persona con acceso al proyecto, excepto las partes interesadas, puede ver las vistas de Analytics.
  • Compruebe que Analytics está instalado y, si no es así, habilite esta opción. Debe ser propietario de la cuenta o miembro del grupo administrador de Project recopilación para agregar extensiones o habilitar el servicio.
  • Para que los datos de Analytics estén disponibles, se debe habilitar el servicio correspondiente. Por ejemplo, para consultar los datos de seguimiento del trabajo, Boards debe estar habilitado. Si está deshabilitada, no se mostrarán las vistas de Analytics. Para volver a habilitar un servicio, consulte Activación o desactivación de Azure DevOps servicio de mantenimiento.
  • Para usar vistas de Analytics,habilite la característica vista previa vistas de Analytics para usuarios individuales o para la organización.
  • Además, debe tener el permiso *View Analytics establecido en Permitir. Para más información, consulte Concesión de permisos para acceder al servicio Analytics.
  • Para usar Power BI para Azure DevOps o para ejecutar una consulta de OData para Analytics, debe tener el permiso de View Analytics establecido en Permitir. De forma predeterminada, se concede acceso a todos los colaboradores con acceso Básico. Para editar vistas compartidas de Analytics,debe tener el permiso Editar vistas compartidas de Analytics establecido en Permitir. Para más información, consulte Concesión de permisos para acceder al servicio Analytics.

Consultas de ejemplo

Puede pegar la consulta Power BI siguiente directamente en la ventana Obtener datos: consulta en blanco. Para obtener más información, consulte Información general de informes de ejemplo mediante consultas de OData.

let
   Source = OData.Feed ("https://analytics.dev.azure.com/{organization}/{project}/_odata/v3.0-preview/WorkItemSnapshot?"
        &"$apply=filter(WorkItemType eq 'User Story' "
            &"and StateCategory ne 'Completed' "
            &"and startswith(Area/AreaPath,'{areapath}') "
            &"and Tags/any(x:x/TagName eq '{tagname}') "
            &"and DateValue ge {startdate} "
            &"and DateValue le {enddate} "
        &") "
        &"/groupby ( "
            &"(DateValue,State,Area/AreaPath), "
            &"aggregate ($count as Count, StoryPoints with sum as TotalStoryPoints) "
        &") "
    ,null, [Implementation="2.0",OmitValues = ODataOmitValues.Nulls,ODataVersion = 4]) 
in
    Source

Cadenas de sustitución

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

  • {organization} - Nombre de la organización
  • {project} - El nombre del proyecto de equipo u omite "/{project}" por completo para una consulta entre proyectos
  • {areapath} : la ruta de acceso del área. Formato de ejemplo: Project\Level1\Level2 .
  • {tag} : etiqueta que representa la versión. Todos los elementos de trabajo {tagname} etiquetados con se incluyen en el informe.
  • {startdate} : la fecha en la que se inicia el informe de grabación.
  • {enddate} : la fecha en la que se finaliza el informe de reducción de datos.

Desglose de consultas

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

Elemento de consulta

Descripción

$apply=filter(WorkItemType eq 'User Story'

Incluir casos de usuario en la grabación.

and StateCategory ne 'Completed'

Filtra los elementos que se completan. Para obtener más información sobre las categorías de estado, vea How workflow states and state categories are used in Backlogs and Boards(Cómo se usan los estados de flujo de trabajo y las categorías de estado en los backlogs y Boards).

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

Elementos de trabajo en una ruta de acceso de área específica. Reemplazar por devuelve Area/AreaPath eq '{areapath}' elementos en una ruta de acceso de área específica.

Para filtrar por nombre de equipo, use la instrucción filter. Teams/any(x:x/TeamName eq '{teamname})'

and Tags/any(x:x/TagName eq '{tagname}').

Especifica la etiqueta que representa la versión que se grabará y para incluir todos los elementos de trabajo etiquetados con {tagname} en el informe.

and DateValue ge {startdate}

Inicie la grabación en o después de la fecha especificada. Ejemplo: 2019-04-01Z representa 2019-Abril-01.

and DateValue le {enddate}

Inicie la grabación en o antes de la fecha especificada. El mismo formato que {startdate}.

)

Cierre filter().

/groupby (

Inicie groupby().

(DateValue, State, Area/AreaPath),

Agrupar por DateValue (se usa para las tendencias) y los campos sobre los que quiera informar.

aggregate ($count as Count, StoryPoints with sum as TotalStoryPoints)

Agregar por recuento de casos de usuario y suma de puntos de historia.

)

Cierre groupby().

Filtros de consulta

Para determinar los filtros de consulta disponibles, consulte los metadatos como se describe en Exploración de los metadatos de OData de Analytics. Puede filtrar las consultas mediante cualquiera de los valores de NavigationPropertyBinding Path enumerados en entitySet. Para obtener más información sobre el tipo de datos de cada valor, revise los metadatos proporcionados para el entityType correspondiente. Cada EntitySet corresponde a entityType.

Por ejemplo, EntitySet Name="WorkItemSnapshot" corresponde a EntityType Name="WorkItemSnapshot". Los metadatos de OData para EntitySet Name="WorkItemSnapshot" se muestran a continuación para v4.0-preview. Puede agregar filtros basados en cualquiera de los valores de NavigationPropertyBinding Path enumerados.

<EntitySet Name="WorkItemSnapshot" EntityType="Microsoft.VisualStudio.Services.Analytics.Model.WorkItemSnapshot">
  <NavigationPropertyBinding Path="Date" Target="Dates"/>
  <NavigationPropertyBinding Path="RevisedOn" Target="Dates"/>
  <NavigationPropertyBinding Path="Teams" Target="Teams"/>
  <NavigationPropertyBinding Path="Processes" Target="Processes"/>
  <NavigationPropertyBinding Path="Project" Target="Projects"/>
  <NavigationPropertyBinding Path="Area" Target="Areas"/>
  <NavigationPropertyBinding Path="Iteration" Target="Iterations"/>
  <NavigationPropertyBinding Path="AssignedTo" Target="Users"/>
  <NavigationPropertyBinding Path="ChangedBy" Target="Users"/>
  <NavigationPropertyBinding Path="CreatedBy" Target="Users"/>
  <NavigationPropertyBinding Path="ActivatedBy" Target="Users"/>
  <NavigationPropertyBinding Path="ClosedBy" Target="Users"/>
  <NavigationPropertyBinding Path="ResolvedBy" Target="Users"/>
  <NavigationPropertyBinding Path="Tags" Target="Tags"/>
  <NavigationPropertyBinding Path="ChangedOn" Target="Dates"/>
  <NavigationPropertyBinding Path="ClosedOn" Target="Dates"/>
  <NavigationPropertyBinding Path="CreatedOn" Target="Dates"/>
  <NavigationPropertyBinding Path="ResolvedOn" Target="Dates"/>
  <NavigationPropertyBinding Path="StateChangeOn" Target="Dates"/>
  <NavigationPropertyBinding Path="InProgressOn" Target="Dates"/>
  <NavigationPropertyBinding Path="CompletedOn" Target="Dates"/>
</EntitySet>

Power BI transformaciones

Expandir columnas Area, Iteration, AssignedTo

La consulta devuelve varias columnas que debe expandir para poder usarlas en Power BI. Cualquier entidad que se extraía mediante una instrucción $expand OData devuelve un registro con potencialmente varios campos. Debe expandir el registro para aplanar la entidad en sus campos. Algunos ejemplos de estas entidades son: AssignedTo, Iteration y Area.

Después de cerrar Editor avanzado y mientras permanece en el Editor de Power Query, seleccione el botón expandir de las entidades que necesita aplanar.

  1. Elija el botón expandir.

    Expand an entity column, Power BI + OData

  2. Seleccione los campos que desea aplanar.

    Select the fields to flatten.

  3. La tabla ahora contiene campos de entidad.

    The table now contains entity field(s).

  4. Repita los pasos del 1 al 3 para todos los campos que representan entidades: Área, Iteración, AsignadoTo.

Cambie el nombre de los campos y la consulta y, a continuación, cierre & Aplicar.

Cuando termine, puede cambiar el nombre de las columnas.

  1. Haga clic con el botón derecho en un encabezado de columna y seleccione Cambiar nombre...

    Power BI Rename Columns

  2. También puede cambiar el nombre de la consulta del valor predeterminado Query1a algo más significativo.

    Power BI Rename Query

  3. Una vez hecho esto, elija Cerrar aplicar para guardar la consulta y volver a Power BI.

    Power BI Close & Apply

Creación del informe

Power BI muestra los campos sobre los que puede informar.

Nota

En el ejemplo siguiente se da por supuesto que nadie ha cambiado el nombre de ninguna columna.

Sample -Release Burndown - Fields

Para obtener un informe sencillo, realice los pasos siguientes:

  1. Seleccione Power BI gráfico de columnas agrupadas de visualización.
  2. Agregar el campo "DateValue" al eje
    • Haga clic con el botón derecho en "DateValue" y seleccione "DateValue", en lugar de Jerarquía de fechas.
  3. Agregue el campo "TotalStoryPoints" a Valores.
  4. Agregar el campo "Count" a Valores

En el informe de ejemplo se muestra el resumen de los puntos de historia y el recuento de historias.

The example report displays burndown on Story Points and Count of Stories.

Para dinamizado por ruta de acceso de área, realice los pasos siguientes:

  1. Seleccione Power BI gráfico de barras apiladas de visualización.
  2. Agregue el campo "DateValue" al eje.
    • Haga clic con el botón derecho en "DateValue" y seleccione "DateValue", en lugar de Jerarquía de fechas.
  3. Agregue el campo "TotalStoryPoints" o "Count" a Valores. No puede tener dos campos en Valores.
  4. Agregue el campo "Area.AreaPath" a Leyenda.

En el informe de ejemplo se muestra la reducción dinámica por ruta de acceso de área.

The example report displays burndown pivoted by Area Path.

Para dinamizar la grabación por estado, agregue el campo "Estado" a Valores,reemplazando "Area.AreaPath".

To pivot the burndown by State, add the field

Extracción de datos de varios equipos

A menudo, quiere agregar y comparar datos de varios equipos. Si va a extraer elementos de varios equipos, considere la posibilidad de agregar una segmentación de equipos al informe. Una segmentación de equipos permite filtrar el informe existente por nombre de equipo.

Consultas adicionales

Puede usar las siguientes consultas adicionales para crear informes diferentes pero similares mediante los mismos pasos definidos anteriormente en este artículo.

Filtrar por Teams, en lugar de ruta de acceso de área

Esta consulta es la misma que la usada anteriormente, salvo que filtra por nombre de equipo en lugar de ruta de acceso de área.

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

let
   Source = OData.Feed ("https://analytics.dev.azure.com/{organization}/{project}/_odata/v3.0-preview/WorkItemSnapshot?"
        &"$apply=filter(WorkItemType eq 'User Story' "
            &"and StateCategory ne 'Completed' "
            &"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 Tags/any(x:x/TagName eq '{tagname}') "
            &"and DateValue ge {startdate} "
            &"and DateValue le {enddate} "
        &") "
        &"/groupby ( "
            &"(DateValue,State,Area/AreaPath), "
            &"aggregate ($count as Count, StoryPoints with sum as TotalStoryPoints) "
        &") "
    ,null, [Implementation="2.0",OmitValues = ODataOmitValues.Nulls,ODataVersion = 4]) 
in
    Source

Grabación con una instantánea todos los viernes

El uso de una instantánea semanal reduce la cantidad de datos que se extraen en Power BI y aumenta el rendimiento de las consultas.

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

let
   Source = OData.Feed ("https://analytics.dev.azure.com/{organization}/{project}/_odata/v3.0-preview/WorkItemSnapshot?"
        &"$apply=filter(WorkItemType eq 'User Story' "
            &"and StateCategory ne 'Completed' "
            &"and startswith(Area/AreaPath,'{areapath}') "
            &"and Tags/any(x:x/TagName eq '{tagname}') "
            &"and DateValue ge {startdate} "
            &"and DateValue le {enddate} "
            &"and Date/DayName eq 'Friday' "
        &") "
        &"/groupby ( "
            &"(DateValue,State,Area/AreaPath,AreaSK), "
            &"aggregate ($count as Count, StoryPoints with sum as TotalStoryPoints) "
        &") "
    ,null, [Implementation="2.0",OmitValues = ODataOmitValues.Nulls,ODataVersion = 4]) 
in
    Source

Burndown basado en una ruta de iteración

Algunas organizaciones usan rutas de iteración para marcar los casos de una versión. Por ejemplo, pueden tener una ruta de acceso de iteración de MyProject\Release1. En la consulta siguiente se muestra cómo seleccionar Casos por ruta de iteración.

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

let
   Source = OData.Feed ("https://analytics.dev.azure.com/{organization}/{project}/_odata/v3.0-preview/WorkItemSnapshot?"
        &"$apply=filter(WorkItemType eq 'User Story' "
            &"and StateCategory ne 'Completed' "
            &"and startswith(Area/AreaPath,'{areapath}') "
            &"and startswith(Iteration/IterationPath,'{iterationpath}') "
            &"and DateValue ge {startdate} "
            &"and DateValue le {enddate} "
            &") "
        &"/groupby ( "
            &"(DateValue,StateCategory,State,Area/AreaPath,AreaSK), "
            &"aggregate ($count as Count, StoryPoints with sum as TotalStoryPoints) "
        &") "
    ,null, [Implementation="2.0",OmitValues = ODataOmitValues.Nulls,ODataVersion = 4]) 
in
    Source

Grabación basada en un campo personalizado

Algunas organizaciones usan un campo personalizado para marcar Casos para una versión. Por ejemplo, pueden tener un campo denominado "Hito". Esta consulta muestra cómo seleccionar Casos por un campo personalizado. Tendrá que reemplazar y en {customfield}{releasevalue} la consulta. Para determinar el nombre del campo personalizado, explore los metadatos de Analytics. Usará el nombre de propiedad como {customfield} .

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

let
   Source = OData.Feed ("https://analytics.dev.azure.com/{organization}/{project}/_odata/v3.0-preview/WorkItemSnapshot?"
        &"$apply=filter(WorkItemType eq 'User Story' "
            &"and StateCategory ne 'Completed' "
            &"and startswith(Area/AreaPath,'{areapath}') "
            &"and {customfieldname} eq '{releasevalue}' "
            &"and DateValue ge {startdate} "
            &"and DateValue le {enddate} "
            &") "
        &"/groupby ( "
            &"(DateValue,StateCategory,State,Area/AreaPath,AreaSK), "
            &"aggregate ($count as Count, StoryPoints with sum as TotalStoryPoints) "
        &") "
    ,null, [Implementation="2.0",OmitValues = ODataOmitValues.Nulls,ODataVersion = 4]) 
in
    Source

Lista completa de informes de ejemplo