將子工作專案值匯總至父範例報表
Azure DevOps Services |Azure DevOps Server 2022 - Azure DevOps Server 2019
匯總支持顯示工作項目計數或故事點、剩餘工時或其他子專案的自定義字段總和。 本文提供數個範例,說明如何針對包含子工作專案的 Epics、Features 或 User Storys 產生表格式匯總報表。 下圖顯示為其父功能匯總的故事點範例。
若要深入了解匯總和顯示匯總的選項,請參閱 在 Azure Boards 中顯示匯總進度或總計。
注意
本文假設您已閱讀 使用 OData 查詢 的範例報表概觀,並具備 Power BI 的基本瞭解。
必要條件
- 若要檢視分析數據和查詢服務,您必須是具有基本存取權或更高許可權的項目成員。 根據預設,所有專案成員都會獲得查詢分析的許可權,並定義分析檢視。
- 若要瞭解有關服務與功能啟用和一般數據追蹤活動的其他必要條件,請參閱 存取分析的許可權和必要條件。
範例查詢
下列查詢會從 WorkItems
實體集傳回數據,以支持產生匯總矩陣報表。
注意
若要判斷篩選或報表用途的可用屬性,請參閱 Azure Boards 的元數據參考。 您可以使用的 或 NavigationPropertyBinding Path
值EntitySet
底下EntityType
的任何Property
值來篩選查詢或傳回屬性。 每個 EntitySet
對應至 EntityType
。 若要深入瞭解每個值的數據類型,請檢閱針對對應 EntityType
提供的元數據。
匯總本文指向以區域路徑為基礎的子用戶劇本功能
您可以將下面所列的 Power BI 查詢直接貼到 [取得資料空白>查詢 ] 視窗中。 如需詳細資訊,請檢閱 使用 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
替代字串和查詢明細
以您的值取代下列字串。 請勿在替代中包含括號 {} 。 例如,如果您的組織名稱為 「Fabrikam」 ,請將 取代 {organization}
為 Fabrikam
,而非 {Fabrikam}
。
{organization}
- 您的組織名稱{project}
- 針對跨項目查詢,您的小組專案名稱或完全省略 “/{project}”{areapath}
- 您的區域路徑。 範例格式:Project\Level1\Level2
。
查詢明細
下表描述查詢的每個部分。
查詢元件
說明
$filter=WorkItemType eq 'Feature'
傳回功能。
and State ne 'Cut'
省略已關閉的 Bug。
and startswith(Area/AreaPath,'{areapath}')
傳回特定區域路徑下的工作專案,取代 Area/AreaPath eq '{areapath}'
特定區域路徑上的傳回專案。
若要依 Team Name 進行篩選,請使用 filter 語句 Teams/any(x:x/TeamName eq '{teamname})'
。
and Descendants/any()
包含所有功能,即使是沒有用戶劇本的功能。 將 取代為 “any(d:d/WorkItemType eq 'User Story')”,以省略沒有子用戶劇本的功能。
&$select=WorkItemId, Title, WorkItemType, State
選取要傳回的欄位。
&$expand=AssignedTo($select=UserName), Iteration($select=IterationPath), Area($select=AreaPath),
選取可展開的屬性欄位AssignedTo
、、 Area
Iteration
。
Descendants(
Descendants
展開 子句。
$apply=filter(WorkItemType eq 'User Story')
篩選子系,只包含用戶劇本(省略工作和 Bug)。
/aggregate($count as CountOfUserStories, StoryPoints with sum as TotalStoryPoints)
針對符合篩選子句的所有子系,請計算它們,並加總 StoryPoints
屬性。
)
關閉 Descendants()
。
匯總故事點至以 Teams 為基礎的子用戶劇本功能
下列查詢示範如何依小組名稱而非區域路徑產生匯總報表篩選。
您可以將下面所列的 Power BI 查詢直接貼到 [取得資料空白>查詢 ] 視窗中。 如需詳細資訊,請檢閱 使用 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
匯總故事點至 Epic
您可以使用下列查詢將故事點匯總至 Epic。
您可以將下面所列的 Power BI 查詢直接貼到 [取得資料空白>查詢 ] 視窗中。 如需詳細資訊,請檢閱 使用 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
匯總工作剩餘工時和已完成工時給用戶劇本
下列查詢顯示如何將剩餘工時和已完成工作匯總至階層中的User Storys子工作。 這些查詢假設工作會指派為指定 區域路徑中用戶劇本的子系。
您可以將下面所列的 Power BI 查詢直接貼到 [取得資料空白>查詢 ] 視窗中。 如需詳細資訊,請檢閱 使用 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
匯總 Bug 計數至功能
下列查詢示範如何匯總指派給功能的錯誤計數。 這些查詢假設 Bug 定義為指定 區域路徑中功能子系。
您可以將下面所列的 Power BI 查詢直接貼到 [取得資料空白>查詢 ] 視窗中。 如需詳細資訊,請檢閱 使用 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
(選擇性)重新命名查詢
您可以將預設查詢標籤 Query1 重新命名為更有意義的專案。 只要從 [查詢 設定] 窗格中輸入新的名稱即可。
展開 Power BI 中的數據行
子 &$expand=AssignedTo($select=UserName), Iteration($select=IterationPath), Area($select=AreaPath)
句會傳回包含數個字段的記錄。 在建立報表之前,您必須展開記錄,將其扁平化為特定欄位。 在此實例中,您會想要展開下列記錄:
AssignedTo
AreaPath
IterationPath
若要瞭解如何,請參閱 轉換分析數據以產生 Power BI 報表。
(選擇性)重新命名字段
展開數據行之後,您可能會想要重新命名一或多個字段。 例如,您可以將資料列 AreaPath
重新命名為 Area Path
。 若要瞭解如何,請參閱 重新命名數據行欄位。
取代匯總欄位中的 Null 值
如果工作項目沒有任何子系,匯總值可能是 Null。 例如,如果 Feature 沒有任何子用戶劇本, 則 Descendants.CountOfUserStories 為 “null”。
為了方便報告,請遵循下列步驟,將所有 Null 取代為零。
- 按兩下資料列標頭以選取資料行。
- 選取 [ 轉換 ] 功能表。
- 選取 [ 取代值]。 [ 取代值] 對話框隨即出現。
- 在 [要尋找的值] 中輸入 “null”。
- 在 [取代為] 中輸入 “0”。
- 選擇確定。
針對所有匯總數據行重複。
關閉查詢並套用您的變更
完成所有數據轉換之後,請從 [常用] 功能表選擇 [關閉及套用],以儲存查詢並返回 Power BI 中的 [報表] 索引卷標。
建立數據表報表
在 Power BI 中,選擇 [視覺效果] 底下的 [數據表] 報表。
依指示的順序,將下列欄位新增至資料行:
WorkItemI
,選擇 [不摘要 ] 視需要顯示標識符WorkItemType
Title
State
Count of User Stories
Total Story Points
.
範例報表隨即顯示。
相關文章
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應