Udostępnij za pośrednictwem


Zbiorcze wartości podrzędnych elementów roboczych do nadrzędnego przykładowego raportu

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

Pakiet zbiorczy zapewnia obsługę wyświetlania liczby elementów roboczych lub sumy punktów historii, pracy pozostałej lub innego pola niestandardowego elementów podrzędnych. Ten artykuł zawiera kilka przykładów generowania tabelarycznego raportu zbiorczego dla epików, funkcji lub scenariuszy użytkownika zawierających podrzędne elementy robocze. Na poniższej ilustracji przedstawiono przykład punktów scenariuszy zwijanych dla ich nadrzędnych funkcji.

Zrzut ekranu przedstawiający raport macierzy zestawienia funkcji.

Aby uzyskać więcej informacji na temat zestawienia i opcji wyświetlania zestawienia, zobacz Wyświetlanie postępu zestawienia lub sum w usłudze Azure Boards.

Uwaga

W tym artykule założono, że zapoznasz się z omówieniem przykładowych raportów przy użyciu zapytań OData i masz podstawową wiedzę na temat usługi Power BI.

Wymagania wstępne

Przykładowe zapytania

Następujące zapytania zwracają dane z WorkItems zestawu jednostek, aby obsługiwać generowanie raportów macierzy zestawień.

Uwaga

Aby określić dostępne właściwości dla celów filtru lub raportu, zobacz Dokumentacja metadanych dla usługi Azure Boards. Możesz filtrować zapytania lub zwracać właściwości przy użyciu dowolnej z Property wartości dostępnych EntityType w elemecie EntitySetlub NavigationPropertyBinding Path . Każda z nich EntitySet odpowiada elementowi EntityType. Aby uzyskać więcej informacji na temat typu danych każdej wartości, zapoznaj się z metadanymi podanymi dla odpowiedniego EntityTypeelementu .

Scenariusz zbiorczy wskazuje funkcje podrzędnych scenariuszy użytkownika na podstawie ścieżki obszaru

Skopiuj i wklej następujące zapytanie usługi Power BI bezpośrednio w oknie Pobieranie pustego >zapytania. Aby uzyskać więcej informacji, zobacz Omówienie przykładowych raportów przy użyciu zapytań OData.

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

Ciągi podstawienia i podział zapytań

Zastąp następujące ciągi wartościami. Nie dołączaj nawiasów {} do podstawienia. Na przykład jeśli nazwa organizacji to "Fabrikam", zastąp Fabrikamciąg {organization} , a nie {Fabrikam}.

  • {organization} — Nazwa organizacji
  • {project} — Nazwa projektu zespołowego lub całkowicie pomiń "/{project}" dla zapytania obejmującego wiele projektów
  • {areapath} — Ścieżka obszaru. Przykładowy format: Project\Level1\Level2.

Podział zapytań

W poniższej tabeli opisano każdą część zapytania.

Część kwerendy

Opis

$filter=WorkItemType eq 'Feature'

Funkcje zwracane.

and State ne 'Cut'

Pomiń zamknięte usterki.

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

Zwraca elementy robocze w ramach określonej ścieżki obszaru, zastępując Area/AreaPath eq '{areapath}' elementy zwracane w określonej ścieżce obszaru. Aby filtrować według nazwy zespołu, użyj instrukcji Teams/any(x:x/TeamName eq '{teamname})'filter .

and Descendants/any()

Uwzględnij wszystkie funkcje, nawet te bez scenariuszy użytkownika. Zastąp ciąg "any(d/WorkItemType eq 'User Story')", aby pominąć funkcje, które nie mają podrzędnych scenariuszy użytkownika.

&$select=WorkItemId, Title, WorkItemType, State

Wybierz pola, które mają być zwracane.

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

Wybierz pola AssignedTowłaściwości z możliwością rozwinięcia, , IterationArea.

Descendants(

Rozwiń klauzulę Descendants .

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

Filtruj elementy podrzędne, aby uwzględniały tylko scenariusze użytkownika (pomija zadania i usterki).

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

Dla wszystkich elementów potomnych pasujących do klauzuli filter zliczaj je i sumuj StoryPoints właściwość.

)

Zamknij element Descendants().

Scenariusz zestawienia wskazuje funkcje podrzędnych scenariuszy użytkownika w oparciu o zespoły

Poniższe zapytania pokazują, jak generować raporty zestawienia filtrowania według nazwy zespołu, a nie ścieżki obszaru.

Skopiuj i wklej następujące zapytanie usługi Power BI bezpośrednio w oknie Pobieranie pustego >zapytania. Aby uzyskać więcej informacji, zobacz Omówienie przykładowych raportów przy użyciu zapytań OData.

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

Rzutowy scenariusz wskazuje epiki

W poniższych zapytaniach można rzutować historię punktów epików.

Skopiuj i wklej następujące zapytanie usługi Power BI bezpośrednio w oknie Pobieranie pustego >zapytania. Aby uzyskać więcej informacji, zobacz Omówienie przykładowych raportów przy użyciu zapytań OData.

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

Zadania zestawienia pozostałych zadań roboczych i ukończonych pracy w scenariuszach użytkownika

Poniższe zapytanie pokazuje, jak rzutować pozostałe zadania pracy i ukończone przydzielone do podrzędnych zadań do scenariuszy użytkownika w hierarchii. Te zapytania zakładają, że zadania są przypisywane jako elementy podrzędne scenariusza użytkownika w określonej ścieżce obszaru.

Skopiuj i wklej następujące zapytanie usługi Power BI bezpośrednio w oknie Pobieranie pustego >zapytania. Aby uzyskać więcej informacji, zobacz Omówienie przykładowych raportów przy użyciu zapytań OData.

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

Liczba usterek zestawienia do funkcji

Poniższe zapytania pokazują, jak utworzyć zestawienie liczby usterek przypisanych do funkcji. Te zapytania zakładają, że usterki są zdefiniowane jako elementy podrzędne funkcji w określonej ścieżce obszaru.

Skopiuj i wklej następujące zapytanie usługi Power BI bezpośrednio w oknie Pobieranie pustego >zapytania. Aby uzyskać więcej informacji, zobacz Omówienie przykładowych raportów przy użyciu zapytań OData.

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

(Opcjonalnie) Zmienianie nazwy zapytania

Możesz zmienić nazwę domyślnej etykiety zapytania Query1 na bardziej zrozumiałą. Po prostu wprowadź nową nazwę w okienku Ustawienia zapytania.

Zrzut ekranu przedstawiający opcje menu zapytania usługi Power BI, zmień nazwę zapytania.

Rozwijanie kolumn w usłudze Power BI

Klauzula &$expand=AssignedTo($select=UserName), Iteration($select=IterationPath), Area($select=AreaPath) zwraca rekordy zawierające kilka pól. Przed utworzeniem raportu należy rozwinąć rekord, aby spłaszczać go w określone pola. W tym przypadku należy rozwinąć następujące rekordy:

  • AssignedTo
  • AreaPath
  • IterationPath

Aby dowiedzieć się, jak to zrobić, zobacz Transform Analytics data to generate Power BI reports (Przekształcanie danych analizy w celu generowania raportów usługi Power BI).

(Opcjonalnie) Zmienianie nazwy pól

Po rozwinięciu kolumn możesz zmienić nazwę co najmniej jednego pola. Możesz na przykład zmienić nazwę kolumny AreaPath na Area Path. Aby dowiedzieć się, jak to zrobić, zobacz Zmienianie nazwy pól kolumn.

Zastępowanie wartości null w polach zestawienia

Jeśli element roboczy nie ma żadnych elementów podrzędnych, wartość zestawienia może mieć wartość null. Na przykład element Potomny.CountOfUserStories ma wartość "null", jeśli funkcja nie ma żadnych podrzędnych scenariuszy użytkownika.

Aby ułatwić raportowanie, zastąp wszystkie wartości null wartością zero, wykonując następujące kroki.

  1. Wybierz kolumnę, klikając nagłówek kolumny.
  2. Wybierz menu Przekształć.
  3. Wybierz pozycję Zamień wartości. Zostanie wyświetlone okno dialogowe Zamień wartości .
  4. Wprowadź wartość "null" w polu Wartość, aby znaleźć.
  5. Wprowadź ciąg "0" w polu Zamień na.
  6. Wybierz pozycję OK.

Powtórz dla wszystkich kolumn zestawienia.

Zamknij zapytanie i zastosuj zmiany

Po zakończeniu wszystkich przekształceń danych wybierz pozycję Zamknij i zastosuj z menu Narzędzia główne , aby zapisać zapytanie i wrócić do karty Raport w usłudze Power BI.

Zrzut ekranu przedstawiający opcję zamknij i zastosuj Edytor Power Query.

Tworzenie raportu tabeli

  1. W usłudze Power BI wybierz raport Tabela w obszarze Wizualizacje.

    Zrzut ekranu przedstawiający opcje Wizualizacje i Pola usługi Power BI dla raportu tabeli zestawienia.

  2. Dodaj następujące pola do kolumn w podanej kolejności:

    • WorkItemIwybierz pozycję Nie sumuj , aby w razie potrzeby pokazać identyfikator
    • WorkItemType
    • Title
    • State
    • Count of User Stories
    • Total Story Points.

Zostanie wyświetlony przykładowy raport.

Zrzut ekranu przedstawiający przykładowy raport macierzy zestawienia funkcji.