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 Service の OData フィード へのアクセスが一般提供されています。 これを使用し、フィードバックをお寄せください。
使用可能なデータはバージョンによって異なります。 サポートされている最新バージョンは で v2.0
、最新のプレビュー バージョンは です v4.0-preview
。 詳細については、「 OData API のバージョン管理」を参照してください。
注意
Analytics サービスは、Azure DevOps Server 2020 以降のバージョンのすべての新しいプロジェクト コレクションに対して、運用環境で自動的にインストールされ、サポートされます。 Power BI 統合 と Analytics Service の OData フィード へのアクセスが一般提供されています。 これを使用し、フィードバックをお寄せください。 Azure DevOps Server 2019 からアップグレードした場合は、アップグレード中に Analytics サービスをインストールできます。
使用可能なデータはバージョンによって異なります。 サポートされている最新バージョンは で v2.0
、最新のプレビュー バージョンは です v4.0-preview
。 詳細については、「 OData API のバージョン管理」を参照してください。
注意
Analytics サービスは、Azure DevOps Server 2019 のプレビュー段階です。 プロジェクト コレクションに対 して有効またはインストール できます。 Power BI の統合 と、Analytics サービスの OData フィード へのアクセスはプレビュー段階です。 これを使用し、フィードバックをお寄せください。
使用可能なデータはバージョンによって異なります。 サポートされている最新バージョンは で v2.0
、最新のプレビュー バージョンは です v4.0-preview
。 詳細については、「 OData API のバージョン管理」を参照してください。
OData の集計拡張機能とは
分析は OData に依存して、作業追跡データに対するクエリを作成します。 OData の集計は、キーワード (keyword)を導入する拡張機能を$apply
使用して実現されます。 このキーワード (keyword)を使用する方法の例をいくつか次に示します。 拡張機能の詳細については、「 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 のグループ化は、通常の考え方とは異なります。
たとえば、organizationまたはコレクション内の各プロジェクト内の領域の数を知りたいとします。 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 回の呼び出しを行うことができます。
/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 で 累積フロー図 を作成するとします。 次のようなクエリを使用できます。
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 を更新する場合、必要な行が少ないほど、更新が速くなります。