Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022
Azure DevOps용 Analytics에 대해 OData(Open Data Protocol) 쿼리를 실행하는 경우 작업 항목에 대한 정보를 검색할 수 있습니다. 연결된 작업 항목을 쿼리할 수도 있습니다. 회사 항목은 부모 또는 자식 관계와 같이 계층적으로 연결할 수 있습니다. 작업 항목이 관련되거나 중복되는 경우와 같이 작업 항목을 비히어적으로 연결할 수도 있습니다.
연결된 작업 항목을 쿼리하는 방법은 탐색 속성을 사용하여 엔터티 집합의 쿼리를 필터링하는 방법과 유사합니다. 그러나 링크는 엔터티이므로 몇 가지 복잡성이 있습니다. 연결된 작업 항목을 쿼리하는 방법에는 두 가지가 있습니다.
-
Parent또는Children탐색 속성을 사용하여 -
Links탐색 속성을 사용하여
이 자습서에서 수행하는 작업은 다음과 같습니다.
- 계층적으로 연결된 작업 항목을 반환하는 쿼리를 생성합니다.
- 비히어적으로 연결된 작업 항목을 반환하는 쿼리를 생성합니다.
메모
Analytics 서비스는 Azure DevOps Services 내의 모든 서비스에 대해 프로덕션에서 자동으로 사용하도록 설정되고 지원됩니다. Analytics 서비스의 OData 피드에 대한 Power BI 통합 및 액세스는 일반적으로 사용할 수 있습니다. Analytics OData 피드를 사용하고 피드백을 제공하는 것이 좋습니다.
사용 가능한 데이터는 버전에 따라 다릅니다. 지원되는 최신 버전의 OData API는 v2.0최신 미리 보기 버전입니다 v4.0-preview. 자세한 내용은 OData API 버전 관리참조하세요.
메모
Analytics 서비스는 Azure DevOps Server 2020 이상 버전의 모든 새 프로젝트 컬렉션에 대해 프로덕션에 자동으로 설치되고 지원됩니다. Analytics 서비스의 OData 피드에 대한 Power BI 통합 및 액세스는 일반적으로 사용할 수 있습니다. Analytics OData 피드를 사용하고 피드백을 제공하는 것이 좋습니다. Azure DevOps Server 2019에서 업그레이드하는 경우 업그레이드 중에 Analytics 서비스를 설치할 수 있습니다.
사용 가능한 데이터는 버전에 따라 다릅니다. 지원되는 최신 버전의 OData API는 v2.0최신 미리 보기 버전입니다 v4.0-preview. 자세한 내용은 OData API 버전 관리참조하세요.
필수 구성 요소
| 범주 | 요구 사항 |
|---|---|
| 액세스 수준 |
-
프로젝트 멤버. - 적어도 기본 액세스. |
| 사용 권한 | 기본적으로 프로젝트 멤버는 분석을 쿼리하고 뷰를 만들 수 있는 권한이 있습니다. 서비스 및 기능 사용 및 일반 데이터 추적 활동과 관련된 다른 필수 구성 요소에 대한 자세한 내용은 사용 권한 및 분석액세스하기 위한 필수 구성 요소를 참조하세요. |
메모
이 문서의 예제에서는 다음 형식으로 Azure DevOps Services URL을 사용합니다.
https://analytics.dev.azure.com/{organization-name}/{project-name}/_odata/{version}
Azure DevOps Server의 경우 온-프레미스 서버를 포함하는 다음 형식을 대신 사용합니다.
https://{server-name}:{port}/tfs/{organization-name}/{project-name}/_odata/{version}
부모 또는 자식 작업 항목 쿼리
$expand 및 Parent 탐색 속성에서 Children 옵션을 사용하여 부모-자식 링크를 통해 관련된 항목을 쿼리할 수 있습니다.
예: 항목의 자식 요청
항목의 자식에 대한 정보를 반환하려면 $expand 탐색 속성에서 Children을 사용하십시오. 다음 OData 코드는 fabrikam 조직의 Fabrikam 파이버 프로젝트를 쿼리합니다. ID가 359인 작업 항목의 자식을 반환합니다.
요청
https://analytics.dev.azure.com/fabrikam/Fabrikam%20Fiber/_odata/v4.0-preview/WorkItems?$filter=WorkItemId eq 359&$select=WorkItemId, Title, WorkItemType, State&$expand=Children($select=WorkItemId,Title, WorkItemType, State)
응답에는 ID 479 및 480을 사용하는 기능 작업 항목에 대한 정보가 나열됩니다. 이러한 기능은 ID가 359인 에픽 작업 항목의 하위 요소입니다.
메모
작업 항목 링크 정보를 요청하는 대부분의 OData 쿼리는 결과를 반환하지만 경고도 반환합니다. 경고는 OData Analytics 쿼리 지침에 설명된 권장 쿼리 지침을 따르도록 미리 알림입니다. 그러나 이 문서의 쿼리 예제는 유효합니다.
응답
{
"@odata.context": "https://analytics.dev.azure.com/fabrikam/Fabrikam%20Fiber/_odata/v4.0-preview/$metadata#WorkItems(WorkItemId,Title,WorkItemType,State,Children(WorkItemId,Title,WorkItemType,State))",
"vsts.warnings@odata.type": "#Collection(String)",
"@vsts.warnings": [
"VS403508: Using the Parent, Children, Descendants or Revision properties in a filter or expand is not recommended. Details on recommended query patterns are available here: https://go.microsoft.com/fwlink/?linkid=861060."
],
"value": [{
"WorkItemId": 359,
"Title": "Phase 1 - Customer access and engagement 5",
"WorkItemType": "Epic",
"State": "In Progress",
"Children": [{
"WorkItemId": 480,
"Title": "Customer Phone - Phase 1",
"WorkItemType": "Feature",
"State": "In Progress"
},
{
"WorkItemId": 479,
"Title": "Customer Web - Phase 1",
"WorkItemType": "Feature",
"State": "In Progress"
}]
}]
}
예: 항목의 상위 항목 요청
옵션에서 Children을 Parent로 대체하여 $expand 항목의 계보를 검색할 수 있습니다.
다음 코드는 Fabrikam 파이버 프로젝트 및 fabrikam 조직의 ID가 1048인 작업 항목의 부모를 쿼리합니다.
요청
https://analytics.dev.azure.com/fabrikam/Fabrikam%20Fiber/_odata/v4.0-preview/WorkItems?$select=WorkItemId,Title,WorkItemType,State&$expand=Parent($select=WorkItemId,Title,WorkItemType, State)&$filter=WorkItemId eq 1048
응답은 ID가 1048인 제품 백로그 항목의 부모인 ID가 480인 기능에 대한 정보를 나열합니다.
응답
{
"@odata.context": "https://analytics.dev.azure.com/fabrikam/Fabrikam%20Fiber/_odata/v4.0-preview/$metadata#WorkItems(WorkItemId,Title,WorkItemType,State,Parent(WorkItemId,Title,WorkItemType,State))",
"vsts.warnings@odata.type": "#Collection(String)",
"@vsts.warnings": [
"VS403508: Using the Parent, Children, Descendants or Revision properties in a filter or expand is not recommended. Details on recommended query patterns are available here: https://go.microsoft.com/fwlink/?linkid=861060."
],
"value": [{
"WorkItemId": 1048,
"Title": "Support reset",
"WorkItemType": "Product Backlog Item",
"State": "New",
"Parent": {
"WorkItemId": 480,
"Title": "Customer Phone - Phase 1",
"WorkItemType": "Feature",
"State": "In Progress"
}
}]
}
비히어적 링크 쿼리
부모-자식 링크 외에도 Related 또는 Duplicate와 같은 다른 유형의 링크로 작업 항목을 연결할 수 있습니다. 탐색 속성을 사용하여 Links 비히어적 관계를 통해 연결된 작업 항목에 대한 정보를 요청할 수 있습니다.
예: 항목의 링크 요청
항목과 연결된 링크를 검색하려면 탐색 속성의 $expandLinks 옵션을 사용합니다. 다음 쿼리는 작업 항목 363과 연결된 모든 링크에 대한 SourceWorkItemId, TargetWorkItemId, 및 LinkTypeName 값을 검색합니다.
요청
https://analytics.dev.azure.com/fabrikam/Fabrikam%20Fiber/_odata/v4.0-preview/WorkItems?$select=WorkItemId,Title,WorkItemType,State&$filter=WorkItemId%20eq%20363&$expand=Links($select=SourceWorkItemId,TargetWorkItemId,LinkTypeName)
응답
{
"@odata.context": "https://analytics.dev.azure.com/fabrikam/Fabrikam%20Fiber/_odata/v4.0-preview/$metadata#WorkItems(WorkItemId,Title,WorkItemType,State,Links(SourceWorkItemId,TargetWorkItemId,LinkTypeName))",
"value": [{
"WorkItemId": 363,
"Title": "Welcome back page",
"WorkItemType": "Product Backlog Item",
"State": "Done",
"Links": [{
"SourceWorkItemId": 363,
"TargetWorkItemId": 400,
"LinkTypeName": "Related"
},
{
"SourceWorkItemId": 363,
"TargetWorkItemId": 470,
"LinkTypeName": "Tested By"
},
{
"SourceWorkItemId": 363,
"TargetWorkItemId": 501,
"LinkTypeName": "Related"
},
{
"SourceWorkItemId": 363,
"TargetWorkItemId": 1079,
"LinkTypeName": "Tested By"
}]
}]
}
예: 연결된 항목에 대한 자세한 정보 요청
$expand 또는 TargetWorkItem 탐색 속성에 대한 옵션을 사용하여 연결된 작업 항목에 대한 자세한 정보를 쿼리할 수 있습니다.
이전 쿼리와 마찬가지로 다음 쿼리는 SourceWorkItemIdTargetWorkItemId작업 항목과 연결된 모든 링크의 값 및 LinkTypeName 값을 검색합니다. 그러나 이 쿼리는 WorkItemIdTitleState 각 링크의 대상 작업 항목 및 값을 검색합니다.
요청
https://analytics.dev.azure.com/fabrikam/Fabrikam%20Fiber/_odata/v4.0-preview/WorkItems?$select=WorkItemId,Title,WorkItemType,State&$filter=WorkItemId%20eq%20103&$expand=Links($select=SourceWorkItemId,TargetWorkItemId,LinkTypeName;$expand=TargetWorkItem($select=WorkItemId,Title,State))
응답
{
"@odata.context": "https://analytics.dev.azure.com/fabrikam/Fabrikam%20Fiber/_odata/v4.0-preview/$metadata#WorkItems(WorkItemId,Title,WorkItemType,State,Links(SourceWorkItemId,TargetWorkItemId,LinkTypeName,TargetWorkItem(WorkItemId,Title,State)))",
"value": [{
"WorkItemId": 103,
"Title": "Feature Y",
"WorkItemType": "Feature",
"State": "New",
"Links": [{
"SourceWorkItemId": 103,
"TargetWorkItemId": 48,
"LinkTypeName": "Child",
"TargetWorkItem": {
"WorkItemId": 48,
"Title": "Story 15",
"State": "Resolved"
}
}, {
"SourceWorkItemId": 103,
"TargetWorkItemId": 50,
"LinkTypeName": "Child",
"TargetWorkItem": {
"WorkItemId": 50,
"Title": "Story 17",
"State": "Active"
}
}, {
"SourceWorkItemId": 103,
"TargetWorkItemId": 55,
"LinkTypeName": "Child",
"TargetWorkItem": {
"WorkItemId": 55,
"Title": "Story 22",
"State": "New"
}
}, {
"SourceWorkItemId": 103,
"TargetWorkItemId": 112,
"LinkTypeName": "Related",
"TargetWorkItem": {
"WorkItemId": 112,
"Title": "Issue 10",
"State": "Active"
}
}]
}]
}
예: 특정 형식의 링크 요청
항목 간의 특정 유형의 링크에 관심이 있는 경우 절에서 LinkTypeName$filter 속성을 사용할 수 있습니다. 다음 쿼리는 모든 Related 링크를 확장하고 작업 항목 103에 대한 다른 모든 링크 유형을 필터링합니다.
요청
https://analytics.dev.azure.com/fabrikam/Fabrikam%20Fiber/_odata/v4.0-preview/WorkItems?$select=WorkItemId,Title,WorkItemType,State&$filter=WorkItemId eq 103&$expand=Links($select=SourceWorkItemId,TargetWorkItemId,LinkTypeName;$filter=LinkTypeName eq 'Related';$expand=TargetWorkItem($select=WorkItemId,Title,State))
응답
{
"@odata.context": "https://analytics.dev.azure.com/fabrikam/Fabrikam%20Fiber/_odata/v4.0-preview/$metadata#WorkItems(WorkItemId,Title,WorkItemType,State,Links(SourceWorkItemId,TargetWorkItemId,LinkTypeName,TargetWorkItem(WorkItemId,Title,State)))",
"value": [{
"WorkItemId": 103,
"Title": "Feature Y",
"WorkItemType": "Feature",
"State": "New",
"Links": [{
"SourceWorkItemId": 103,
"TargetWorkItemId": 112,
"LinkTypeName": "Related",
"TargetWorkItem": {
"WorkItemId": 112,
"Title": "Issue 10",
"State": "Active"
}
}]
}]
}