Analytics を使用して作業追跡データを集計する
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
OData で Analytics を使用して、2 つの方法のいずれかで作業追跡データの合計を取得できます。 最初のメソッドは、OData クエリに基づいて作業項目の単純な数を返します。 2 番目のメソッドは、OData 集計拡張機能を実行する OData クエリに基づいて JSON 形式の結果を返します。
この記事では、 Analytics の OData クエリの構築OData Analytics を使用した基本的なクエリの定義で提供される情報を基にしています。 また、クエリは作業項目データの取得に重点を置いていますが、原則は他のエンティティ セットのクエリに適用されます。
この記事では、次のことについて説明します。
- OData 集計拡張機能について
- OData の集計拡張機能を使用する方法
- 集計された結果をグループ化してフィルター処理する方法
- 累積フロー図を生成するためにデータを集計する方法
単純なカウントを生成する方法については、「 項目の数を返す (他のデータがない)」 を参照し、 項目とデータの数を戻すを参照してください。
Note
Analytics サービスは、すべての Azure DevOps Services で自動的に有効になり、運用環境でサポートされます。 Power BI の統合 Analytics サービスの OData フィード へのアクセスが一般公開されています。 お使いいただき、フィードバックをお寄せください。
使用可能なデータはバージョンによって異なります。 サポートされている最新バージョンが v2.0
され、最新のプレビュー バージョンが v4.0-preview
。 詳細については、 OData API のバージョン管理に関するページを参照してください。
Note
Analytics サービスは、Azure DevOps Server 2020 以降のすべての新しいプロジェクト コレクションに対して、運用環境で自動的にインストールされ、サポートされます。 Power BI の統合 Analytics サービスの OData フィード へのアクセスが一般公開されています。 お使いいただき、フィードバックをお寄せください。 Azure DevOps Server 2019 からアップグレードした場合は、アップグレード中に Analytics サービスをインストールできます。
使用可能なデータはバージョンによって異なります。 サポートされている最新バージョンが v2.0
され、最新のプレビュー バージョンが v4.0-preview
。 詳細については、 OData API のバージョン管理に関するページを参照してください。
Note
Analytics サービスは、Azure DevOps Server 2019 のプレビュー段階です。 プロジェクト コレクション 有効またはインストール できます。 Power BI 統合 Analytics Service の OData フィード へのアクセスはプレビュー段階です。 お使いいただき、フィードバックをお寄せください。
使用可能なデータはバージョンによって異なります。 サポートされている最新バージョンが v2.0
され、最新のプレビュー バージョンが v4.0-preview
。 詳細については、 OData API のバージョン管理に関するページを参照してください。
OData の集計拡張機能とは
Analytics は OData に依存して、作業追跡データに対するクエリを作成します。 OData の集計は、 $apply
キーワードを導入する拡張機能を使用して実現されます。 このキーワードを使用する方法の例を以下に示します。 拡張機能の詳細については、 OData Extension for Data Aggregationを参照してください。
OData 集計拡張機能を使用してデータを集計する
単純なカウントを行う方法を見てきたので、URL の末尾にある基本的な形式が次の $apply
トークンを使用して集計をトリガーする方法を確認しましょう。
/{entitySetName}?$apply=aggregate({columnToAggregate} with {aggregationType} as {newColumnName})
ここで:
- {entitySetName} は、クエリを実行する必要があるエンティティです。
- {columnToAggregate} は集計列です
- {aggregationType} は、使用する集計の種類を指定します
- {newColumnName} は、集計後に値を持つ列の名前を指定します。
Apply 拡張機能を使用して集計されたデータ
$apply
拡張機能を使用すると、作業追跡データに対してクエリを実行するときに、カウント、合計、追加情報を取得できます。
残りのすべての作業の合計を返します
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 句を使用して結果をグループ化する
OData 集計拡張機能では、SQL GROUP BY
句と同じgroupby
句もサポートされています。 この句を使用すると、数値をすばやく詳細に分割できます。
たとえば、次の句は作業項目の数を返します。
https://analytics.dev.azure.com/{OrganizationName}/_odata/{version}/WorkItems?
$apply=aggregate($count as Count)
groupby
句を追加して、種類別の作業項目の数を返します。
https://analytics.dev.azure.com/{OrganizationName}/_odata/{version}/WorkItems?
$apply=groupby((WorkItemType), aggregate($count as Count))
次の例のような結果が返されます。
{
"@odata.context":"https://analytics.dev.azure.com/{OrganizationName}/_odata/{version}/$metadata#WorkItems(WorkItemType,Count)","value":[
{
"@odata.id":null,"WorkItemType":"Bug","Count":3
},
{
"@odata.id":null,"WorkItemType":"Product Backlog Item","Count":13
}
]
}
次の例のように、複数のプロパティでグループ化することもできます。
https://analytics.dev.azure.com/{OrganizationName}/_odata/{version}/WorkItems?
$apply=groupby((WorkItemType, State), aggregate($count as Count))
次の例のような結果が返されます。
{
"@odata.context": "https://analytics.dev.azure.com/{OrganizationName}/_odata/{version}/$metadata#WorkItems(WorkItemType,State,Count)",
"value": [
{
"@odata.id": null,
"State": "Active",
"WorkItemType": "Bug",
"Count": 2
},
{
"@odata.id": null,
"State": "Committed",
"WorkItemType": "Bug",
"Count": 1
},
{
"@odata.id": null,
"State": "Active",
"WorkItemType": "Product Backlog Item",
"Count": 5
},
{
"@odata.id": null,
"State": "Committed",
"WorkItemType": "Product Backlog Item",
"Count": 8
}
]
}
エンティティ間でグループ化することもできますが、OData グループ化は、通常の考え方とは異なります。
たとえば、組織またはコレクション内の各プロジェクトに含まれる領域の数を知りたいとします。 OData では、"すべての領域をカウントし、プロジェクトごとにグループ化する" は、"すべてのプロジェクトと各プロジェクトの領域の数を表示する" と同じです。 その結果、クエリは次のようになります。
https://analytics.dev.azure.com/{OrganizationName}/_odata/{version}/Areas?
$apply=groupby((Project/ProjectName), aggregate($count as Count))
集計結果にフィルターを適用する
集計結果をフィルター処理することもできますが、集計を使用していない場合とは若干異なる方法で適用されます。 分析ではパイプに沿ってフィルターが評価されるため、常に最も個別のフィルター処理を最初に実行することをお勧めします。
フィルターは次の例のようになります。
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))
Note
groupby
句を指定する必要はありません。 単に aggregate
句を使用して 1 つの値を返すことができます。
1 回の呼び出しで複数の集計を生成する
複数の情報を提供したい場合があります。 たとえば、完了した作業の合計と、残りの作業の合計を個別に示します。 このような場合は、次のように個別の呼び出しまたは 1 回の呼び出しを行うことができます。
/WorkItems?$apply=aggregate(CompletedWork with sum as SumOfCompletedWork, RemainingWork with sum as SumOfRemainingWork)
次の例のような結果が返されます。
{
"@odata.context":"https://analytics.dev.azure.com/{OrganizationName}/_odata/{version}/$metadata#WorkItems(SumOfCompletedWork,SumOfRemainingWork)","value":[
{
"@odata.id":null,"SumOfCompletedWork":1525841.2900000005,"SumOfRemainingWork":73842.39
}
]
}
1 回の呼び出しで使用する計算プロパティを生成する
数式を使用して、結果セットで使用するプロパティを計算することが必要になる場合があります。 たとえば、完了した作業の合計を、完了した作業の合計に残存作業時間の合計を加えて、完了した作業の割合を計算します。 このような場合は、次の例を使用できます。
/WorkItems?$apply=aggregate(CompletedWork with sum as SumOfCompletedWork, RemainingWork with sum as SumOfRemainingWork)/compute(SumOfCompletedWork div (SumOfCompletedWork add SumOfRemainingWork) as DonePercentage)
{
"@odata.context":"https://analytics.dev.azure.com/{OrganizationName}/_odata/{version}/$metadata#WorkItems(SumOfCompletedWork,SumOfRemainingWork)","value":[
{
"@odata.id":null,"DonePercentage":0.96760221857946638,"SumOfRemainingWork":50715.95,"SumOfCompletedWork":1514698.3400000033
}
]
}
集計データから累積フロー ダイアグラムを生成する
Power BI でumulative フローダイアグラムを作成するとします。 次のようなクエリを使用できます。
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
この例のような結果が返されます。 その後、選択したデータ視覚化内で直接使用できます。
{
"@odata.context": "https://analytics.dev.azure.com/{OrganizationName}/{ProjectName}/_odata/{version}//$metadata#WorkItemBoardSnapshot(DateValue,ColumnName,Count)",
"value": [
{
"@odata.id": null,
"DateValue": "2015-07-16T00:00:00-07:00",
"Count": 324,
"ColumnName": "Completed"
},
{
"@odata.id": null,
"DateValue": "2015-07-16T00:00:00-07:00",
"Count": 5,
"ColumnName": "In Progress"
}
]
}
このクエリの実際の動作を見てみましょう。
- 特定のチームにデータをフィルター処理する
- 特定のバックログにデータをフィルター処理する
- 作業項目の数を返します。
Power BI または Excel を更新する場合、必要な行が少ないほど、更新が速くなります。