バーンダウン のサンプル クエリとレポートをリリースする
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
バーンダウンレポートとバーンアップレポートには、時間の経過と同時に完了している作業量が表示されます。 次の図は、ユーザー ストーリーの数とストーリー ポイントの合計によるバーンダウンの両方を示しています。
バーンダウン グラフは、グラフの期間の作業を計画する場合にのみ意味があります。 それ以外の場合、スプリント単位で計画している場合、標準バーンダウンは表示されません。 これらのインスタンスでは、バーンアップ グラフは、時間の経過に伴う進行状況を確認する方が理にかなっています。
重要
- エリア パスを削除するか、反復パスを再構成すると、元に戻せないデータ損失が発生します。 たとえば、エリア パスが変更されたチームのバーンダウンおよびバーンアップ ウィジェット グラフ、スプリント バーンダウン、ベロシティ グラフでは、正確なデータは表示されません。 履歴傾向グラフは、 作業項目ごとに定義されたエリア パス と 反復パス を参照します。 一度削除すると、これらのパスの履歴データを取得することはできません。
- 削除できるのは、作業項目で使用されなくなった領域パスと反復パスのみです。
バーンダウンとバーンアップの詳細については、「バーンダウンまたはバーンアップ ウィジェットの構成」および「バーンダウンとバーンアップのガイダンス」を参照してください。
Note
この記事では、OData クエリを使用したサンプル レポートの概要を読み、Power BI の基本的な理解を持っていることを前提としています。
前提条件
- アクセス: 少なくとも Basic アクセス権を持つプロジェクトのメンバーである。
- 権限: 既定では、プロジェクト メンバーは 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}')
特定 のエリア パス の置き換えの下にユーザ ストーリーのみを含めます '{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-April-01 を表します。
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 のメタデータ リファレンス、カスタム プロパティに関するページを参照してください。 たとえばCustom_Milestone
、カスタム プロパティ名に置き換えます{customfieldname}
。
次の 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 レポートを生成する」を参照してください。
クエリを閉じて変更を適用する
すべてのデータ変換が完了したら、[ホーム] メニューから [閉じる] & [適用] を選択してクエリを保存し、Power BI の [レポート] タブに戻ります。
クラスター化縦棒グラフを作成する
Power BI で、[視覚化] で [クラスター化縦棒グラフ] を選択します。
X 軸に追加
DateValue
し、右クリックして ではなく を選択DateValue
します。Date Hierarchy
[Y 軸] に を追加
Count
します。[Y 軸] に を追加
TotalStoryPoints
します。
このレポートの例では、ストーリーの数と合計または ストーリー ポイントの両方にバーンダウンが表示されます。