Sdílet prostřednictvím


Souhrnné hodnoty podřízených pracovních položek do nadřazené ukázkové sestavy

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

Souhrn poskytuje podporu pro zobrazení počtu pracovních položek nebo součtu bodů obsahu, zbývající práce nebo jiného vlastního pole podřízených položek. Tento článek obsahuje několik příkladů, jak vygenerovat tabulkovou souhrnnou sestavu pro náměty, funkce nebo uživatelské scénáře, které obsahují podřízené pracovní položky. Následující obrázek ukazuje příklad bodů obsahu zahrnutých pro nadřazené funkce.

Snímek obrazovky se sestavou souhrnné matice funkcí

Další informace o souhrnu a možnostech zobrazení souhrnu najdete v tématu Zobrazení průběhu souhrnu nebo součtů v Azure Boards.

Poznámka:

Tento článek předpokládá, že si přečtete přehled ukázkových sestav pomocí dotazů OData a máte základní znalosti o Power BI.

Požadavky

  • Přístup: Buďte členem projektu s alespoň základním přístupem.
  • Oprávnění: Ve výchozím nastavení mají členové projektu oprávnění k dotazování na Analýzy a vytváření zobrazení.
  • Další informace o dalších požadavcích týkajících se povolení služeb a funkcí a obecných aktivit sledování dat najdete v tématu Oprávnění a požadavky pro přístup k Analýzám.

Vzorové dotazy

Následující dotazy vracejí data ze WorkItems sady entit, aby podporovaly generování sestav kumulativní matice.

Poznámka:

Informace o dostupných vlastnostech pro účely filtru nebo sestavy najdete v referenčních informacích k metadatům pro Azure Boards. Dotazy můžete filtrovat nebo vracet vlastnosti pomocí libovolné hodnoty Property pod hodnotami nebo NavigationPropertyBinding Path hodnotami dostupnými v objektu EntitySetEntityType . Každý EntitySet odpovídá hodnotě EntityType. Další informace o datovém typu každé hodnoty najdete v metadatech zadaných pro odpovídající EntityTypehodnotu .

Souhrnné body obsahu na funkce podřízených uživatelských scénářů na základě cesty oblasti

Zkopírujte a vložte následující dotaz Power BI přímo do okna Získat>prázdné dotazy . Další informace najdete v tématu Přehled ukázkových sestav pomocí dotazů 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

Náhradní řetězce a rozpis dotazů

Nahraďte následující řetězce hodnotami. Nezahrnujte do náhradních závorek {} . Pokud je například název vaší organizace "Fabrikam", nahraďte {organization} ho Fabrikam, nikoli {Fabrikam}.

  • {organization} – Název vaší organizace
  • {project} – Název vašeho týmového projektu nebo úplně vynecháte /{project}, pro dotaz mezi projekty
  • {areapath} - Cesta k vaší oblasti. Příklad formátu: Project\Level1\Level2.

Rozpis dotazů

Následující tabulka popisuje jednotlivé části dotazu.

Část dotazování

Popis

$filter=WorkItemType eq 'Feature'

Návratové funkce

and State ne 'Cut'

Vynecháte zavřené chyby.

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

Vrátí pracovní položky pod určitou cestou oblasti a nahradí Area/AreaPath eq '{areapath}' položky v určité cestě oblasti. Chcete-li filtrovat podle názvu týmu, použijte příkaz Teams/any(x:x/TeamName eq '{teamname})'filtru .

and Descendants/any()

Zahrňte všechny funkce, i ty, které nemají uživatelské scénáře. Nahraďte "any(d:d/WorkItemType eq 'User Story')" a vynecháte funkce, které nemají podřízené uživatelské scénáře.

&$select=WorkItemId, Title, WorkItemType, State

Vyberte pole, která chcete vrátit.

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

Vyberte rozbalitelná pole AssignedTovlastností , Iteration, Area.

Descendants(

Rozbalte klauzuli Descendants .

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

Vyfiltrujte potomky tak, aby zahrnovaly pouze uživatelské scénáře (vynechá úlohy a chyby).

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

Pro všechny potomky odpovídající klauzuli filtru, spočítejte je a součet StoryPoints vlastnosti.

)

Zavřít Descendants().

Souhrnné body obsahu na funkce podřízených uživatelských scénářů založených na Teams

Následující dotazy ukazují, jak generovat souhrnné sestavy filtrování podle názvu týmu místo cesty oblasti.

Zkopírujte a vložte následující dotaz Power BI přímo do okna Získat>prázdné dotazy . Další informace najdete v tématu Přehled ukázkových sestav pomocí dotazů 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

Souhrnné body textu na náměty

Pomocí následujících dotazů můžete souhrny scénářů odkazovat na náměty.

Zkopírujte a vložte následující dotaz Power BI přímo do okna Získat>prázdné dotazy . Další informace najdete v tématu Přehled ukázkových sestav pomocí dotazů 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

Zbývající práce v souhrnných úkolech a dokončená práce na uživatelské scénáře

Následující dotaz ukazuje, jak souhrn zbývající práce a dokončené práce přiřazené podřízeným úkolům uživatelským scénářům v hierarchii. Tyto dotazy předpokládají, že úkoly jsou přiřazeny jako podřízené položky uživatelského scénáře v zadané cestě oblasti.

Zkopírujte a vložte následující dotaz Power BI přímo do okna Získat>prázdné dotazy . Další informace najdete v tématu Přehled ukázkových sestav pomocí dotazů 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

Počet kumulativních chyb do funkcí

Následující dotazy ukazují, jak sčítat počet chyb přiřazených funkcím. Tyto dotazy předpokládají, že chyby jsou definovány jako podřízené položky funkce v zadané cestě oblasti.

Zkopírujte a vložte následující dotaz Power BI přímo do okna Získat>prázdné dotazy . Další informace najdete v tématu Přehled ukázkových sestav pomocí dotazů 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

(Volitelné) Přejmenování dotazu

Výchozí popisek dotazu , Query1, můžete přejmenovat na něco smysluplnějšího. Jednoduše zadejte nový název z podokna Nastavení dotazu.

Snímek obrazovky s možnostmi nabídky dotazu Power BI a přejmenování dotazu

Rozbalení sloupců v Power BI

Klauzule &$expand=AssignedTo($select=UserName), Iteration($select=IterationPath), Area($select=AreaPath) vrátí záznamy, které obsahují několik polí. Před vytvořením sestavy musíte záznam rozbalit, aby se zploštěl do konkrétních polí. V tomto případě budete chtít rozbalit následující záznamy:

  • AssignedTo
  • AreaPath
  • IterationPath

Postup najdete v tématu Transformace analytických dat pro generování sestav Power BI.

(Volitelné) Přejmenování polí

Po rozbalení sloupců můžete chtít přejmenovat jedno nebo více polí. Sloupec můžete například přejmenovat AreaPath na Area Path. Postup najdete v tématu Přejmenování polí sloupců.

Nahrazení hodnot null v souhrnných polích

Pokud pracovní položka nemá žádné podřízené položky, může mít souhrnná hodnota hodnotu null. Například Descendants.CountOfUserStories má hodnotu null, pokud funkce nemá žádné podřízené uživatelské scénáře.

Pro snadnější vytváření sestav nahraďte všechny hodnoty null nulou pomocí následujícího postupu.

  1. Vyberte sloupec kliknutím na záhlaví sloupce.
  2. Vyberte nabídku Transformace.
  3. Vyberte Nahradit hodnoty. Zobrazí se dialogové okno Nahradit hodnoty .
  4. Do hodnoty zadejte hodnotu null , kterou chcete najít.
  5. Do příkazu Nahradit zadáním "0".
  6. Vyberte OK.

Opakujte pro všechny souhrnné sloupce.

Zavřete dotaz a použijte změny.

Jakmile dokončíte všechny transformace dat, v nabídce Domů zvolte Zavřít a použít dotaz a vraťte se na kartu Sestava v Power BI.

Snímek obrazovky s možností Zavřít a Použít Editor Power Query

Vytvoření sestavy tabulky

  1. V Power BI zvolte sestavu tabulky v části Vizualizace.

    Snímek obrazovky s výběrem vizualizací a polí Power BI pro sestavu souhrnné tabulky

  2. Do sloupců v uvedeném pořadí přidejte následující pole:

    • WorkItemI, zvolte Nevystihovejte souhrn a v případě potřeby zobrazte ID.
    • WorkItemType
    • Title
    • State
    • Count of User Stories
    • Total Story Points.

Zobrazí se ukázková sestava.

Snímek obrazovky se sestavou souhrnné matice ukázkových funkcí