发布进度示例查询和报告

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

烧毁和烧毁报告显示随着时间推移完成的工作量。 下图按用户情景计数和故事点的总和显示烧毁。

Power BI 发布进度聚集柱形图报表的屏幕截图。

仅当规划图表时间段的工作时,“烧毁”图表才有意义。 否则,如果按冲刺计划,则不会看到标准烧毁。 在这些情况下,使用燃烧图可以更有意义地了解随时间推移的进度。

重要

删除 区域路径 或重新配置 迭代路径 可能会导致数据丢失,并且无法还原。 例如,区域 路径 发生更改的团队的燃尽或烧毁小组件图表、冲刺进度和速度图表不会反映正确的数据。 历史趋势图引用每个工作项在过去某个时间点定义的 面积路径迭代路径 。 删除 区域路径迭代路径 时,无法检索其历史数据。

有关烧毁和烧毁的详细信息,请参阅 配置烧毁或烧毁小组件 以及 烧毁和烧毁指南

注意

本文假定你已阅读 使用 OData 查询的示例报表概述 ,并基本了解 Power BI。

先决条件

示例查询

本节中的查询演示如何基于历史数据生成工作项的进度图。 所有这些查询都指定 WorkItemSnapshot 实体集。

注意

若要确定用于筛选或报表的可用属性,请参阅Azure Boards元数据参考。 可以使用 提供的 EntitySetNavigationPropertyBinding Path 值下EntityType的任何Property值筛选查询或返回属性。 每个对应 EntitySet 一个 EntityType。 有关每个值的数据类型的详细信息,请查看为相应 EntityType值提供的元数据。

从开始和结束日期开始到结束日期的区域路径中用户情景的进度

以下查询显示如何基于使用发布标记标记的工作项返回发布的用户情景的历史数据。

注意

对于基于筛选标记的报表,必须在发布或进度/烧毁开始日期开始时将标记分配给工作项。 否则,返回的数据中不包含工作项。

可以将下面列出的 Power BI 查询直接粘贴到 “获取数据空白>查询 ”窗口中。 有关详细信息,请参阅 使用 OData 查询的示例报表概述

let
   Source = OData.Feed ("https://analytics.dev.azure.com/{organization}/{project}/_odata/v3.0-preview/WorkItemSnapshot?"
        &"$apply=filter(WorkItemType eq 'User Story' "
            &"and StateCategory ne 'Completed' "
            &"and startswith(Area/AreaPath,'{areapath}') "
            &"and Tags/any(x:x/TagName eq '{tagname}') "
            &"and DateValue ge {startdate} "
            &"and DateValue le {enddate} "
        &") "
        &"/groupby ( "
            &"(DateValue,State,Area/AreaPath), "
            &"aggregate ($count as Count, 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
  • {tag} - 表示发布的标记。 标记 {tagname} 的所有工作项都包含在报表中
  • {startdate}- 以以下格式启动烧毁报表的日期: YYYY-MM-DDZ 例如: 2022-04-01Z 表示 2022-April-01。 不要用引号引起来。
  • {enddate} - 结束烧毁报告的日期。

查询明细

下表描述了查询的每个部分。

查询部件

描述

$apply=filter(WorkItemType eq 'User Story'

在烧毁中包括用户情景。

and StateCategory ne 'Completed'

筛选出已完成的项目。 有关状态类别的详细信息,请参阅如何在积压工作和板上使用 工作流状态和状态类别

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

仅在替换特定区域路径'{areapath}'下包含用户情景。
若要按团队名称进行筛选,请使用 filter 语句 Teams/any(x:x/TeamName eq '{teamname})'

and Tags/any(x:x/TagName eq '{tagname}')

指定标记标签,该标签表示要烧毁的发布,并在报表中包含用 {tagname} 标记的所有工作项。

and DateValue ge {startdate}

在指定日期或之后开始燃烧。 示例: 2019-04-01Z 表示 2019 年 4 月 1 日。

and DateValue le {enddate}

在指定日期或日期之前开始燃烧。 与 {startdate} 的格式相同。

)

Close filter() 子句。

/groupby (

Start groupby() 子句。

(DateValue, State, Area/AreaPath),

分组依据 DateValue (用于趋势),以及要报告的任何字段。

aggregate ($count as Count, StoryPoints with sum as TotalStoryPoints)

按用户情景计数和故事点总和进行聚合。

)

Close groupby() 子句。

团队用户情景的进度

以下查询返回按团队名称而不是 区域路径筛选的进度数据。

可以将下面列出的 Power BI 查询直接粘贴到 “获取数据空白>查询 ”窗口中。 有关详细信息,请参阅 使用 OData 查询的示例报表概述

let
   Source = OData.Feed ("https://analytics.dev.azure.com/{organization}/{project}/_odata/v3.0-preview/WorkItemSnapshot?"
        &"$apply=filter(WorkItemType eq 'User Story' "
            &"and StateCategory ne 'Completed' "
            &"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 Tags/any(x:x/TagName eq '{tagname}') "
            &"and DateValue ge {startdate} "
            &"and DateValue le {enddate} "
        &") "
        &"/groupby ( "
            &"(DateValue,State,Area/AreaPath), "
            &"aggregate ($count as Count, StoryPoints with sum as TotalStoryPoints) "
        &") "
    ,null, [Implementation="2.0",OmitValues = ODataOmitValues.Nulls,ODataVersion = 4]) 
in
    Source

每星期五创建一个快照的已烧毁用户情景

使用每周快照可以减少提取到 Power BI 中的数据量,并提高查询性能。

可以将下面列出的 Power BI 查询直接粘贴到 “获取数据空白>查询 ”窗口中。 有关详细信息,请参阅 使用 OData 查询的示例报表概述

let
   Source = OData.Feed ("https://analytics.dev.azure.com/{organization}/{project}/_odata/v3.0-preview/WorkItemSnapshot?"
        &"$apply=filter(WorkItemType eq 'User Story' "
            &"and StateCategory ne 'Completed' "
            &"and startswith(Area/AreaPath,'{areapath}') "
            &"and Tags/any(x:x/TagName eq '{tagname}') "
            &"and DateValue ge {startdate} "
            &"and DateValue le {enddate} "
            &"and Date/DayName eq 'Friday' "
        &") "
        &"/groupby ( "
            &"(DateValue,State,Area/AreaPath,AreaSK), "
            &"aggregate ($count as Count, StoryPoints with sum as TotalStoryPoints) "
        &") "
    ,null, [Implementation="2.0",OmitValues = ODataOmitValues.Nulls,ODataVersion = 4]) 
in
    Source

基于区域和迭代路径的烧毁用户情景

某些组织使用 迭代路径 标记发布的情景。 例如,它们可能具有 MyProject\Release1迭代路径。 以下查询演示如何按迭代路径选择用户情景。

可以将下面列出的 Power BI 查询直接粘贴到 “获取数据空白>查询 ”窗口中。 有关详细信息,请参阅 使用 OData 查询的示例报表概述

let
   Source = OData.Feed ("https://analytics.dev.azure.com/{organization}/{project}/_odata/v3.0-preview/WorkItemSnapshot?"
        &"$apply=filter(WorkItemType eq 'User Story' "
            &"and StateCategory ne 'Completed' "
            &"and startswith(Area/AreaPath,'{areapath}') "
            &"and startswith(Iteration/IterationPath,'{iterationpath}') "
            &"and DateValue ge {startdate} "
            &"and DateValue le {enddate} "
            &") "
        &"/groupby ( "
            &"(DateValue,StateCategory,State,Area/AreaPath,AreaSK), "
            &"aggregate ($count as Count, StoryPoints with sum as TotalStoryPoints) "
        &") "
    ,null, [Implementation="2.0",OmitValues = ODataOmitValues.Nulls,ODataVersion = 4]) 
in
    Source

使用自定义字段值烧毁用户情景

某些组织使用自定义字段标记发布的用户情景。 例如,他们可能有一个名为“里程碑的字段。 此查询显示如何通过自定义字段选择用户情景。

需要同时替换查询{customfieldname}{releasevalue}和查询中。 若要确定自定义字段的名称,请参阅 Azure Boards 的元数据参考,自定义属性。 将替换为 {customfieldname} 自定义属性名称,例如 Custom_Milestone

可以将下面列出的 Power BI 查询直接粘贴到 “获取数据空白>查询 ”窗口中。 有关详细信息,请参阅 使用 OData 查询的示例报表概述

let
   Source = OData.Feed ("https://analytics.dev.azure.com/{organization}/{project}/_odata/v3.0-preview/WorkItemSnapshot?"
        &"$apply=filter(WorkItemType eq 'User Story' "
            &"and StateCategory ne 'Completed' "
            &"and startswith(Area/AreaPath,'{areapath}') "
            &"and {customfieldname} eq '{releasevalue}' "
            &"and DateValue ge {startdate} "
            &"and DateValue le {enddate} "
            &") "
        &"/groupby ( "
            &"(DateValue,StateCategory,State,Area/AreaPath,AreaSK), "
            &"aggregate ($count as Count, StoryPoints with sum as TotalStoryPoints) "
        &") "
    ,null, [Implementation="2.0",OmitValues = ODataOmitValues.Nulls,ODataVersion = 4]) 
in
    Source

(可选) 重命名查询

可以将默认查询标签 Query1 重命名为更有意义的标签。 只需在 “查询设置” 窗格中输入新名称。

Power BI 查询菜单选项的屏幕截图,重命名查询。

展开 Power Query 编辑器 中的列

在创建报表之前,需要展开返回包含多个字段的记录的列。 在此实例中,需要展开以下记录:

  • Links
  • Links.TargetWorkItem
  • Area
  • Iteration
  • AssignedTo

若要了解如何展开工作项,请参阅 转换分析数据以生成 Power BI 报表

关闭查询并应用更改

完成所有数据转换后,从“开始”菜单中选择“关闭和应用”以保存查询并返回到 Power BI 中的“报表”选项卡。

Power Query 编辑器“关闭并应用”选项的屏幕截图。

创建簇状柱形图

  1. 在 Power BI 中,选择可视化效果下的簇状柱形图

    发布进度聚集柱形图报表的 Power BI 可视化效果和字段选择的屏幕截图。

  2. 添加到 DateValueX 轴,右键单击并选择 DateValue,而不是 Date Hierarchy

  3. 添加到 CountY 轴

  4. 添加到 TotalStoryPointsY 轴

示例报表显示“故事”和“总和”或 “故事点”计数的进度。

Power BI 示例发布进度聚集柱形图报表的屏幕截图。