機能の進行状況ロールアップのサンプル レポート
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
この記事では、積み上げ横棒グラフ レポートを作成し、完成した子ユーザー ストーリーに基づいて機能の進行状況を表示する方法について説明します。 レポートには、特定のアクティブな特徴セットのストーリー ポイントのロールアップによる達成率が表示されます。 次の図に例を示します。
ロールアップ列を追加することで、バックログから同様の進行状況横棒グラフを表示できます。 方法については、「ロールアップの進行状況または合計を表示する」を参照してください。
Note
この記事では、OData クエリを使用したサンプル レポートの概要を読み、Power BI の基本的な理解を持っていることを前提としています。
前提条件
- アクセス: 少なくとも Basic アクセス権を持つプロジェクトのメンバーである。
- 権限: 既定では、プロジェクト メンバーは Analytics にクエリを実行し、ビューを作成する権限を持ちます。
- サービスと機能の有効化と一般的なデータ追跡アクティビティに関するその他の前提条件の詳細については、「Analytics にアクセスするためのアクセス許可と前提条件」を参照してください。
サンプル クエリ
機能の進行状況は、エンティティに WorkItems
対してクエリを実行して、現在の進行状況を取得します。
Note
フィルターまたはレポートの目的で使用できるプロパティを確認するには、「Azure Boardsのメタデータ リファレンス」を参照してください。 クエリをフィルター処理したり、 で使用可能な または 値のProperty
下EntityType
NavigationPropertyBinding Path
の値のいずれかを使用してプロパティをEntitySet
返したりできます。 各 は 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" の場合は、 ではなく {Fabrikam}
を にFabrikam
置き換えます{organization}
。
{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()
少なくとも 1 つまたは "any" の子孫を持つ作業項目を除外します。 少なくとも 1 つの子作業項目を持つすべての機能が含まれます。 子孫を含むすべての作業項目を取得するには、存在しない場合でも、フィルターなしでクエリを 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)
少なくとも 1 つの子孫を持つすべての作業項目の場合:
$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')
子孫をフィルター処理します。 ユーザー ストーリーのみを含めます (タスクとバグを省略します)。
/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
2 つの列Descendants.StateCategory
に展開します。Descendants.TotalStoryPoints
- 列にピボット列変換を
Descendants.StateCategory
適用して個々の状態カテゴリを分離する - ピボットされたすべての列の null 値を置き換えます。
- 達成率を表すカスタム列を追加します。 ピボット状態列に null 列がある場合、カスタム列にエラーが表示されます。
方法については、「Analytics データを変換して Power BI レポートを生成する」の次のセクションを参照してください。
Note
この例では、ユーザー ストーリーの状態の値には、提案済み、進行中、完了が含まれます。
クエリを閉じて変更を適用する
すべてのデータ変換が完了したら、[ホーム] メニューから [閉じる] & [適用] を選択してクエリを保存し、Power BI の [レポート] タブに戻ります。
積み上げ横棒グラフ レポートを作成する
Power BI で、[視覚化] の [積み上げ横棒グラフ レポート] を選択します。
[Y 軸] に を追加
Title
します。X 軸に追加
PercentComplete
し、右クリックして [合計] を選択します。
レポートの例が表示されます。