Share via


Voorbeeldrapport voor het samenvouwen van functies

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

In dit artikel leest u hoe u een gestapeld staafrapport maakt om de voortgang van functies weer te geven op basis van voltooide onderliggende gebruikersverhalen. In het rapport wordt het percentage voltooid weergegeven door het samenvouwen van verhaalpunten voor een bepaalde set actieve functies. In de volgende afbeelding ziet u een voorbeeld.

Schermopname van het gestapelde staafdiagramrapport van de functievoortgang.

U kunt vergelijkbare voortgangsbalkdiagrammen uit uw achterstand bekijken door een samengetelde kolom toe te voegen. Zie Voortgang van samenvouwen of totalen weergeven voor meer informatie.

Notitie

In dit artikel wordt ervan uitgegaan dat u overzicht van voorbeeldrapporten leest met behulp van OData-query's en basiskennis hebt van Power BI.

Vereisten

Voorbeeldquery's

De voortgang van de functie voert query's uit op de WorkItems entiteit om de huidige status van de voortgang op te halen.

Notitie

Als u de beschikbare eigenschappen voor filter- of rapportdoeleinden wilt bepalen, raadpleegt u de naslaginformatie over metagegevens voor Azure Boards. U kunt uw query's filteren of eigenschappen retourneren met behulp van een van de Property waarden onder een EntityType of NavigationPropertyBinding Path waarden die beschikbaar zijn met een EntitySet. Elk EntitySet komt overeen met een EntityType. Raadpleeg voor meer informatie over het gegevenstype van elke waarde de metagegevens die voor de bijbehorende EntityTypewaarde zijn opgegeven.

De voortgang van de functie controleren op basis van een gebiedspad

Kopieer en plak de volgende Power BI-query rechtstreeks in het venster Lege query ophalen>. Zie Overzicht van voorbeeldrapporten met behulp van OData-query's voor meer informatie.

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,Area,Iteration,AssignedTo,WorkItemType,State,AreaSK"
            &"&$expand=Descendants( "
            &"$apply=filter(WorkItemType eq 'User Story') " 
                &"/groupby((StateCategory), "
                &"aggregate(StoryPoints with sum as TotalStoryPoints)) "
            &")  "
    ,null, [Implementation="2.0",OmitValues = ODataOmitValues.Nulls,ODataVersion = 4]) 
in
    Source

Uitsplitsing van tekenreeksen en query's vervangen

Vervang de volgende tekenreeksen door uw waarden. Neem geen vierkante haken {} op bij uw vervanging. Als de naam van uw organisatie bijvoorbeeld Fabrikam is, vervangt u door {organization} Fabrikam, niet {Fabrikam}.

  • {organization} - Naam van uw organisatie
  • {project} - De naam van uw teamproject of laat /{project} deze volledig weg voor een query voor meerdere projecten
  • {areapath} - Uw gebiedspad. Voorbeeldindeling: Project/Level1/Level2.

Uitsplitsing van query's

In de volgende tabel wordt elk deel van de query beschreven.

Queryonderdeel

Beschrijving


$filter=WorkItemType eq 'Feature'

Functies retourneren.

and State ne 'Cut'

Laat functies weg die zijn gemarkeerd als Knippen.

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

Werkitems retourneren onder een specifiek gebiedspad. Vervangen door Area/AreaPath eq '{areapath}' retourneert items in een specifiek gebiedspad.
Als u wilt filteren op teamnaam, gebruikt u de filterinstructie Teams/any(x:x/TeamName eq '{teamname})'.

and Descendants/any()

Filter alle werkitems met ten minste één of 'any' afstammeling. Bevat alle functies met ten minste één onderliggend werkitem. Als u alle werkitems met hun nakomelingen wilt ophalen, zelfs als ze er geen hebben, voert u een query uit zonder het Descendants/any() filter. Als u functies wilt weglaten die geen onderliggende gebruikersverhalen hebben, vervangt u door any(d:d/WorkItemType eq 'User Story').

Voor alle werkitems met en zonder afstammelingen:

$filter=endswith(Area/AreaPath,'suffix')
&$select=WorkItemId,Title,WorkItemType,State,Area, Descendants
&$expand=Descendants($select=WorkItemId)

Voor alle werkitems met ten minste één afstammeling:

$filter=endswith(Area/AreaPath, 'suffix')and Descendants/any()
&$select=WorkItemId,Title,WorkItemType,State,Area, Descendants
&$expand=Descendants($select=WorkItemId)

&$select=WorkItemId, Title, WorkItemType, State

Selecteer eigenschappen die u wilt retourneren.

&$expand=Descendants(

Begin van uitvouwcomponent Descendants

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

Filter de afstammelingen. Alleen gebruikersverhalen opnemen (taken en bugs weglaten).

/groupby((StateCategory),

Groepeer het samenvouwen op StateCategory. Zie Hoe werkstroomstatussen en statuscategorieën worden gebruikt in achterstanden en borden voor meer informatie over statuscategorieën.

aggregate(StoryPoints with sum as TotalStoryPoints))

Totale som van verhaalpunten.

)

Sluit Descendants() de component.

De voortgang van de functie voor een team bekijken

De volgende query is hetzelfde als de query die hierboven wordt gebruikt, behalve dat deze filtert op teamnaam in plaats van op gebiedspad.

Kopieer en plak de volgende Power BI-query rechtstreeks in het venster Lege query ophalen>. Zie Overzicht van voorbeeldrapporten met behulp van OData-query's voor meer informatie.

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=Descendants( "
            &"$apply=filter(WorkItemType eq 'User Story') "
                &"/groupby((StateCategory), "
                &"aggregate(StoryPoints with sum as TotalStoryPoints)) "
            &")  "
    ,null, [Implementation="2.0",OmitValues = ODataOmitValues.Nulls,ODataVersion = 4]) 
in
    Source

De gegevens in Power Query-editor transformeren

De query retourneert verschillende kolommen die u moet uitvouwen voordat u ze kunt gebruiken om een rapport te maken. Elke entiteit die wordt opgehaald met behulp van een OData $expand instructie retourneert een record met mogelijk meerdere velden. Vouw de record uit om de entiteit plat te maken in de velden.

Voor het rapport Voortgang van functies moet u de volgende transformaties uitvoeren:

  • Vouw de Descendants kolom uit in twee kolommen: Descendants.StateCategory en Descendants.TotalStoryPoints
  • Transformatie van draaikolom toepassen op Descendants.StateCategory kolom om afzonderlijke statuscategorieën te scheiden
  • Vervang null-waarden in alle gedraaide kolommen.
  • Voeg een aangepaste kolom toe om het percentage voltooid weer te geven. In de aangepaste kolom worden fouten weergegeven als er null-kolommen in de kolommen Status zijn.

Zie de volgende secties in Transform Analytics-gegevens om Power BI-rapporten te genereren voor meer informatie:

Notitie

In dit voorbeeld bevatten de statuswaarden voor Gebruikersverhaal Voorgesteld, Wordt uitgevoerd en Voltooid.

Sluit de query en pas uw wijzigingen toe

Zodra u al uw gegevenstransformaties hebt voltooid, kiest u Sluiten en toepassen in het menu Start om de query op te slaan en terug te keren naar het tabblad Rapport in Power BI.

Schermopname van Power Query-editor optie Sluiten en toepassen.

Het gestapelde staafdiagramrapport maken

  1. Kies in Power BI een gestapeld staafdiagramrapport onder Visualisaties.

    Schermopname van selecties van Power BI-visualisaties en -velden voor een gestapeld staafdiagramrapport met functies.

  2. Toevoegen Title aan Y-as.

  3. Toevoegen PercentComplete aan X-as, met de rechtermuisknop klikken en Som selecteren.

Het voorbeeldrapport wordt weergegeven.

Schermopname van het gestapelde staafdiagramrapport voorbeeldfunctievoortgang.