機能の進行状況ロールアップのサンプル レポート

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

この記事では、積み上げ横棒グラフ レポートを作成し、完成した子ユーザー ストーリーに基づいて機能の進行状況を表示する方法について説明します。 レポートには、特定のアクティブな特徴セットのストーリー ポイントのロールアップによる達成率が表示されます。 次の図に例を示します。

機能の進行状況の積み上げ横棒グラフ レポートのスクリーンショット。

ロールアップ列を追加することで、バックログから同様の進行状況横棒グラフを表示できます。 方法については、「ロールアップの進行状況または合計を表示する」を参照してください

Note

この記事では、「 OData クエリを使用したサンプル レポートの概要」を 読み、Power BI の基本的な理解があることを前提としています。

前提条件

  • 分析データを表示してサービスにクエリを実行するには、 Basic アクセス以上のプロジェクトのメンバーである必要があります。 既定では、すべてのプロジェクト メンバーには、Analytics のクエリと 分析ビューの定義に対するアクセス許可が付与されます。
  • サービスと機能の有効化と一般的なデータ追跡アクティビティに関するその他の前提条件については、「 Analytics にアクセスするためのアクセス許可と前提条件」を参照してください。

サンプル クエリ

機能の進行状況は、エンティティに WorkItems 対してクエリを実行して、現在の進行状況を取得します。

Note

フィルターまたはレポートの目的で使用できるプロパティを確認するには、「Azure Boardsのメタデータ リファレンス」を参照してください。 クエリをフィルター処理したり、 で使用可能な または 値のPropertyEntityTypeNavigationPropertyBinding Pathの値のいずれかを使用してプロパティをEntitySet返したりできます。 各 は EntitySetEntityType対応します。 各値のデータ型の詳細については、対応する 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 Query エディタースクリーンショット。

積み上げ横棒グラフ レポートを作成する

  1. Power BI で、[視覚化] の [積み上げ横棒グラフ レポート] を選択します

    機能の進行状況の積み上げ横棒グラフ レポートの Power BI の [視覚化] と [フィールド] の選択のスクリーンショット。

  2. [Y 軸] に を追加Titleします。

  3. X 軸に追加PercentComplete、右クリックして [合計] を選択します

レポートの例が表示されます。

サンプル機能の進行状況の積み上げ横棒グラフ レポートのスクリーンショット。