Dela via


Sammanslagning av underordnade arbetsobjektvärden till en överordnad exempelrapport

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

Sammanslagning ger stöd för att visa antalet arbetsobjekt eller summan av artikelpunkter, återstående arbete eller annat anpassat fält med underordnade objekt. Den här artikeln innehåller flera exempel på hur du genererar en samlad tabellrapport för epos, funktioner eller användarberättelser som innehåller underordnade arbetsobjekt. Följande bild visar ett exempel på storypunkter som har rullats upp för deras överordnade funktioner.

Skärmbild av rapport över sammanslagningsmatris för funktioner.

Mer information om sammanslagning och alternativ för att visa sammanslagning finns i Visa sammanslagningsförlopp eller summor i Azure Boards.

Kommentar

Den här artikeln förutsätter att du läser Översikt över exempelrapporter med OData-frågor och har en grundläggande förståelse för Power BI.

Förutsättningar

  • Åtkomst: Vara medlem i ett projekt med minst grundläggande åtkomst.
  • Behörigheter: Som standard har projektmedlemmar behörighet att fråga Analytics och skapa vyer.
  • Mer information om andra förutsättningar för tjänst- och funktionsaktivering och allmänna dataspårningsaktiviteter finns i Behörigheter och krav för åtkomst till analys.

Exempelfrågor

Följande frågor returnerar data från entitetsuppsättningen WorkItems som stöder generering av sammanslagningsmatrisrapporter.

Kommentar

Information om hur du fastställer tillgängliga egenskaper för filter- eller rapportändamål finns i Metadatareferens för Azure Boards. Du kan filtrera dina frågor eller returnera egenskaper med något av värdena Property under ett EntityType eller NavigationPropertyBinding Path flera värden som är tillgängliga med en EntitySet. Var och EntitySet en motsvarar en EntityType. Mer information om datatypen för varje värde finns i metadata för motsvarande EntityType.

Sammanslagningsberättelse pekar på funktioner i underordnade användarberättelser baserat på områdessökväg

Kopiera och klistra in följande Power BI-fråga direkt i fönstret Hämta data>tom fråga. Mer information finns i Översikt över exempelrapporter med OData-frågor.

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

Ersättningssträngar och frågeuppdelning

Ersätt följande strängar med dina värden. Ta inte med hakparenteser {} med din ersättning. Om ditt organisationsnamn till exempel är "Fabrikam" ersätter du {organization} med Fabrikam, inte {Fabrikam}.

  • {organization} – Organisationens namn
  • {project} – Namnet på ditt teamprojekt, eller utelämna "/{project}" helt, för en fråga mellan projekt
  • {areapath} - Din områdessökväg. Exempelformat: Project\Level1\Level2.

Frågeuppdelning

I följande tabell beskrivs varje del av frågan.

Frågedel

Beskrivning

$filter=WorkItemType eq 'Feature'

Returnera funktioner.

and State ne 'Cut'

Utelämna stängda buggar.

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

Returnera arbetsobjekt under en specifik områdessökväg och ersätt Area/AreaPath eq '{areapath}' returnerar objekt på en specifik områdessökväg. Om du vill filtrera efter gruppnamn använder du filtersatsen Teams/any(x:x/TeamName eq '{teamname})'.

and Descendants/any()

Inkludera alla funktioner, även de som saknar användarberättelser. Ersätt med "any(d:d/WorkItemType eq 'User Story')" för att utelämna funktioner som inte har underordnade användarberättelser.

&$select=WorkItemId, Title, WorkItemType, State

Välj fält som ska returneras.

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

Välj utökningsbara egenskapsfält AssignedTo, Iteration, Area.

Descendants(

Descendants Expandera -satsen.

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

Filtrera underordnade så att de endast innehåller Användarberättelser (utelämnar uppgifter och buggar).

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

För alla underordnade som matchar filtersatsen räknar du dem och summerar StoryPoints egenskapen.

)

Stäng Descendants().

Sammanslagningsberättelser pekar på funktioner i underordnade användarberättelser baserat på Teams

Följande frågor visar hur du genererar sammanslagningsrapporter som filtreras efter gruppnamn i stället för Områdessökväg.

Kopiera och klistra in följande Power BI-fråga direkt i fönstret Hämta data>tom fråga. Mer information finns i Översikt över exempelrapporter med OData-frågor.

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

Sammanslagningsberättelse pekar på epos

Du kan sammanslagningsberättelsen pekar på Epics med hjälp av följande frågor.

Kopiera och klistra in följande Power BI-fråga direkt i fönstret Hämta data>tom fråga. Mer information finns i Översikt över exempelrapporter med OData-frågor.

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

Sammanslagning av återstående arbete och slutfört arbete till användarberättelser

Följande fråga visar hur du samlade återstående arbete och slutfört arbete som tilldelats underordnade aktiviteter till Användarberättelser i hierarkin. Dessa frågor förutsätter att Uppgifter tilldelas som underordnade till en användarberättelse i den angivna områdessökvägen.

Kopiera och klistra in följande Power BI-fråga direkt i fönstret Hämta data>tom fråga. Mer information finns i Översikt över exempelrapporter med OData-frågor.

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

Sammanslagning av buggantal till funktioner

Följande frågor visar hur du samlar antalet buggar som tilldelats funktioner. Dessa frågor förutsätter att buggar definieras som underordnade till en funktion i den angivna områdessökvägen.

Kopiera och klistra in följande Power BI-fråga direkt i fönstret Hämta data>tom fråga. Mer information finns i Översikt över exempelrapporter med OData-frågor.

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

(Valfritt) Byt namn på fråga

Du kan byta namn på standardfrågans etikett, Query1, till något mer meningsfullt. Ange bara ett nytt namn i fönstret Frågeinställningar .

Skärmbild av alternativ för Power BI-frågemenyer, byt namn på fråga.

Expandera kolumner i Power BI

Satsen &$expand=AssignedTo($select=UserName), Iteration($select=IterationPath), Area($select=AreaPath) returnerar poster som innehåller flera fält. Innan du skapar rapporten måste du expandera posten för att platta ut den till specifika fält. I det här fallet vill du expandera följande poster:

  • AssignedTo
  • AreaPath
  • IterationPath

Mer information finns i Transformera analysdata för att generera Power BI-rapporter.

(Valfritt) Byt namn på fält

När du har expanderat kolumnerna kanske du vill byta namn på ett eller flera fält. Du kan till exempel byta namn på kolumnen AreaPath till Area Path. Mer information finns i Byt namn på kolumnfält.

Ersätt null-värden i sammanslagningsfält

Om ett arbetsobjekt inte har några underordnade objekt kan sammanslagningsvärdet vara null. Till exempel är Descendants.CountOfUserStories "null" om en funktion inte har några underordnade användarberättelser.

För enklare rapportering ersätter du alla null-värden med noll genom att följa dessa steg.

  1. Välj kolumnen genom att klicka på kolumnrubriken.
  2. Välj menyn Transformera.
  3. Välj Ersätt värden. Dialogrutan Ersätt värden visas.
  4. Ange "null" i Värde för att hitta.
  5. Ange "0" i Ersätt med.
  6. Välj OK.

Upprepa för alla sammanslagningskolumner.

Stäng frågan och tillämpa ändringarna

När du har slutfört alla dina datatransformeringar väljer du Stäng och använd startmenyn för att spara frågan och återgå till fliken Rapport i Power BI.

Skärmbild av alternativet stäng och tillämpa Power Query-redigeraren.

Skapa tabellrapporten

  1. I Power BI väljer du tabellrapporten under Visualiseringar.

    Skärmbild av power BI-visualiseringar och fältval för sammanslagningstabellrapport.

  2. Lägg till följande fält i Kolumner i den angivna ordningen:

    • WorkItemIväljer du Sammanfatta inte för att visa ID om det behövs
    • WorkItemType
    • Title
    • State
    • Count of User Stories
    • Total Story Points.

Exempelrapporten visas.

Skärmbild av rapporten exempel på sammanslagningsmatris för funktioner.