功能进度汇总示例报告
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
本文介绍如何创建堆积条形图报表,以基于已完成的子用户情景显示功能进度。 该报表通过汇总给定的活动功能集显示完成的百分比。 下图中显示了一个示例。
可以通过添加汇总列来查看积压工作中类似的进度条形图。 若要了解如何操作,请参阅 显示汇总进度或总计。
注意
本文假设你阅读 了使用 OData 查询 的示例报表概述,并基本了解 Power BI。
先决条件
- Access:至少是具有基本访问权限的项目的成员。
- 权限: 默认情况下,项目成员有权查询 Analytics 和创建视图。
- 有关服务和功能启用和常规数据跟踪活动的其他先决条件的详细信息,请参阅 访问 Analytics 的权限和先决条件。
示例查询
功能进度查询 WorkItems
实体以获取当前进度状态。
注意
若要确定用于筛选或报表的可用属性,请参阅Azure Boards元数据参考。 可以使用 提供的 EntitySet
或 NavigationPropertyBinding Path
值下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 '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
替换字符串和查询明细
将以下字符串替换为值。 不要在替换中包含括号 {} 。 例如,如果组织名称为“Fabrikam”,请将 替换为 {organization}
Fabrikam
,而不是 {Fabrikam}
。
{organization}
- 组织名称{project}
- 跨项目查询的团队项目名称或完全省略/{project}
{areapath}
- 区域路径。 示例格式:Project/Level1/Level2
。
查询明细
下表描述了查询的每个部分。
查询部件
描述
$filter=WorkItemType eq 'Feature'
返回功能。
and State ne 'Cut'
省略标记为“剪切”的功能。
and startswith(Area/AreaPath,'{areapath}')
返回特定区域路径下的工作项。 将 替换为 Area/AreaPath eq '{areapath}'
将返回特定区域路径中的项。
若要按团队名称进行筛选,请使用 filter 语句 Teams/any(x:x/TeamName eq '{teamname})'
。
and Descendants/any()
筛选掉具有至少一个或“任意”后代的任何工作项。 包括具有至少一个子工作项的所有功能。 若要使用其后代获取所有工作项(即使它们没有任何工作项),请在没有筛选器的情况下 Descendants/any()
运行查询。 若要省略没有子用户情景的功能,请替换为 any(d:d/WorkItemType eq 'User Story')
。
对于包含和不使用后代的所有工作项:
$filter=endswith(Area/AreaPath,'suffix')
&$select=WorkItemId,Title,WorkItemType,State,Area, Descendants
&$expand=Descendants($select=WorkItemId)
对于至少有一个后代的所有工作项:
$filter=endswith(Area/AreaPath, 'suffix')and Descendants/any()
&$select=WorkItemId,Title,WorkItemType,State,Area, Descendants
&$expand=Descendants($select=WorkItemId)
&$select=WorkItemId, Title, WorkItemType, State
选择要返回的属性。
&$expand=Descendants(
expand Descendants
子句的开头
$apply=filter(WorkItemType eq 'User Story')
筛选后代。 仅包括用户情景(省略任务和 Bug)。
/groupby((StateCategory),
按 StateCategory 对汇总进行分组。 有关状态类别的详细信息,请参阅如何在积压工作和板上使用 工作流状态和状态类别 。
aggregate(StoryPoints with sum as TotalStoryPoints))
故事点的聚合总和。
)
Close Descendants()
子句。
查看团队的功能进度
以下查询与上述查询相同,不同之处在于它按 团队名称 而不是 区域路径筛选。
将以下 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=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
转换Power Query 编辑器中的数据
查询返回几个需要展开的列,然后才能使用它们来创建报表。 使用 OData $expand 语句拉入的任何实体都返回一个记录,该记录可能有多个字段。 展开记录以将实体平展到其字段中。
对于功能进度报告,需要执行以下转换:
- 将
Descendants
列展开为两列:Descendants.StateCategory
Descendants.TotalStoryPoints
- 对列应用数据透视列转换以分离各个状态类别
Descendants.StateCategory
- 替换所有透视列中的 null 值。
- 添加自定义列以表示完成百分比。 如果透视 状态 列中有任何空列,则自定义列将显示错误。
若要了解如何操作,请参阅转换分析数据以生成 Power BI 报表的以下部分:
注意
在此示例中,用户情景的状态值包括“建议”、“正在进行”和“已完成”。
关闭查询并应用更改
完成所有数据转换后,从“开始”菜单中选择“关闭和应用”以保存查询并返回到 Power BI 中的“报表”选项卡。
创建堆积条形图报表
在 Power BI 中,选择可视化效果下的堆积条形图报表。
添加到
Title
Y 轴。PercentComplete
添加到 X 轴,右键单击并选择“总和”。
显示示例报表。