バーンダウン のサンプル クエリとレポートをリリースする
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
バーンダウンレポートとバーンアップレポートには、時間の経過と同時に完了している作業量が表示されます。 次の図は、ユーザー ストーリーの数とストーリー ポイントの合計によるバーンダウンの両方を示しています。
バーンダウン グラフは、グラフの期間の作業を計画する場合にのみ意味があります。 それ以外の場合、スプリント単位で計画している場合、標準バーンダウンは表示されません。 これらのインスタンスでは、バーンアップ グラフは、時間の経過に伴う進行状況を確認する方が理にかなっています。
重要
- Area パスの削除または Iteration Paths の再構成により、元に戻せないデータ損失が発生します。 たとえば、 Area Paths が変更されたチームのバーンダウンおよびバーンアップ ウィジェット グラフ、スプリント バーンダウン、ベロシティ グラフでは、正確なデータは表示されません。 履歴傾向グラフは、作業項目ごとに定義された エリア パス と Iteration Path を参照します。 一度削除すると、これらのパスの履歴データを取得することはできません。
- 削除できるのは、作業項目で使用されなくなった領域パスと反復パスのみです。
バーンダウンとバーンアップの詳細については、「 バーンダウンまたはバーンアップ ウィジェットの構成 と バーンダウンとバーンアップのガイダンスを参照してください。
Note
この記事では、「 OData クエリを使用したサンプル レポートの概要」を 読み、Power BI の基本的な理解があることを前提としています。
前提条件
- アクセス レベル: Basic 以上のプロジェクトのメンバーである必要があります。
- Permission: 既定では、プロジェクト メンバーは Analytics にクエリを実行してビューを作成する権限を持ちます。
- サービスと機能の有効化と一般的なデータ追跡アクティビティに関するその他の前提条件の詳細については、「 Analytics にアクセスするためのアクセス許可と前提条件を参照してください。
サンプル クエリ
このセクションのクエリでは、履歴データに基づいて作業項目のバーンダウン グラフを生成する方法を示します。 これらのクエリはすべて、 WorkItemSnapshot
エンティティ セットを指定します。
Note
フィルターまたはレポートの目的で使用できるプロパティを確認するには、「Azure Boardsのメタデータ リファレンス」を参照してください。 クエリをフィルター処理したり、 で使用可能な または 値のProperty
下EntityType
NavigationPropertyBinding Path
の値のいずれかを使用してプロパティをEntitySet
返したりできます。 各 は EntitySet
に EntityType
対応します。 各値のデータ型の詳細については、対応する EntityType
に指定されたメタデータを確認してください。
開始日と終了日からのエリア パス内のユーザー ストーリーのバーンダウン
次のクエリは、リリース タグでタグ付けされた作業項目に基づいて、リリースのユーザー ストーリーの履歴データを返す方法を示しています。
Note
タグのフィルター処理に基づくレポートの場合、リリースの開始時またはバーンダウン/バーンアップ開始日にタグを作業項目に割り当てる必要があります。 それ以外の場合、作業項目は返されたデータに含まれません。
以下に示す 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" の場合は、 ではなく {Fabrikam}
を にFabrikam
置き換えます{organization}
。
{organization}
- 組織名{project}
- プロジェクト間クエリの場合は、チーム プロジェクト名を指定するか、"/{project}" を完全に省略します{areapath}
- エリア パス。 形式の例:Project\Level1\Level2
{tag}
- リリースを表すタグ。{tagname}
でタグ付けされたすべての作業項目がレポートに含まれます{startdate}
- バーンダウン レポートを開始する日付の形式:YYYY-MM-DDZ
。 たとえば、2022-04-01Z
は 2022 年 4 月 1 日を表します。 引用符で囲む必要はありません。{enddate}
- バーンダウン レポートを終了する日付。
クエリの内訳
次の表では、クエリの各部分について説明します。
クエリ パーツ
説明
$apply=filter(WorkItemType eq 'User Story'
バーンダウンにユーザー ストーリーを含める。
and StateCategory ne 'Completed'
完了したアイテムをフィルター処理します。 状態カテゴリの詳細については、「ワークフローの 状態と状態カテゴリ をバックログとボードで使用する方法」を参照してください。
and startswith(Area/AreaPath,'{areapath}')
特定のArea パスの下にユーザー ストーリーのみを含める'{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} と同じ形式です。
)
句 filter()
閉じます。
/groupby (
句 groupby()
開始します。
(DateValue, State, Area/AreaPath),
DateValue
でグループ化 (トレンドに使用)、およびレポートするフィールド。
aggregate ($count as Count, StoryPoints with sum as TotalStoryPoints)
ユーザー ストーリーの数と ストーリー ポイントの合計で集計。
)
句 groupby()
閉じます。
チームのユーザー ストーリーのバーンダウン
次のクエリでは、 Area Path ではなく、チーム名でフィルター処理されたバーンダウン データが返されます。
以下に示す 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
エリアと反復パスに基づくバーンダウン ユーザー ストーリー
一部の組織では、 Iteration Paths を使用してリリースのストーリーをマークします。 たとえば、MyProject\Release1 の Iteration Path があるとします。 次のクエリは、反復パスでユーザー ストーリーを選択する方法を示しています。
以下に示す 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
ユーザー設定フィールド値を持つバーンダウン ユーザー ストーリー
一部の組織では、ユーザー 設定フィールドを使用してリリースのユーザー ストーリーをマークします。 たとえば、 Milestone というフィールドがあるとします。 このクエリでは、ユーザー 設定フィールドでユーザー ストーリーを選択する方法を示します。
クエリの {customfieldname}
と {releasevalue}
の両方を置き換える必要があります。 ユーザー設定フィールドの名前を確認するには、Azure Boards、カスタム プロパティ Metadata リファレンスを参照してください。 {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 Query エディターの列を展開する
レポートを作成する前に、複数のフィールドを含むレコードを返す列を展開する必要があります。 この例では、次のレコードを展開します。
Links
Links.TargetWorkItem
Area
Iteration
AssignedTo
作業項目を展開する方法については、「 Analytics データを変換して Power BI レポートを生成する」を参照してください。
クエリを閉じて変更を適用する
すべてのデータ変換が完了したら、Home メニューから Close & Apply を選択してクエリを保存し、Power BI の Report タブに戻ります。
クラスター化縦棒グラフを作成する
Power BI で、Visualizations でクラスター化縦棒グラフを選択します。
X 軸に追加
DateValue
し、右クリックして ではなく を選択DateValue
します。Date Hierarchy
[Y 軸] に を追加
Count
します。[Y 軸] に を追加
TotalStoryPoints
します。
このレポート例では、ストーリーの数と合計または ストーリー ポイントの両方にバーンダウンが表示されます。