Delen via


Waarden van onderliggende werkitems samenvouwen naar bovenliggend voorbeeldrapport

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

Samenvouwen biedt ondersteuning voor het weergeven van het aantal werkitems of de som van verhaalpunten, resterende hoeveelheid werk of een ander aangepast veld van onderliggende items. Dit artikel bevat verschillende voorbeelden van het genereren van een tabellair rollup-rapport voor Epics, Functies of Gebruikersverhalen die onderliggende werkitems bevatten. In de volgende afbeelding ziet u een voorbeeld van verhaalpunten die zijn samengeteld voor de bovenliggende functies.

Schermopname van het matrixrapport voor onderdelenrollup.

Zie Voortgang van samenvouwen of totalen weergeven in Azure Boards voor meer informatie over samenvouwen en opties om samenvouwen weer te geven.

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 volgende query's retourneren gegevens van de WorkItems entiteitsset ter ondersteuning van het genereren van samengetelde matrixrapporten.

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.

Samengevouwen verhaal verwijst naar functies van onderliggende gebruikersverhalen op basis van 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 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

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}' 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 gesloten bugs weg.

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

Retourneer werkitems onder een specifiek gebiedspad, waarbij items worden vervangen Area/AreaPath eq '{areapath}' door een specifiek gebiedspad. Als u wilt filteren op teamnaam, gebruikt u de filterinstructie Teams/any(x:x/TeamName eq '{teamname})'.

and Descendants/any()

Neem alle functies op, zelfs de functies zonder gebruikersverhalen. Vervang door 'any(d:d/WorkItemType eq 'User Story')' om functies weg te laten die geen onderliggende gebruikersverhalen hebben.

&$select=WorkItemId, Title, WorkItemType, State

Selecteer velden die u wilt retourneren.

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

Selecteer uitvouwbare eigenschapsvelden AssignedTo, Iteration. Area

Descendants(

Vouw de Descendants component uit.

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

Filter de afstammelingen zodat ze alleen gebruikersverhalen bevatten (laat taken en bugs weg).

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

Voor alle afstammelingen die overeenkomen met de filtercomponent, telt u deze op en telt u de eigenschap op StoryPoints .

)

Sluiten Descendants().

Samengevouwen verhaal verwijst naar functies van onderliggende gebruikersverhalen op basis van Teams

De volgende query's laten zien hoe u samengetelde rapporten genereert die filteren 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=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

Rollup Story verwijst naar Epics

U kunt verhaalpunten naar Epics samenvouwen met behulp van de volgende query's.

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 '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

Resterende hoeveelheid werk en voltooid werk voor gebruikersverhalen

In de volgende query ziet u hoe u resterende hoeveelheid werk en voltooid werk samentelt dat is toegewezen aan onderliggende taken aan gebruikersverhalen in de hiƫrarchie. Bij deze query's wordt ervan uitgegaan dat taken worden toegewezen als onderliggende elementen van een gebruikersverhaal in het opgegeven 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 '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

Aantal samengetelde fouten voor functies

De volgende query's laten zien hoe u het aantal bugs dat is toegewezen aan functies samentelt. Bij deze query's wordt ervan uitgegaan dat bugs zijn gedefinieerd als onderliggende elementen van een functie in het opgegeven 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,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

(Optioneel) Naam van query wijzigen

U kunt de naam van het standaardquerylabel Query1 wijzigen in iets zinvoller. Voer gewoon een nieuwe naam in het deelvenster Queryinstellingen in.

Schermopname van menuopties voor Power BI-query's, naam van query wijzigen.

Kolommen uitvouwen in Power BI

De &$expand=AssignedTo($select=UserName), Iteration($select=IterationPath), Area($select=AreaPath) component retourneert records die meerdere velden bevatten. Voordat u het rapport maakt, moet u de record uitbreiden om deze af te vlakken in specifieke velden. In dit geval wilt u de volgende records uitbreiden:

  • AssignedTo
  • AreaPath
  • IterationPath

Zie Transform Analytics-gegevens voor het genereren van Power BI-rapporten voor meer informatie.

(Optioneel) Naam van velden wijzigen

Zodra u de kolommen hebt uitgevouwen, kunt u de naam van een of meer velden wijzigen. U kunt bijvoorbeeld de naam van de kolom AreaPath wijzigen in Area Path. Zie Kolomvelden een andere naam geven.

Null-waarden in samengetelde velden vervangen

Als een werkitem geen onderliggende items heeft, is de samengetelde waarde mogelijk null. Descendants.CountOfUserStories is bijvoorbeeld null als een functie geen onderliggende gebruikersverhalen heeft.

Voor eenvoudigere rapportage vervangt u alle null-waarden door nul door deze stappen uit te voeren.

  1. Selecteer de kolom door op de kolomkop te klikken.
  2. Selecteer het menu Transformeren .
  3. Selecteer Waarden vervangen. Het dialoogvenster Waarden vervangen wordt weergegeven.
  4. Voer 'null' in waarde in om te zoeken.
  5. Voer '0' in Vervangen door in.
  6. Kies OK.

Herhaal dit voor alle samengetelde kolommen.

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 tabelrapport maken

  1. Kies in Power BI het tabelrapport onder Visualisaties.

    Schermopname van Selecties van Power BI-visualisaties en -velden voor het rapport Samengetelde tabellen.

  2. Voeg de volgende velden toe aan Kolommen in de aangegeven volgorde:

    • WorkItemI, kies Niet samenvatten om de id indien nodig weer te geven
    • WorkItemType
    • Title
    • State
    • Count of User Stories
    • Total Story Points.

Het voorbeeldrapport wordt weergegeven.

Schermopname van het matrixrapport Voorbeeldfunctiepakket.