Teilen über


Rollup untergeordneter Arbeitsaufgabenwerte in übergeordneten Beispielbericht

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

Rollup bietet Unterstützung zum Anzeigen einer Anzahl von Arbeitsaufgaben oder einer Summe von Story Points, Restarbeit oder einem anderen benutzerdefinierten Feld untergeordneter Elemente. Dieser Artikel enthält mehrere Beispiele zum Generieren eines tabellarischen Rollupberichts für Epics, Features oder User Stories, die untergeordnete Arbeitsaufgaben enthalten. Die folgende Abbildung zeigt ein Beispiel für das Rollup von Story Points für die übergeordneten Features.

Screenshot des Berichts

Weitere Informationen zum Rollup und zu Optionen zum Anzeigen des Rollups finden Sie unter Anzeigen des Rollupstatus oder der Summen in Azure Boards.

Hinweis

In diesem Artikel wird davon ausgegangen, dass Sie eine Übersicht über Beispielberichte mit OData-Abfragen lesen und ein grundlegendes Verständnis von Power BI haben.

Voraussetzungen

Beispielabfragen

Die folgenden Abfragen geben Daten aus dem WorkItems Entitätssatz zurück, um das Generieren von Rollupmatrixberichten zu unterstützen.

Hinweis

Informationen zum Ermitteln verfügbarer Eigenschaften für Filter- oder Berichtszwecke finden Sie unter Metadatenreferenz für Azure Boards. Sie können Ihre Abfragen filtern oder Eigenschaften zurückgeben, indem Sie einen der Werte unter oder NavigationPropertyBinding PathEntityType verwenden, die Property mit einem EntitySetverfügbar sind. Jede EntitySet entspricht einem EntityType. Weitere Informationen zum Datentyp der einzelnen Werte erhalten Sie in den Metadaten, die für den entsprechenden Wert EntityTypebereitgestellt werden.

Rollup Story Points to Features of child User Stories based on Area Path

Kopieren Sie die folgende Power BI-Abfrage, und fügen Sie sie direkt in das Fenster "Leere Datenabfrage> abrufen" ein. Weitere Informationen finden Sie unter Übersicht über Beispielberichte mit OData-Abfragen.

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

Ersetzungszeichenfolgen und Abfrageaufschlüsselung

Ersetzen Sie die folgenden Zeichenfolgen durch Ihre Werte. Schließen Sie keine Klammern {} in Ihre Ersetzung ein. Wenn Ihr Organisationsname beispielsweise "Fabrikam" lautet, ersetzen Sie {organization} durch Fabrikam, nicht {Fabrikam}.

  • {organization} - Name Ihrer Organisation
  • {project} - Der Name Ihres Teamprojekts oder das vollständige Auslassen von "/{project}" für eine projektübergreifende Abfrage
  • {areapath} - Ihr Bereichspfad. Beispielformat: Project\Level1\Level2.

Abfrageaufschlüsselung

In der folgenden Tabelle werden die einzelnen Teile der Abfrage beschrieben.

Abfrageteil

Beschreibung

$filter=WorkItemType eq 'Feature'

Gibt Features zurück.

and State ne 'Cut'

Lassen Sie geschlossene Fehler aus.

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

Zurückgeben von Arbeitsaufgaben unter einem bestimmten Bereichspfad durch Ersetzen Area/AreaPath eq '{areapath}' von Elementen in einem bestimmten Bereichspfad. Verwenden Sie die Filteranweisung Teams/any(x:x/TeamName eq '{teamname})', um nach Teamname zu filtern.

and Descendants/any()

Schließen Sie alle Features ein, auch die Features ohne Benutzergeschichten. Ersetzen Sie "any(d:d/WorkItemType eq 'User Story')", um Features auszulassen, die keine untergeordneten Benutzergeschichten enthalten.

&$select=WorkItemId, Title, WorkItemType, State

Wählen Sie felder aus, die zurückgegeben werden sollen.

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

Select expandable property fields AssignedTo, Iteration, Area.

Descendants(

Erweitern Sie die Descendants Klausel.

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

Filtern Sie die Nachfolger, um nur Benutzergeschichten einzuschließen (ohne Aufgaben und Fehler).

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

Zählen Sie für alle Nachfolger, die der Filterklausel entsprechen, und summieren Sie die StoryPoints Eigenschaft.

)

Schließen Sie Descendants().

Rollup Story Points to Features of child User Stories based on Teams

Die folgenden Abfragen zeigen, wie Rollupberichte nach Teamnamen und nicht nach Bereichspfad gefiltert werden.

Kopieren Sie die folgende Power BI-Abfrage, und fügen Sie sie direkt in das Fenster "Leere Datenabfrage> abrufen" ein. Weitere Informationen finden Sie unter Übersicht über Beispielberichte mit OData-Abfragen.

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 Points to Epics

Mithilfe der folgenden Abfragen können Sie Rollup-Storys auf Epics verweisen.

Kopieren Sie die folgende Power BI-Abfrage, und fügen Sie sie direkt in das Fenster "Leere Datenabfrage> abrufen" ein. Weitere Informationen finden Sie unter Übersicht über Beispielberichte mit OData-Abfragen.

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

Rollup-Vorgänge verbleibende Arbeit und abgeschlossene Arbeit für Benutzergeschichten

Die folgende Abfrage zeigt, wie Das Rollup verbleibender Arbeit und abgeschlossener Arbeit , die untergeordneten Aufgaben zu Benutzergeschichten in der Hierarchie zugewiesen ist. Bei diesen Abfragen wird davon ausgegangen, dass Aufgaben als untergeordnete Elemente eines Benutzerabschnitts im angegebenen Bereichspfad zugewiesen werden.

Kopieren Sie die folgende Power BI-Abfrage, und fügen Sie sie direkt in das Fenster "Leere Datenabfrage> abrufen" ein. Weitere Informationen finden Sie unter Übersicht über Beispielberichte mit OData-Abfragen.

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

Anzahl der Rollupfehler für Features

Die folgenden Abfragen zeigen, wie sie die Anzahl der Features zugewiesenen Fehler rollup. Bei diesen Abfragen wird davon ausgegangen, dass Fehler als untergeordnete Elemente eines Features im angegebenen Bereichspfad definiert sind.

Kopieren Sie die folgende Power BI-Abfrage, und fügen Sie sie direkt in das Fenster "Leere Datenabfrage> abrufen" ein. Weitere Informationen finden Sie unter Übersicht über Beispielberichte mit OData-Abfragen.

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

(Optional) Abfrage umbenennen

Sie können die Standardabfragebezeichnung Query1 in aussagekräftiger umbenennen. Geben Sie einfach im Bereich Abfrageeinstellungen einen neuen Namen ein.

Screenshot: Menüoptionen für Power BI-Abfragen, Abfrage umbenennen.

Erweitern von Spalten in Power BI

Die &$expand=AssignedTo($select=UserName), Iteration($select=IterationPath), Area($select=AreaPath) Klausel gibt Datensätze zurück, die mehrere Felder enthalten. Vor dem Erstellen des Berichts müssen Sie den Datensatz erweitern, um ihn in bestimmte Felder zu reduzieren. In diesem Fall sollten Sie die folgenden Datensätze erweitern:

  • AssignedTo
  • AreaPath
  • IterationPath

Informationen dazu finden Sie unter Transform Analytics-Daten zum Generieren von Power BI-Berichten.

(Optional) Umbenennen von Feldern

Nachdem Sie die Spalten erweitert haben, können Sie ein oder mehrere Felder umbenennen. Sie können z. B. die Spalte AreaPath umbenennen in Area Path. Informationen dazu finden Sie unter Umbenennen von Spaltenfeldern.

Ersetzen von Nullwerten in Rollupfeldern

Wenn für eine Arbeitsaufgabe keine untergeordneten Elemente vorhanden sind, kann der Rollupwert null sein. Beispiel: Descendants.CountOfUserStories ist "null", wenn ein Feature keine untergeordneten Benutzergeschichten enthält.

Um die Berichterstellung zu vereinfachen, ersetzen Sie alle NULL-Werte durch Null, indem Sie die folgenden Schritte ausführen.

  1. Wählen Sie die Spalte aus, indem Sie auf die Spaltenüberschrift klicken.
  2. Wählen Sie das Menü "Transformieren" aus.
  3. Wählen Sie "Werte ersetzen" aus. Das Dialogfeld "Werte ersetzen" wird angezeigt.
  4. Geben Sie "null" in "Wert" ein , um zu suchen.
  5. Geben Sie "0" in "Ersetzen durch" ein.
  6. Wählen Sie OK aus.

Wiederholen Sie diesen Vorgang für alle Rollupspalten.

Schließen Sie die Abfrage, und wenden Sie Ihre Änderungen an.

Nachdem Sie alle Datentransformationen abgeschlossen haben, wählen Sie "Schließen" und "Übernehmen " im Menü "Start " aus, um die Abfrage zu speichern und zur Registerkarte "Bericht " in Power BI zurückzukehren.

Screenshot der Option

Erstellen des Tabellenberichts

  1. Wählen Sie in Power BI den Tabellenbericht unter "Visualisierungen" aus.

    Screenshot der Auswahl von Power BI-Visualisierungen und -Feldern für den Rollup-Tabellenbericht.

  2. Fügen Sie die folgenden Felder in der angegebenen Reihenfolge zu Spalten hinzu:

    • WorkItemI, wählen Sie "Nicht zusammenfassen" aus, um bei Bedarf die ID anzuzeigen.
    • WorkItemType
    • Title
    • State
    • Count of User Stories
    • Total Story Points.

Der Beispielbericht wird angezeigt.

Screenshot des Beispiel-Featurerollupmatrixberichts.