OData Analytics を使用して基本的なクエリを定義する
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
Azure DevOps 用の Analytics を使用すると、関心のあるデータを返す基本的なクエリとフィルター処理されたクエリを作成できます。 これらのクエリは、ブラウザーまたは Power BI 内で直接実行できます。
この記事では、「Azure Boards Analytics の分析とメタデータに関する OData クエリの構築」で提供される情報を基にしています。 また、この記事のクエリは作業追跡エンティティ セットの取得に重点を置いていますが、原則は他のエンティティ セットのクエリに適用されます。
この記事では、次のデータを返すクエリを定義する方法について説明します。
- 項目の数 (他のデータなし)
- アイテムとデータの数
- [領域] または [反復パス] に定義されているプロパティ
- 選択した列またはフィールド
- フィルター処理されたデータ
- [ID]、[エリア パス]、[反復パス] フィールドのデータを返します
- ナビゲーション プロパティでフィルター処理する
- 日付範囲のクエリを実行する
- expand ステートメントを入れ子にする
- 結果の並べ替え、並べ替えオプション
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 にアクセスするためのアクセス許可と前提条件」を参照してください。
Note
この記事では、OData クエリ URL が Azure DevOps Services 用に定義されています。 オンプレミス サーバーに対して同様のクエリを作成するには、「Analytics の OData クエリを構築する」のガイダンスを参照してください。 ブラウザーを使用した OData のクエリに慣れるために、組織とプロジェクトに提供されるクエリを調整することをお勧めします。
項目の数を返します (他のデータは返しません)
組織またはプロジェクトで定義されている項目またはエンティティの数について学習するには、クエリ オプションを指定 $apply=aggregate($count as Count)
します。 たとえば、次のクエリは、組織に対して定義されているプロジェクト、作業項目、エリア パス、ユーザーの数を返します。
https://analytics.dev.azure.com/{OrganizationName}/_odata/v4.0-preview/Projects?$apply=aggregate($count as Count)
https://analytics.dev.azure.com/{OrganizationName}/_odata/v4.0-preview/WorkItems?$apply=aggregate($count as Count)
https://analytics.dev.azure.com/{OrganizationName}/_odata/v4.0-preview/Areas?$apply=aggregate($count as Count)
https://analytics.dev.azure.com/{OrganizationName}/_odata/v4.0-preview/Users?$apply=aggregate($count as Count)
ヒント
クエリを実行しているユーザーがすべてのプロジェクトにアクセスできない場合、プロジェクト間クエリは失敗します。 Project クエリと組織スコープクエリの 要件の詳細を確認します。
プロジェクト数
@odata.context "https://analytics.dev.azure.com/fabrikam/_odata/v4.0-preview/$metadata#Projects(Count)"
value
0
@odata.id null
Count 28
作業項目数
@odata.context "https://analytics.dev.azure.com/fabrikam/_odata/v4.0-preview/$metadata#WorkItems(Count)"
value
0
@odata.id null
Count 1166
面積の数
@odata.context "https://analytics.dev.azure.com/fabrikam/_odata/v4.0-preview/$metadata#Areas(Count)"
value
0
@odata.id null
Count 70
ユーザー数
@odata.context "https://analytics.dev.azure.com/fabrikam/_odata/v4.0-preview/$metadata#Areas(Count)"
value
0
@odata.id null
Count 16
アイテムとデータの数を返す
項目の数と項目の選択データを返すには、クエリ オプションを $count=true
指定します。 たとえば、次のクエリは、指定されたプロパティと共に、プロジェクトに対して定義された作業項目、エリア パス、およびユーザーの数を返します。 有効なプロパティについては、Azure Boards Analytics のメタデータ リファレンスと、Azure DevOps Analytics のカレンダーの日付、プロジェクト、およびユーザーのメタデータ リファレンスを参照してください。
ヒント
返すプロパティを指定しない場合、指定したエンティティ型に対して定義されているすべてのプロパティが返されます。
https://analytics.dev.azure.com/{OrganizationName}/{ProjectName}/_odata/v4.0-preview/WorkItems?$count=true&$select=WorkItemId,Title,WorkItemType
https://analytics.dev.azure.com/{OrganizationName}/{ProjectName}/_odata/v4.0-preview/Areas?$count=true&$select=AreaName,AreaPath
https://analytics.dev.azure.com/{OrganizationName}/{ProjectName}/_odata/v4.0-preview/Users?$count=true&$select=UserName,UserEmail
Areas プロパティまたは Iterations プロパティ
エリア パスまたはIterationSK
反復パスのAreaSK
プロパティまたはプロパティ、またはその他のプロパティを検索するには、次のクエリを使用します。
特定のエリア パスの AreaSK を返します
次のクエリでは、Fabrikam Fiber\Service Delivery\Internet Area Path に定義されているプロパティを返AreaSK
すように指定します。 エンティティ セットに対して定義されているその他のプロパティをAreas
指定するには、「Azure Boards Analytics のメタデータ リファレンス」を参照してください。
https://analytics.dev.azure.com/fabrikam/Fabrikam%20Fiber/_odata/v4.0-preview/Areas?$filter=AreaPath eq 'Fabrikam Fiber\Service Delivery\Internet' &$select=AreaSK
クエリは次のデータを返します。
{
"@odata.context": "https://analytics.dev.azure.com/fabrikam/Fabrikam%20Fiber/_odata/v4.0-preview/$metadata#Areas(AreaSK)",
"value": [
{
"AreaSK": "637dc203-0549-4415-9663-b6358ac27d21"
}
]
}
特定のイテレーション パスの IterationSK を返します
次のクエリでは、Fabrikam Fiber\Release 1\Sprint 3 反復パスに定義されているプロパティを返すようにIterationSK
指定します。 エンティティ セットに対して定義されている他のプロパティをIterations
指定するには、「Azure Boards Analytics のメタデータ リファレンス」の「イテレーション」を参照してください。
https://analytics.dev.azure.com/fabrikam/Fabrikam%20Fiber/_odata/v4.0-preview/Iterations?$filter=IterationPath eq 'Fabrikam Fiber\Release 1\Sprint 3' &$select=IterationSK
クエリは次のデータを返します。
{
"@odata.context": "https://analytics.dev.azure.com/fabrikam/Fabrikam%20Fiber/_odata/v4.0-preview/$metadata#Iterations(IterationSK)",
"value": [
{
"IterationSK": "862e961a-ac7a-4fcc-9ebc-8afd0c12fed5"
}
]
}
特定のプロパティまたはフィールドを返す
特定のプロパティまたは作業項目フィールドを返すには、プロパティ名を $select
指定する句を追加します。
たとえば、作業項目 ID、作業項目の種類、タイトル、および作業項目の状態を返すには、次の句をクエリに追加します。 この句は、名前付きフィールドに対応するプロパティを指定します。
Note
プロパティ名にはスペースが含まれません。 スペースを追加すると、クエリは失敗します。 OData クエリでは、間隔と大文字と小文字の両方に注意が必要です。 ユーザー設定フィールド プロパティのラベル付け方法については、Azure Boards のメタデータ リファレンス、カスタム プロパティに関するページを参照してください。
ここでは、上位 3 つの作業項目を返すように指定します。
https://analytics.dev.azure.com/fabrikam/Fabrikam Fiber/_odata/v4.0-preview/WorkItems?$select=WorkItemId,WorkItemType,Title,State&$top=3
分析では、次のデータが返されます。
@odata.context "https://analytics.dev.azure.com/fabrikam/Fabrikam%20Fiber/_odata/v4.0-preview/$metadata#WorkItems(WorkItemId,WorkItemType,Title,State)"
value
0
WorkItemId 462
Title "Test case"
WorkItemType "Test Case"
State "Design"
1
WorkItemId 491
Title "Change color settings"
WorkItemType "Shared Steps"
State "Active"
2
WorkItemId 461
Title "Test impediment"
WorkItemType "Impediment"
State "Open"
.
データのフィルター選択
選択項目を返すようにエンティティ セットをフィルター処理するには、項目が満たす必要がある条件を指定する句を指定 $filter
します。 最後のクエリに基づいて、ここでフィルター句を追加して、処理中の状態にある機能作業項目の種類のみを返します。
/WorkItems?$select=WorkItemId,WorkItemType,Title,State&$filter=State eq 'In Progress'
https://analytics.dev.azure.com/fabrikam/Fabrikam Fiber/_odata/v4.0-preview/WorkItems?$filter=WorkItemType eq 'Feature' and State eq 'In Progress'&$select=WorkItemId,Title,AssignedTo,State
分析では、次のデータが返されます。
@odata.context "https://analytics.dev.azure.com/kelliott/Fabrikam%20Fiber/_odata/v4.0-preview/$metadata#WorkItems(WorkItemId,Title,State)"
value
0
WorkItemId 380
Title "Refresh web look, feel, performance factors"
State "In Progress"
1
WorkItemId 480
Title "Customer Phone - Phase 1"
State "In Progress"
2
WorkItemId 493
Title "Change initial view"
State "In Progress"
3
WorkItemId 479
Title "Customer Web - Phase 1"
State "In Progress"
4
WorkItemId 551
Title "Mobile feedback"
State "In Progress"
複数のフィルター句を指定する
複数のフィルター句を使用 AND
して OR
指定できます。
たとえば、次のクエリでは、"新規"、"コミット済み"、または "アクティブ" 状態のユーザー ストーリー、バグ、およびバックログ作業 (カスタム作業項目の種類) の作業項目を返すように指定します。 かっこを使用して、必要に応じてフィルター句をグループ化します。
さらに、、などcontains
startswith
endswith
、さまざまな関数を適用できます。 サポートされている OData の 機能と句、サポートされている関数を参照してください。
[ID]、[エリア パス]、[反復パス] フィールドのデータを返します
選択プロパティはナビゲーション プロパティに関連付けられているので、ステートメントを使用して $select
直接アクセスすることはできません。 目的のデータを $expand
返すには、ステートメントを使用する必要があります。 これらのプロパティは、多くの場合、独自のいくつかのプロパティに関連付けられています。 たとえば、[ID] フィールドを使用して、ユーザー名またはユーザーの電子メールを返すように指定できます。
次の表に、これらのプロパティのいくつかを展開する方法の例を示します。
型フィールド | Referenced プロパティ | 含める句の例 |
---|---|---|
DateTime | DateSK |
$expand=CreatedDate($select=Date) または$expand=CreatedDate($select=WeekStartingDate) |
ID | UserSK |
$expand=AssignedTo($select=UserName) または$expand=AssignedTo($select=UserEmail) |
面グラフ | AreaSK |
$expand=Area($select=AreaName) または$expand=Area($select=AreaPath) |
反復 | IterationSK |
$expand=Iteration($select=IterationName) または$expand=Iteration($select=IterationPath) または$expand=Iteration($select=StartDate) |
Project | ProjectSK |
$expand=Project($select=ProjectName) |
Team | TeamSK |
$expand=Teams($select=TeamName) |
展開する必要がある複数のプロパティを指定するには、comman で区切られたリスト内の 1 つの展開句でプロパティを指定します。
$expand=AssignedTo($select=UserName),Iteration($select=IterationPath),Area($select=AreaPath)
ナビゲーション プロパティでフィルター処理する
フィルター条件の一部としてナビゲーション プロパティを指定する場合は、必要な形式で指定する必要があります。
たとえば、次の句は、プロジェクトに対して定義されたイテレーション 1 に基づいて作業項目をフィルター処理するように指定します。
/WorkItems?$filter=Iteration/IterationPath eq 'Project Name\Iteration 1'
この例では、ナビゲーション プロパティ名を指定し、 Iteration
IterationPath
イテレーションの完全なパスに対応します。 別のエンティティをフィルターとして使用するには、ナビゲーション プロパティの後にスラッシュの後にフィルターを適用するフィールドの名前を付けます。
完全な OData クエリを次に示します。
https://analytics.dev.azure.com/{OrganizationName}/{ProjectName}/_odata/{version}/WorkItems?$filter=Iteration/IterationPath eq 'Project Name\Iteration 1'
Fabrikam Fiber\Service Delivery\Voice Area Path の上位 5 つの作業項目を要求する別の例を次に示します。
https://analytics.dev.azure.com/fabrikam/Fabrikam%20Fiber/_odata/v4.0-preview/WorkItems?$top=5&$filter=Area/AreaPath eq 'Fabrikam Fiber\Service Delivery\Voice'&$select=WorkItemId, WorkItemType, Title, State&$orderby=WorkItemId asc
@odata.context "https://analytics.dev.azure.com/fabrikam/Fabrikam%20Fiber/_odata/v4.0-preview/$metadata#WorkItems(WorkItemId,WorkItemType,Title,State)"
value
0
WorkItemId 361
Title "Hello World Web Site"
WorkItemType "Product Backlog Item"
State "Removed"
1
WorkItemId 362
Title "Resume"
WorkItemType "Product Backlog Item"
State "New"
2
WorkItemId 363
Title "Welcome back page"
WorkItemType "Product Backlog Item"
State "Done"
3
WorkItemId 365
Title "Pause"
WorkItemType "Feature"
State "New"
4
WorkItemId 374
Title "Fix performance issues"
WorkItemType "Task"
State "To Do"
ヒント
ステートメントで $select
ナビゲーション プロパティを直接使用することはできません。 代わりに、次を使用 $expand
する必要があります。
イテレーション パスの前のフィルター処理の例では、関連するエンティティに含まれているため、イテレーション パスは返されません。 関連エンティティのデータを返すには、ステートメントを $expand
追加します。
/WorkItems?$select=WorkItemId,WorkItemType,Title,State&$filter=WorkItemId eq 10000&$expand=Iteration
作業項目 ID 480 に割り当てられた情報を返す例を 次に示します。
https://analytics.dev.azure.com/fabrikam/Fabrikam%20Fiber/_odata/v4.0-preview/WorkItems?$filter=WorkItemId eq 480&$select=WorkItemId,WorkItemType,Title,State&&$expand=Iteration
@odata.context "https://analytics.dev.azure.com/fabrikam/Fabrikam%20Fiber/_odata/v4.0-preview/$metadata#WorkItems(WorkItemId,WorkItemType,Title,State,Iteration)"
value
0
WorkItemId 480
Title "Customer Phone - Phase 1"
WorkItemType "Feature"
State "In Progress"
Iteration
ProjectSK "56af920d-393b-4236-9a07-24439ccaa85c"
IterationSK "c7063041-ff3a-4d7f-bb46-c433c7030d59"
IterationId "c7063041-ff3a-4d7f-bb46-c433c7030d59"
IterationName "Sprint 1"
Number 55297
IterationPath "Fabrikam Fiber\\Release 1\\Sprint 1"
StartDate "2022-01-17T00:00:00-08:00"
EndDate "2022-02-04T23:59:59.999-08:00"
IterationLevel1 "Fabrikam Fiber"
IterationLevel2 "Release 1"
IterationLevel3 "Sprint 1"
IterationLevel4 null
IterationLevel5 null
IterationLevel6 null
IterationLevel7 null
IterationLevel8 null
IterationLevel9 null
IterationLevel10 null
IterationLevel11 null
IterationLevel12 null
IterationLevel13 null
IterationLevel14 null
Depth 2
IsEnded true
AnalyticsUpdatedDate "2022-01-18T22:18:58.17Z"
ご覧のように、イテレーション パスは結果で展開され、すべてのイテレーション データが返されます。 おそらく、必要以上のデータです。
返されるデータを減らすには、イテレーションに $select
対してステートメントを追加します。
/WorkItems?$select=WorkItemId,WorkItemType,Title,State&$filter=WorkItemId eq 10000&$expand=Iteration($select=Name,IterationPath)
次に、次のデータを返します。
{
"@odata.context":"https://analytics.dev.azure.com/{OrganizationName}/{ProjectName}/_odata/{version}/$metadata#WorkItems(WorkItemId,WorkItemType,Title,State,Iteration,Iteration(Name,IterationPath))",
"value":[
{
"WorkItemId":10000,
"WorkItemType":"Task",
"Title":"Some title",
"State":"Completed",
"Iteration":{
"Name":"Sprint 55",
"IterationPath":"Fabrikam\\Sprints\\Sprint 55"
}
}
]
}
日付範囲のクエリを実行する
次の使用例は、変更日が 2021 年 1 月 1 日より大きい作業項目を返します。
https://analytics.dev.azure.com/{OrganizationName}/{ProjectName}/_odata/{version}/WorkItems?$select=WorkItemId,WorkItemType,Title,State&$filter=ChangedDate ge 2021-01-01Z
次の例では、変更日が 2021 年 4 月 26 日 から 4 月 30 日の週に発生する作業項目を返します。
https://analytics.dev.azure.com{OrganizationName}/{ProjectName}/_odata/{version}/WorkItems?$select=WorkItemId,WorkItemType,Title,State&$filter=ChangedDate ge 2021-04-26Z&ChangedDate le 2021-04-30Z
expand ステートメントを入れ子にする
OData では、ステートメントを入れ子 $expand
にすることができます。 たとえば、前のクエリ ステートメントを記述して、イテレーションの一部であるプロジェクトを表示できます。
/WorkItems?$filter=WorkItemId eq 10000&$expand=Iteration($expand=Project)
次の JSON が返されます。
{
"@odata.context":"https://analytics.dev.azure.com/{OrganizationName}/{ProjectName}/_odata/{version}/$metadata#WorkItems",
"value":[
{
"WorkItemId":10000,
"Revision":3,
"Watermark":283397,
"Title":"Production deployment and testing for Entitlement API v2 and Subscriber database",
"WorkItemType":"Task",
"ChangedDate":"2014-07-10T19:29:58.41Z",
"CreatedDate":"2014-04-19T22:44:58.31Z",
"State":"Completed",
"Reason":"Completed",
"Priority":2,
"CompletedWork":10.0,
"OriginalEstimate":20.0,
"Count":1,
"Iteration":{
"IterationId":"7a2c246e-fc62-41af-ad18-62332017bc46",
"Name":"Sprint 55",
"Number":13021,
"IterationPath":"Fabrikam\\Sprints\\Sprint 55",
"StartDate":"2013-09-23T00:00:00Z",
"EndDate":"2013-10-11T00:00:00Z",
"IterationLevel1":"Fabrikam",
"IterationLevel2":" Sprints",
"IterationLevel3":"Sprint 55",
"Level":2,
"IsDeleted":false,
"Project":{
"ProjectId":"b924d696-3eae-4116-8443-9a18392d8544",
"ProjectName":"Fabrikam",
"IsDeleted":false
}
}
}
]
}
また、ステートメントと$select
組み合わせ$expand
ることもできます。 たとえば、前のクエリを変更して、イテレーション名とイテレーション パスのみを返すことができます。
/WorkItems?$filter=WorkItemId eq 10000&$expand=Iteration($select=IterationId,IterationPath;$expand=Project)
次の JSON が返されます。
{
"@odata.context":"https://analytics.dev.azure.com/{OrganizationName}/{ProjectName}/_odata/{version}/$metadata#WorkItems(Iteration(IterationId,IterationPath,Project))",
"value":[
{
"WorkItemId":10000,
"Revision":3,
"Watermark":283397,
"Title":"Production deployment and testing for Entitlement API v2 and Subscriber database","WorkItemType":"Task",
"ChangedDate":"2014-07-10T19:29:58.41Z",
"CreatedDate":"2014-04-19T22:44:58.31Z",
"State":"Completed",
"Reason":"Completed",
"Priority":2,
"CompletedWork":10.0,
"OriginalEstimate":20.0,
"Count":1,
"Iteration":{
"IterationId":"7a2c246e-fc62-41af-ad18-62332017bc46","IterationPath":"Fabrikam\\Sprints\\Sprint 55",
"Project":{
"ProjectId":"b924d696-3eae-4116-8443-9a18392d8544",
"ProjectName":"Fabrikam",
"IsDeleted":false
}
}
}
]
}
ここでの結果には IterationId と IterationPath のみが表示され、Project は JSON 結果内の入れ子になったオブジェクトであることに注意してください。 注意すべきもう 1 つの重要な項目は、URL 自体です。 ステートメントと句を$select
使用する$expand
場合は、セミコロン (;).$expand
それ以外の場合はエラーになります。
結果の並べ替え、 orderby
オプション
結果を $orderby
並べ替えるオプションを指定するか、結果が返される順序を指定します。 キーワード asc
を desc
使用して昇順または降順で並べ替えることができます。 例をいくつか示します
並べ替え順 | 含める句 |
---|---|
作業アイテム ID | /WorkItems?$orderby=WorkItemId |
作業項目 ID の降順 | /WorkItems?$orderby=WorkItemId desc |
作業項目の種類と状態 | /WorkItems?$orderby=WorkItemType,State |