Beispielbericht zum Featurefortschrittsrollup

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

In diesem Artikel wird gezeigt, wie Sie einen Bericht mit gestapelten Balkendiagrammen erstellen, um den Fortschritt von Features basierend auf abgeschlossenen untergeordneten User Storys anzuzeigen. Der Bericht zeigt den Abschlussprozentsatz nach Rollup von Story Points für eine bestimmte Reihe aktiver Features an. Sie können ähnliche Fortschrittsbalkendiagramme aus dem Backlog anzeigen, indem Sie eine Rollupspalte hinzufügen. Informationen zur Vorgehensweise finden Sie unter Anzeigen von Rollupstatus oder Summen.

Wenn Sie Rollupberichte mithilfe von Power BI erstellen, treten möglicherweise Probleme im Zusammenhang mit geschachtelten Daten in Ihren Datasets auf. Insbesondere der Versuch, eine Tabelle zu pivotieren, die Spalten mit geschachtelten Daten enthält, kann zu einer Fehlermeldung führen. Weitere Informationen finden Sie im Abschnitt zum Umgang mit geschachtelten Daten.

Voraussetzungen

Kategorie Anforderungen
Zugriffsebenen - Projektmitglied.
– Mindestens einfacher Zugriff.
Erlaubnisse Standardmäßig verfügen Projektmitglieder über die Berechtigung zum Abfragen von Analysen und Erstellen von Ansichten. Weitere Informationen zu anderen Voraussetzungen für die Dienst- und Featureaktivierung sowie allgemeine Datenverfolgungsaktivitäten finden Sie unter Berechtigungen und Voraussetzungen für den Zugriff auf Analytics.

Hinweis

In diesem Artikel wird davon ausgegangen, dass Sie Overview von Beispielberichten mithilfe von OData-Abfragen lesen und ein grundlegendes Verständnis von Power BI haben.

Beispielabfragen

Der Featurefortschritt fragt die WorkItems-Entität ab, um den aktuellen Status abzurufen.

Hinweis

Informationen zum Suchen verfügbarer Eigenschaften zum Filtern oder Melden finden Sie in der Metadata-Referenz für Azure Boards. Sie können Abfragen filtern oder Eigenschaften zurückgeben, indem Sie einen beliebigen Property Wert verwenden, der unter einem EntityTypeoder einem beliebigen NavigationPropertyBinding Path für ein EntitySetObjekt aufgeführten Wert definiert ist. Jede EntitySet entspricht einem EntityType, der den Datentyp für jede Eigenschaft dokumentiert.

Überprüfen des Featurefortschritts basierend auf einem Bereichspfad

Kopieren Sie die folgende Power BI Abfrage direkt in das Fenster Get Data>Blank Query. 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,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

Ersetzungszeichenfolgen und Abfrageaufschlüsselung

Ersetzen Sie die folgenden Zeichenfolgen durch Ihre Werte. Klammern nicht einschließen {} in Ihrer Ersetzung Wenn Ihr Organisationsname z. B. "Fabrikam" lautet, ersetzen Sie {organization} durch Fabrikam, nicht durch {Fabrikam}.

  • {organization} - Name Ihrer Organisation
  • {project} - Der Name Ihres Teamprojekts oder ganz ausgelassen /{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'

Zurückgeben von Funktionen

and State ne 'Removed'

Lassen Sie Features weg, die als entfernt markiert sind.

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

Arbeitsaufgaben unter einem bestimmten Bereichspfad zurückgeben. Durch ersetzen Area/AreaPath eq '{areapath}' gibt Elemente an einem bestimmten Bereichspfad zurück.
Verwenden Sie die Filteranweisung Teams/any(x:x/TeamName eq '{teamname}'), um nach Teamname zu filtern.

and Descendants/any()

Filtert alle Arbeitselemente heraus, die mindestens einen oder beliebige Nachfolger haben. Beinhaltet alle Features mit mindestens einem untergeordneten Arbeitselement. Führen Sie eine Abfrage ohne den Filter Descendants/any() aus, um alle Arbeitselemente mit ihren Nachfolgern abzurufen, auch wenn sie keine haben. Um Features ohne untergeordnete User Storys wegzulassen, ersetzen Sie die Angabe durch any(d:d/WorkItemType eq 'User Story').

Für alle Arbeitsaufgaben mit und ohne Nachfolger:

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

Für alle Arbeitsaufgaben mit mindestens einem untergeordneten Element:

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

&$select=WorkItemId, Title, WorkItemType, State

Wählen Sie die zurückzugebenden Eigenschaften aus.

&$expand=Descendants(

Beginn der expand-Klausel Descendants

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

Filtern Sie die Nachfolger. Nur Benutzergeschichten enthalten (Aufgaben und Fehler weglassen).

/groupby((StateCategory),

Gruppieren Sie das Rollup nach StateCategory. Weitere Informationen zu Statuskategorien finden Sie unter Verwenden von Workflowzuständen und Zustandskategorien in Backlogs und Boards.

aggregate(StoryPoints with sum as TotalStoryPoints))

Aggregierte Summe von Story Points.

)

Die Descendants()-Klausel schließen.

Überprüfung des Feature-Fortschritts eines Teams

Die folgende Abfrage ist identisch mit der zuvor verwendeten Abfrage, filtert jedoch nach Teamname und nicht nach Bereichspfad.

Kopieren Sie die folgende Power BI Abfrage direkt in das Fenster Get Data>Blank Query. 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=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

Transformieren der Daten in Power Query-Editor

Die Abfrage gibt mehrere Spalten zurück, die Sie erweitern müssen, bevor Sie sie zum Erstellen eines Berichts verwenden können. Jede Entität, die Sie mithilfe einer OData -$expand-Anweisung abrufen, gibt einen Datensatz mit potenziell mehreren Feldern zurück. Erweitern Sie den Datensatz, um die Entität in den Feldern zu vereinfachen.

Führen Sie für den Bericht "Feature-Fortschritt" die folgenden Transformationen aus:

  • Erweitern Sie die Descendants Spalte in zwei Spalten: Descendants.StateCategory und Descendants.TotalStoryPoints.
  • Wenden Sie die Pivotspaltentransformation auf die Descendants.StateCategory Spalte an, um einzelne Statuskategorien zu trennen.
  • Ersetzen Sie Nullwerte in allen pivotierten Spalten.
  • Fügen Sie eine benutzerdefinierte Spalte hinzu, die den Fertigstellungsgrad darstellt. In der benutzerdefinierten Spalte werden Fehler angezeigt, wenn in den pivotierten Statusspalten NULL-Spalten vorhanden sind.

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

Umgang mit verschachtelten Daten

Stellen Sie vor dem Ausführen eines Pivotvorgangs sicher, dass ihr Dataset keine Spalten mit geschachtelten Daten enthält. Folgen Sie diesen Schritten:

  1. Verschachtelte Spalten identifizieren: Überprüfen Sie Ihr Dataset auf Spalten, die Listen, Datensätze oder Tabellen in einer einzelnen Zelle enthalten könnten.
  2. Blaten oder entfernen Sie geschachtelte Daten: Entfernen Sie die geschachtelten Spalten, oder flachen Sie sie, indem Sie mithilfe des Features Expand in Power Query in separate Spalten erweitern.
  3. Führen Sie den Pivotvorgang aus: Nachdem Sie die geschachtelten Daten adressiert haben, können Sie mit dem Pivotvorgang fortfahren, ohne dass Fehler auftreten.

Hinweis

In diesem Beispiel umfassen die Statuswerte für die User Story die Werte Vorgeschlagen, In Bearbeitung, und Abgeschlossen.

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

Nach Abschluss aller Datentransformationen Schließen & Übernehmen im Start-Menü auswählen. Diese Aktion speichert die Abfrage und gibt Sie in Power BI zur Registerkarte Report zurück.

Screenshot der Option

Erstellen Sie den gestapelten Balkendiagrammbericht

  1. Wählen Sie in Power BI Stacked-Balkendiagramm unter Visualizations aus.

    Screenshot: Auswahl der Power BI-Visualisierungen und -Felder für den Bericht mit gestapeltem Balkendiagramm zum Featurefortschritt

  2. Fügen Sie Title zur Y-Achse hinzu.

  3. Fügen Sie PercentComplete zu X-Achse hinzu, klicken Sie mit der rechten Maustaste, und wählen Sie Summe aus.

Der Beispielbericht wird angezeigt.

Screenshot des Berichts über den Fortschritt des Beispielfeatures im gestapelten Balkendiagramm.