次の方法で共有


Analytics を使用して作業追跡データを集計する

Azure DevOps Services |Azure DevOps Server |Azure DevOps Server 2022

OData で Analytics を使用して作業追跡データを集計するには、単純な合計に $count を使用するか、OData $apply 集計拡張機能を使用して、グループ化、フィルター処理、計算された結果を JSON として返します。

ヒント

この記事の後半でAI を使用してこのタスクに役立てる方法をご説明します。または、Azure DevOps MCP Server で AI サポートを有効にする方法を参照して作業を開始できます。

この記事は、 Analytics 用の OData クエリの構築、OData Analytics を使用した基本的なクエリの定義に基づいています。 この例では作業項目データに焦点を当てていますが、他のエンティティ セットにも同じ原則が適用されます。 単純なカウント クエリについては、「 アイテムの数を取得する」を参照してください。

メモ

Analytics サービスは、Azure DevOps Services 内のすべてのサービスに対して運用環境で自動的に有効になり、サポートされます。 Power BI の統合 と、Analytics サービスの OData フィード へのアクセスが一般公開されています。 Analytics OData フィードを使用し、フィードバックを提供することをお勧めします。

使用可能なデータはバージョンによって異なります。 OData API のサポートされている最新バージョンが v2.0され、最新のプレビュー バージョンが v4.0-preview。 詳細については、 OData API のバージョン管理に関するページを参照してください。

メモ

Analytics サービスは、Azure DevOps Server 2020 以降のすべての新しいプロジェクト コレクションに対して、運用環境で自動的にインストールされ、サポートされます。 Power BI の統合 と、Analytics サービスの OData フィード へのアクセスが一般公開されています。 Analytics OData フィードを使用し、フィードバックを提供することをお勧めします。 Azure DevOps Server 2019 からアップグレードする場合は、アップグレード中に Analytics サービスをインストールできます。

使用可能なデータはバージョンによって異なります。 OData API のサポートされている最新バージョンが v2.0され、最新のプレビュー バージョンが v4.0-preview。 詳細については、 OData API のバージョン管理に関するページを参照してください。

前提 条件

カテゴリ 必要条件
アクセス レベル - プロジェクトメンバー.
- 少なくとも Basic アクセス。
アクセス許可 既定では、プロジェクト メンバーには Analytics にクエリを実行してビューを作成する権限があります。 サービスと機能の有効化と一般的なデータ追跡アクティビティに関するその他の前提条件の詳細については、「アクセス許可と、Analyticsにアクセスするための前提条件」を参照してください。

$apply集計拡張機能について

OData には、作業追跡データに対して集計値をグループ化、フィルター処理、計算するための $apply キーワードを導入する集計拡張機能が用意されています。 次のセクションでは、$applyaggregategroupby、およびfiltercomputeを使用する方法について説明します。 完全な仕様については、「 データ集計の OData 拡張機能」を参照してください。

$applyを使用してデータを集計する

クエリ URL に $apply トークンを追加して集計をトリガーします。 基本的な構文は次のとおりです。

/{entitySetName}?$apply=aggregate({columnToAggregate} with {aggregationType} as {newColumnName})

パラメーター 説明
{entitySetName} クエリを実行するエンティティ セット ( WorkItemsなど)。
{columnToAggregate} 集計するフィールド ( RemainingWorkなど)。
{aggregationType} 集計関数: summinmaxaverage、または countdistinct
{newColumnName} 集計された結果列のエイリアス。

次の例は、一般的な aggregate 操作を示しています。

残りのすべての作業の合計を返します

https://analytics.dev.azure.com/{OrganizationName}/_odata/{version}/WorkItems?
  $apply=aggregate(RemainingWork with sum as SumOfRemainingWork)

最後の作業項目識別子を返します

https://analytics.dev.azure.com/{OrganizationName}/_odata/{version}/WorkItems?
  $apply=aggregate(WorkItemId with max as MaxWorkItemId)

groupby を使用して結果をグループ化する

groupby句は SQL GROUP BYと同様に機能し、集計された結果を 1 つ以上のプロパティで分割します。

種類別に作業項目をカウントする

https://analytics.dev.azure.com/{OrganizationName}/_odata/{version}/WorkItems?
  $apply=groupby((WorkItemType), aggregate($count as Count))

次のような結果を返します。

{
  "value": [
    { "WorkItemType": "Bug", "Count": 3 },
    { "WorkItemType": "Product Backlog Item", "Count": 13 }
  ]
}

複数のプロパティでグループ化する

groupby括弧内にさらにプロパティを追加して、より詳細な内訳を生成します。

https://analytics.dev.azure.com/{OrganizationName}/_odata/{version}/WorkItems?
  $apply=groupby((WorkItemType, State), aggregate($count as Count))

型と状態の一意の組み合わせごとに 1 行を返します (たとえば、バグ/アクティブ、バグ/コミット済み、製品バックログ項目/アクティブ)。

エンティティ間でのグループ化

ナビゲーション プロパティを使用して、関連するエンティティ間でグループ化できます。 たとえば、プロジェクトごとの領域をカウントするには、次のようにします。

https://analytics.dev.azure.com/{OrganizationName}/_odata/{version}/Areas?
  $apply=groupby((Project/ProjectName), aggregate($count as Count))

集計結果にフィルターを適用する

集計の前後にデータを絞り込むには、filter()内の$applyを使用します。 / (パイプ) を使用して複数のフィルターを連結し、最適なパフォーマンスを得るための最も選択的なフィルターを最初に配置します。

https://analytics.dev.azure.com/{OrganizationName}/_odata/{version}/WorkItems?
  $apply=
    filter(Iteration/IterationName eq 'Sprint 89')/
    filter(WorkItemType eq 'User Story')/
    groupby((State), aggregate($count as Count))

メモ

groupby句は省略可能です。 1 つの値を返すには、 aggregate のみを使用します。

1 回の呼び出しで複数のフィールドを集計する

余分なラウンド トリップを回避するために、1 つの aggregate 句内の複数のフィールドをコンマで区切って一覧表示します。

/WorkItems?$apply=aggregate(CompletedWork with sum as SumOfCompletedWork, RemainingWork with sum as SumOfRemainingWork)

戻り値:

{
  "value": [
    { "SumOfCompletedWork": 1525841.29, "SumOfRemainingWork": 73842.39 }
  ]
}

計算プロパティを計算する

集計された結果を compute() にパイプし、算術式 (divaddsubmul) を使用して新しい値を派生させます。 次の例では、完了した作業の割合を計算します。

/WorkItems?$apply=aggregate(CompletedWork with sum as SumOfCompletedWork, RemainingWork with sum as SumOfRemainingWork)/compute(SumOfCompletedWork div (SumOfCompletedWork add SumOfRemainingWork) as DonePercentage)

戻り値:

{
  "value": [
    { "DonePercentage": 0.9676, "SumOfCompletedWork": 1514698.34, "SumOfRemainingWork": 50715.95 }
  ]
}

累積フロー ダイアグラム クエリを作成する

次のクエリでは、filter エンティティ セットに対してgroupbyaggregate、およびWorkItemBoardSnapshotを組み合わせて、Power BI または Excel の累積フロー図のデータを生成します。

https://analytics.dev.azure.com/{OrganizationName}/{ProjectName}/_odata/{version}/WorkItemBoardSnapshot?
  $apply=
    filter(DateValue gt 2015-07-16Z and DateValue le 2015-08-16Z)/
    filter(BoardName eq 'Stories' and Team/TeamName eq '{teamName}')/
    groupby((DateValue, ColumnName), aggregate(Count with sum as Count))
  &$orderby=DateValue

このクエリは、日付範囲と特定のボードとチームにフィルター処理し、日付とボード列でグループ化し、グループごとのカウントを返します。 戻り値:

{
  "value": [
    { "DateValue": "2015-07-16T00:00:00-07:00", "ColumnName": "Completed", "Count": 324 },
    { "DateValue": "2015-07-16T00:00:00-07:00", "ColumnName": "In Progress", "Count": 5 }
  ]
}

ヒント

返される行が少ないほど、Power BI または Excel の更新が速くなります。 結果セットを最小限に抑えるには、厳密な日付範囲と特定のボードフィルターとチーム フィルターを使用します。

AI を使用して作業追跡データを集計する

Azure DevOps MCP Server を構成する場合は、AI アシスタントに依頼して、Azure DevOps 組織からリアルタイムの作業項目データを取得し、そのデータに基づく Analytics OData $apply集計クエリのドラフト作成やトラブルシューティングを行うことができます。

Task プロンプトの例
ステート別のカウント In <OrganizationName>, draft an Analytics OData $apply query that counts work items grouped by State in <ProjectName>. Use placeholders for <ODataVersion> and any filters I need.
種類と状態別のカウント Create an Analytics OData $apply query for <OrganizationName> that groups WorkItems by WorkItemType and State and returns a count for each group in <ProjectName>.
フィルター処理して集計する Write an Analytics OData query that filters WorkItems to bugs with Priority = 1 in <ProjectName>, then groups by Area/AreaPath and State and returns counts.
残存作業時間と完了作業時間の合計 Generate an Analytics OData $apply query that filters to Iteration/IterationPath startswith '<IterationPath>' in <ProjectName>, then returns SumOfCompletedWork and SumOfRemainingWork.
チーム間で集計する Help me create an Analytics OData $apply query for WorkItemBoardSnapshot that filters to BoardName '<BoardName>' and Team/TeamName '<TeamName>' in <ProjectName>, then groups by DateValue and ColumnName and returns Count.
各句について説明する Explain what each part of this $apply query does and how to adjust it for a different iteration: <ODataQueryOrUrl>.
$apply エラーをデバッグする This Analytics OData query returns a 400 error. Diagnose the $apply syntax and suggest a corrected query: <ODataQueryOrUrl>.
結果の検証 Given this Analytics OData query for <OrganizationName>/<ProjectName>: <ODataQueryOrUrl>, tell me what columns and shape of JSON to expect back, and what common mistakes to check if results look wrong.

ヒント

Visual Studio Code を使用している場合、エージェント モードは、フィルターの調整、 $apply 構文のトラブルシューティング、結果の検証など、集計クエリの反復処理に特に役立ちます。

次のステップ