Analytics を使用して作業追跡データのクエリを実行する
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
この記事で提供されている基本的なクエリを使用して、Azure DevOps の作業追跡データに対してクエリを実行できます。 これらのクエリは、Analytics のさまざまな機能を示しながら、日常的なニーズに対応します。 これらのクエリのほとんどは、ニーズに合わせて調整できます。
この記事では、「Azure Boards Analytics の分析とメタデータに関する 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 サービスの OData フィード へのアクセスはプレビュー段階です。 お使いいただき、フィードバックをお寄せください。
使用可能なデータはバージョンによって異なります。 サポートされている最新バージョンは v2.0
、最新のプレビュー バージョンです v4.0-preview
。 詳細については、OData API のバージョン管理に関するページを参照してください。
前提条件
- アクセス: 少なくとも Basic アクセス権を持つプロジェクトのメンバーである。
- 権限: 既定では、プロジェクト メンバーは Analytics にクエリを実行し、ビューを作成する権限を持ちます。
- サービスと機能の有効化と一般的なデータ追跡アクティビティに関するその他の前提条件の詳細については、「Analytics にアクセスするためのアクセス許可と前提条件」を参照してください。
すべての例は、Azure DevOps 上のプロジェクトを対象とします。 組織レベルのスコープまたは Azure DevOps Server の例については、「プロジェクトと組織スコープのクエリ」を参照してください。
ヒント
WIQL to OData Azure DevOps Marketplace 拡張機能を使用すると、[クエリ] ページから作業項目クエリに基づいて OData クエリをすばやく生成できます。 この拡張機能は、作業項目と作業項目および直接リンクのフラット リストの変換をサポートしています。 拡張機能は Azure Boards のサポートされていない機能であるため、製品チームではサポートされていません。 これらの拡張機能を使用する上での質問、提案、または問題については、対応する拡張機能に関するページを参照してください。
変更日に基づいて作業項目をフィルター処理する
エンティティ セットにクエリを WorkItems
実行して、フィールド条件に一致する作業項目を一覧表示します。
次のクエリは、変更日が 2021 年 12 月 12 日 より大きい製品バックログ項目、バグ、および機能を返します。
https://analytics.dev.azure.com/{OrganizationName}/{ProjectName}/_odata/v1.0/WorkItems?
$select=WorkItemId, WorkItemType, Title, State
&$expand=AssignedTo($select=UserEmail)
&$filter=(Project/ProjectName eq 'Fabrikam Fiber'
AND (WorkItemType eq 'Product Backlog Item' or WorkItemType eq 'Bug' or WorkItemType eq 'Feature')
AND ChangedOn/Date ge 2021-12-16T23:44:15.619Z)
&$orderby=WorkItemType desc
エリアに基づいて作業項目をフィルター処理する
次のクエリを変更して、特定のエリア パスのすべての作業項目を一覧表示できます。
https://analytics.dev.azure.com/{OrganizationName}/{ProjectName}/_odata/{version}/WorkItems?
$filter=Area/AreaPath eq '{area path}'
&$select=WorkItemId, Title, State
クエリの例:
たとえば、次の構文は、fabrikam 組織に対して定義されている各プロジェクトの作業項目数を照会します。
https://analytics.dev.azure.com/fabrikam/_odata/v4.0-preview/WorkItems?$apply=groupby((Project/ProjectName), aggregate($count as Count))
応答の例:
応答では、次の 5 つのプロジェクトのデータが返されます。
{
"@odata.context":"https://analytics.dev.azure.com/fabrikam/_odata/v4.0-preview/$metadata#WorkItems(Project(ProjectName),Count)",
"value":[
{
"@odata.id":null,
"Count":2,
"Project":{
"@odata.id":null,
"ProjectName":"Basic Fabrikam"
}
},
{
"@odata.id":null,
"Count":19,
"Project":{
"@odata.id":null,
"ProjectName":"Demo 11"
}
},
{
"@odata.id":null,
"Count":188,
"Project":{
"@odata.id":null,
"ProjectName":"Fabrikam Fiber"
}
},
{
"@odata.id":null,
"Count":89,
"Project":{
"@odata.id":null,
"ProjectName":"MyFirstProject"
}
},
{
"@odata.id":null,
"Count":2,
"Project":{
"@odata.id":null,
"ProjectName":"MyPublicProject"
}
}
]
}
イテレーションに基づいて作業項目をフィルター処理する
https://analytics.dev.azure.com/{OrganizationName}/{ProjectName}/_odata/{version}/WorkItems?
$filter=Iteration/IterationPath eq '{iteration path}'
&$select=WorkItemId, Title, State
クエリの例:
たとえば、次の構文は、イテレーション パス =Fabrikam Fiber\Release 1\Sprint 6 の Fabrikam Fiber プロジェクトの作業項目を照会します。
https://analytics.dev.azure.com/fabrikam/_odata/v4.0-preview/WorkItems?$select=WorkItemId, WorkItemType, Title, State&$expand=Iteration($select=IterationPath)&$filter=(Project/ProjectName eq 'Fabrikam Fiber' AND WorkItemType ne '' AND Iteration/IterationPath eq 'Fabrikam Fiber\Release 1\Sprint 6')
応答の例:
応答は、次の 4 つの作業項目のデータを返します。
{
"@odata.context":"https://analytics.dev.azure.com/fabrikam/_odata/v4.0-preview/$metadata#WorkItems(WorkItemId,WorkItemType,Title,State,Iteration(IterationPath))",
"value":[
{
"WorkItemId":361,
"Title":"Hello World Web Site",
"WorkItemType":"Product Backlog Item",
"State":"New",
"Iteration":{
"IterationPath":"Fabrikam Fiber\\Release 1\\Sprint 6"
}
},
{
"WorkItemId":1126,
"Title":"web site task",
"WorkItemType":"Task",
"State":"To Do",
"Iteration":{
"IterationPath":"Fabrikam Fiber\\Release 1\\Sprint 6"
}
},
{
"WorkItemId":1136,
"Title":"Add a new task with two new tags",
"WorkItemType":"Task",
"State":"To Do",
"Iteration":{
"IterationPath":"Fabrikam Fiber\\Release 1\\Sprint 6"
}
},
{
"WorkItemId":1140,
"Title":"New task - test for Blocked",
"WorkItemType":"Task",
"State":"To Do",
"Iteration":{
"IterationPath":"Fabrikam Fiber\\Release 1\\Sprint 6"
}
}
]
}
イテレーションの項目を取得する
イテレーションの最初の日とイテレーションの最後の日の間にある特定のイテレーションのすべての作業項目を取得できます。 ここでは、クエリは作業追跡データに含まれるデータによって制限されます。
https://analytics.dev.azure.com/{OrganizationName}/{ProjectName}/_odata/{version}/WorkItems?
$filter=Iteration/IterationPath eq '{iteration path}'
and ChangedDate ge Iteration/StartDate
and ChangedDate le Iteration/EndDate
&$select=WorkItemId, Title, State
特定のタグを含む作業項目をフィルター処理する
作業項目に関連付けることができるタグのコレクションがあるため、任意の演算子がここで使用されます。
使用法の観点から、形式は次のとおりです {Navigation Property}/any(d:d/{Field Name} {operator} {expression})
。 中かっこ ({}) で囲まれていない項目はリテラルです。 いくつかのバリエーションがあります。 たとえば、上記の式で使用した "d" を使用する必要はありません。
この形式に従うと、単純になります。
https://analytics.dev.azure.com/{OrganizationName}/{ProjectName}/_odata/{version}/WorkItems?
$filter=Tags/any(d:d/TagName eq '{tag name}')
&$select=WorkItemId, Title, State
特定のチームの作業項目をフィルター処理する
特定のチームの作業項目を一覧表示するには、次のクエリを使用します。
https://analytics.dev.azure.com/{OrganizationName}/{ProjectName}/_odata/{version}/WorkItems?
$filter=Teams/any(d:d/TeamName eq '{team name}')
&$select=WorkItemId, Title, State
特定の値を持つフィールドに基づいて作業項目をフィルター処理する
次のクエリは、Was Ever 演算子を使用する作業項目クエリに似ています。
https://analytics.dev.azure.com/{OrganizationName}/{ProjectName}/_odata/{version}/WorkItems?
$filter=WorkItemType eq '{Type}'
and Revisions/any(r:r/ResolvedBy/UserName eq '{User}')
クエリの例:
次のクエリは、Fabrikam Fiber プロジェクトの電子メールが "fabrikamfiber4@hotmail.com' である Jamal Hartnett に割り当てられた作業項目を返します。
https://analytics.dev.azure.com/fabrikam/Fabrikam Fiber/_odata/v4.0-preview/WorkItems?
$select=WorkItemType, Title, State,
&$expand=AssignedTo($select=UserEmail), Area($select=AreaPath)
&$filter=(WorkItemType ne '' AND State ne '' AND Revisions/any(r:r/AssignedTo/UserEmail eq 'fabrikamfiber4@hotmail.com'))
&$orderby=WorkItemType asc
応答の例:
応答は、2 つの作業項目を返します。
{
"@odata.context":"https://analytics.dev.azure.com/fabrikam/Design%20Agile/_odata/v4.0-preview/$metadata#WorkItems(Priority,WorkItemType,Title,State,TagNames,AssignedTo(UserEmail),Area(AreaPath))",
"value":[
{
"Title":"New home page design",
"WorkItemType":"Feature",
"State":"Closed",
"AssignedTo":{
"UserEmail":"fabrikamfiber4@hotmail.com"
},
"Area":{
"AreaPath":"Design Agile"
}
},
{
"Title":"Check performance",
"WorkItemType":"User Story",
"State":"New",
"AssignedTo":{
"UserEmail":"fabrikamfiber4@hotmail.com"
},
"Area":{
"AreaPath":"Design Agile"
}
}
]
}
エリア パスの下に割り当てられたチームを取得する
次のクエリは、Fabrikam Fiber プロジェクトのアカウント管理領域の領域パスに割り当てられたチームの名前を返します。
> https://analytics.dev.azure.com/fabrikam/Fabrikam Fiber/_odata/v4.0-preview/Areas?
> $filter=startswith(AreaPath,'Fabrikam Fiber\Account Management')
> &$select=AreaPath&$expand=Teams($select=TeamName)
>```
The response returns three area paths and the names of several teams assigned to each.
> [!div class="tabbedCodeSnippets"]
```OData
> @odata.context "https://analytics.dev.azure.com/fabrikam/Fabrikam%20Fiber/_odata/v4.0-preview/$metadata#Areas(AreaPath,Teams(TeamName))"
> value
> 0
> AreaPath "Fabrikam Fiber\\Account Management\\Customer Profile"
> Teams
> 0
> TeamName "Organization Management"
> 1
> TeamName "Fabrikam Team"
> 2
> TeamName "Customer Profile"
> 1
> AreaPath "Fabrikam Fiber\\Account Management\\Shopping Cart"
> Teams
> 0
> TeamName "Organization Management"
> 1
> TeamName "Shopping Cart"
> 2
> TeamName "Fabrikam Team"
> 2
> AreaPath "Fabrikam Fiber\\Account Management"
> Teams
> 0
> TeamName "Organization Management"
> 1
> TeamName "Fabrikam Team"
特定の作業項目の履歴を返す
エンティティ セットにクエリを WorkItemRevisions
実行して、作業項目の履歴を一覧表示します。 次のクエリは、指定された作業項目の リビジョンごとに Title、 State、Iteration Path の値を返します。
https://analytics.dev.azure.com/{OrganizationName}/{ProjectName}/_odata/{version}/WorkItemRevisions?
$filter=WorkItemId eq {Id}
&$select=WorkItemId, Title, State, Iteration Path
Note
作業項目に対する変更 (スタック ランク値の変更を含む) が行われると、リビジョンが作成されます。 履歴データの詳細については、履歴データへのフィルターの適用を参照してください。
クエリの例:
たとえば、次の構文は、Fabrikam Fiber プロジェクトの ID=1145 のリビジョンを照会します。
https://analytics.dev.azure.com/fabrikam/Fabrikam Fiber/_odata/v1.0/WorkItemRevisions?$select=WorkItemId, Title, State&$expand=Iteration($select=IterationPath)&$filter=(Project/ProjectName eq 'Fabrikam Fiber' AND WorkItemId eq 1145 AND State ne '' AND Revision gt 1)
応答の例:
そして、応答は 4 つのリビジョンのデータを返します。
{
"@odata.context":"https://analytics.dev.azure.com/fabrikam/Fabrikam%20Fiber/_odata/v4.0-preview/$metadata#WorkItemRevisions(WorkItemId,Title,State,Iteration(IterationPath))",
"value":[
{
"WorkItemId":1145,
"Title":"Sprint 2 work added in June",
"State":"New",
"Iteration":{
"IterationPath":"Fabrikam Fiber\\Future"
}
},
{
"WorkItemId":1145,
"Title":"Sprint 2 work added in June",
"State":"New",
"Iteration":{
"IterationPath":"Fabrikam Fiber\\Future"
}
},
{
"WorkItemId":1145,
"Title":"Sprint 2 work added in June",
"State":"New",
"Iteration":{
"IterationPath":"Fabrikam Fiber\\Release 1\\Sprint 2"
}
},
{
"WorkItemId":1145,
"Title":"Sprint 2 work added in June",
"State":"Done",
"Iteration":{
"IterationPath":"Fabrikam Fiber\\Release 1\\Sprint 2"
}
}
]
}