バグのサンプルレポートを開く

Azure DevOps Services |Azure DevOps Server 2020 |Azure DevOps Server 2019

この記事では、特定の未解決のバグのセットについて、状態別と割り当て先ユーザー/グループフィールドごとに内訳を表示する方法について説明します。 次の図に例を示します。

サンプル-ボードを開くバグ-レポート

注意

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

前提条件

  • 基本アクセス権以上のプロジェクトのメンバーである必要があります。 プロジェクトメンバーとして追加されていない場合は、 今すぐ追加してください。 利害関係者を除く、プロジェクトへのアクセス権を持つすべてのユーザーは、分析ビューを表示できます。
  • 分析データを使用できるようにするには、対応するサービスが有効になっている必要があります。 たとえば、作業追跡データをクエリするには、 ボード が有効になっている必要があります。 無効になっている場合、 分析ビュー は表示されません。 サービスを再度有効にするには、「 Azure DevOps サービスを有効または無効にする」を参照してください。
  • 分析ビュー を使用するには、個々のユーザーまたは組織に対して 分析ビューのプレビュー機能を有効にします。
  • また、*View Analytics アクセス許可が [ 許可] に設定されている必要があります。 詳細については、「 Analytics service にアクセスするためのアクセス許可を付与する」を参照してください。
  • Azure DevOps に対して Power BI を使用する場合、または分析用の OData クエリを実行する場合は、 View analytics アクセス許可が [ 許可] に設定されている必要があります。 既定では、基本アクセス権を持つすべての共同作成者にアクセス権が付与されます。 共有 分析ビュー を編集するには、* "共有分析ビューの編集 " アクセス許可が [ 許可] に設定されている必要があります。 詳細については、「 Analytics service にアクセスするためのアクセス許可を付与する」を参照してください。
  • 基本アクセス権以上のプロジェクトのメンバーである必要があります。 プロジェクトメンバーとして追加されていない場合は、 今すぐ追加してください。 利害関係者を除く、プロジェクトへのアクセス権を持つすべてのユーザーは、分析ビューを表示できます。
  • Analytics がインストールされていることを確認し、存在しない場合は有効にします。 拡張機能を追加したり、サービスを有効にしたりするには、アカウント所有者または プロジェクトコレクション管理者グループ のメンバーである必要があります。
  • 分析データを使用できるようにするには、対応するサービスが有効になっている必要があります。 たとえば、作業追跡データをクエリするには、 ボード が有効になっている必要があります。 無効になっている場合、 分析ビュー は表示されません。 サービスを再度有効にするには、「 Azure DevOps サービスを有効または無効にする」を参照してください。
  • 分析ビュー を使用するには、個々のユーザーまたは組織に対して 分析ビューのプレビュー機能を有効にします。
  • また、*View Analytics アクセス許可が [ 許可] に設定されている必要があります。 詳細については、「 Analytics service にアクセスするためのアクセス許可を付与する」を参照してください。
  • Azure DevOps に対して Power BI を使用する場合、または分析用の OData クエリを実行する場合は、 View analytics アクセス許可が [ 許可] に設定されている必要があります。 既定では、基本アクセス権を持つすべての共同作成者にアクセス権が付与されます。 共有 分析ビュー を編集するには、[ 共有分析ビューの編集 ] アクセス許可が [ 許可] に設定されている必要があります。 詳細については、「 Analytics service にアクセスするためのアクセス許可を付与する」を参照してください。

サンプル クエリ

次に示す Power BI クエリは、[ データの取得-> ] の [空のクエリ] ウィンドウに直接貼り付けることができます。 詳細については、「 OData クエリを使用したサンプルレポートの概要」を参照してください。

let
   Source = OData.Feed ("https://analytics.dev.azure.com/{organization}/{project}/_odata/v3.0-preview/WorkItems?"
        &"$filter=WorkItemType eq 'Bug' "
            &"and StateCategory ne 'Completed' "
            &"and startswith(Area/AreaPath,'{areapath}') "
        &"&$select=WorkItemId,Title,WorkItemType,State,Priority,Severity,TagNames,AreaSK "
        &"&$expand=AssignedTo($select=UserName),Iteration($select=IterationPath),Area($select=AreaPath) "
    ,null, [Implementation="2.0",OmitValues = ODataOmitValues.Nulls,ODataVersion = 4]) 
in
    Source

置換文字列

各クエリには、次の文字列が含まれています。これらの文字列は、実際の値に置き換える必要があります。 置換に角かっこを含めない {} でください。 たとえば、組織名が "Fabrikam" の場合、{organization} は {Fabrikam} ではなく Fabrikam に置き換えます。

  • {organization}-組織名
  • {project}-クロスプロジェクトクエリの場合は、チームプロジェクト名または "/{project}" を完全に省略します。
  • {system.areapath}-自分の区分パス。 形式の例: Project\Level1\Level2

クエリの内訳

次の表では、クエリの各部分について説明します。

クエリパーツ説明
$filter=WorkItemType eq 'Bug' バグを返します。
and StateCategory ne 'Completed' 完了した項目を除外します。 状態カテゴリの詳細については、「 バックログとボードでのワークフローの状態と状態のカテゴリの使用方法」を参照してください。
and startswith(Area/AreaPath,'{areapath}') 特定の区分パスの下にある作業項目。 を "Area/System.areapath eq ' {system.areapath} '" に置き換えると、特定の区分パスにある項目が返されます。
チーム名でフィルター処理するには、フィルターステートメントを使用し Teams/any(x:x/TeamName eq '{teamname})' ます。
&$select=WorkItemId, Title, WorkItemType, State, Priority, Severity, TagNames 返すフィールドを選択します。
&$expand=AssignedTo($select=UserName), Iteration($select=IterationPath), Area($select=AreaPath) [割り当て先ユーザー/グループ]、[イテレーション]、[区分エンティティ] の順に展開し、エンティティフィールドを選択します。

Power BI 変換

区分、イテレーション、担当者の列を展開する

このクエリでは、Power BI で使用する前に拡張する必要があるいくつかの列が返されます。 OData $expand ステートメントを使用してプルされたエンティティは、いくつかのフィールドを持つレコードを返します。 レコードを展開して、エンティティをそのフィールドにフラット化する必要があります。 このようなエンティティの例として、担当者、イテレーション、領域などがあります。

Power Query エディターで詳細エディターを閉じた後、必要なエンティティの展開ボタンを選択します。

  1. [展開] ボタンをクリックします。

    エンティティ列の展開、Power BI + OData

  2. フラット化するフィールドを選択します。

    フラット化するフィールドを選択します。

  3. テーブルにエンティティフィールドが含まれるようになりました。

    テーブルにエンティティフィールドが含まれるようになりました。

  4. エンティティを表すすべてのフィールドに対して、手順 1. ~ 3. を繰り返します。区分、イテレーション、担当者。

フィールドとクエリの名前を変更し、& 適用を閉じる

完了したら、列の名前を変更することができます。

  1. 列ヘッダーを右クリックし、[名前の変更] を選択します。

    列名の変更 Power BI

  2. また、クエリの名前 を既定のクエリ名 からより意味のあるものに変更することもできます。

    クエリ名の変更 Power BI

  3. 完了したら、[ 閉じる & 適用 ] をクリックしてクエリを保存し、Power BI に戻ります。

    Power BI 閉じ & 適用

レポートを作成する

Power BI には、レポート可能なフィールドが表示されます。

注意

次の例では、どの列も名前を変更していないことを前提としています。

サンプルボードの開いているバグ-フィールド

単純なレポートを作成するには、次の手順を実行します。

  1. Power BI の視覚化 マトリックス を選択します。
  2. に "State" フィールドを追加します。
  3. "担当者名" フィールドを に追加します。
  4. フィールド "ワーク Itemid" を に追加します。
    • "作業項目" フィールドを右クリックし、[ カウント ] が選択されていることを確認します。

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

サンプル-ボードを開くバグ-レポート

複数のチームからデータを取り込む

多くの場合、複数のチームのデータを集計して比較する必要があります。 複数のチームから項目をプルする場合は、レポートに チームスライサーを追加 することを検討してください。 チームスライサーを使用すると、既存のレポートをチーム名でフィルター処理できます。

その他のクエリ

次の追加のクエリを使用して、この記事で前に定義したのと同じ手順を使用して、類似したレポートを作成することができます。

区分パスではなく、チームによるフィルター処理

区分パスではなく、チーム名で開いているバグを照会できます。

次に示す Power BI クエリは、[ データの取得-> ] の [空のクエリ] ウィンドウに直接貼り付けることができます。 詳細については、「 OData クエリを使用したサンプルレポートの概要」を参照してください。

let
   Source = OData.Feed ("https://analytics.dev.azure.com/{organization}/{project}/_odata/v3.0-preview/WorkItems?"
        &"$filter=WorkItemType eq 'Bug' "
            &"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}) "
        &"&$select=WorkItemId,Title,WorkItemType,State,Priority,Severity,TagNames,AreaSK "
        &"&$expand=AssignedTo($select=UserName),Iteration($select=IterationPath),Area($select=AreaPath) "
    ,null, [Implementation="2.0",OmitValues = ODataOmitValues.Nulls,ODataVersion = 4]) 
in
    Source

特定のイテレーションのユーザーストーリー

区分パスと特定のイテレーションによって未解決のバグを照会できます。

次に示す Power BI クエリは、[ データの取得-> ] の [空のクエリ] ウィンドウに直接貼り付けることができます。 詳細については、「 OData クエリを使用したサンプルレポートの概要」を参照してください。

let
   Source = OData.Feed ("https://analytics.dev.azure.com/{organization}/{project}/_odata/v3.0-preview/WorkItems?"
        &"$filter=WorkItemType eq 'User Story' "
            &"and startswith(Area/AreaPath,'{areapath}') "
            &"and startswith(Iteration/IterationPath,'{iterationpath}') "
        &"&$select=WorkItemId,Title,WorkItemType,State,Priority,Severity,TagNames,AreaSK "
        &"&$expand=AssignedTo($select=UserName),Iteration($select=IterationPath),Area($select=AreaPath) "
    ,null, [Implementation="2.0",OmitValues = ODataOmitValues.Nulls,ODataVersion = 4]) 
in
    Source

サンプルレポートの完全な一覧