OData Analytics를 사용하여 기본 쿼리 정의

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

Azure DevOps용 Analytics를 사용하여 기본 쿼리와 필터링된 쿼리를 생성하여 관심 있는 데이터를 반환할 수 있습니다. 이러한 쿼리는 브라우저 또는 Power BI 내에서 직접 실행할 수 있습니다.

이 문서에서는 Azure Boards Analytics에 대한 분석메타데이터 참조에 대한 OData 생성 쿼리에 제공된 정보를 작성합니다. 또한 이 문서의 쿼리는 작업 추적 엔터티 집합을 검색하는 데 중점을 두고 있지만 원칙은 다른 엔터티 집합 쿼리에 적용됩니다.

이 문서에서는 다음 데이터를 반환하는 쿼리를 정의하는 방법을 알아봅니다.

  • 항목 수(다른 데이터 없음)
  • 항목 및 데이터 수
  • 영역 또는 반복 경로에 대해 정의된 속성
  • 선택한 열 또는 필드
  • 필터링된 데이터
  • ID, 영역 경로 및 반복 경로 필드에 대한 데이터 반환
  • 탐색 속성으로 필터링
  • 날짜 범위 쿼리
  • Nest expand 문
  • 정렬 결과, orderby 옵션

참고 항목

Analytics 서비스는 모든 Azure DevOps Services에 대해 프로덕션에서 자동으로 사용하도록 설정되고 지원됩니다. Analytics Service의 OData 피드에 대한 Power BI 통합 및 액세스는 일반적으로 사용할 수 있습니다. 이를 사용하고 피드백을 제공하는 것이 좋습니다. 사용 가능한 데이터는 버전에 따라 다릅니다. 지원되는 최신 버전은 v2.0최신 미리 보기 버전입니다 v4.0-preview. 자세한 내용은 OData API 버전 관리를 참조 하세요.

참고 항목

Analytics 서비스는 Azure DevOps Server 2020 이상 버전의 모든 새 프로젝트 컬렉션에 대해 프로덕션에 자동으로 설치되고 지원됩니다. Analytics Service의 OData 피드에 대한 Power BI 통합 및 액세스는 일반적으로 사용할 수 있습니다. 이를 사용하고 피드백을 제공하는 것이 좋습니다. Azure DevOps Server 2019에서 업그레이드한 경우 업그레이드 중에 Analytics 서비스를 설치할 수 있습니다.

사용 가능한 데이터는 버전에 따라 다릅니다. 지원되는 최신 버전은 v2.0최신 미리 보기 버전입니다 v4.0-preview. 자세한 내용은 OData API 버전 관리를 참조 하세요.

참고 항목

Analytics 서비스는 Azure DevOps Server 2019용 미리 보기로 제공됩니다. 프로젝트 컬렉션에 사용하도록 설정하거나 설치할 수 있습니다. Power BI 통합 및 Analytics Service의 OData 피드에 대한 액세스는 미리 보기로 제공됩니다. 이를 사용하고 피드백을 제공하는 것이 좋습니다.

사용 가능한 데이터는 버전에 따라 다릅니다. 지원되는 최신 버전은 v2.0최신 미리 보기 버전입니다 v4.0-preview. 자세한 내용은 OData API 버전 관리를 참조 하세요.

필수 조건

  • 분석 데이터를 보고 서비스를 쿼리하려면 기본 액세스 이상의 프로젝트 멤버여야 합니다. 기본적으로 모든 프로젝트 멤버에는 분석을 쿼리하고 분석 뷰를 정의할 수 있는 권한이 부여됩니다.
  • 서비스 및 기능 사용 및 일반 데이터 추적 활동과 관련된 다른 필수 구성 요소에 대해 알아보려면 분석에 액세스하기 위한 사용 권한 및 필수 구성 요소를 참조 하세요.

참고 항목

이 문서에서는 Azure DevOps Services에 대해 OData 쿼리 URL을 정의합니다. 온-프레미스 서버에 대해 유사한 쿼리를 생성하려면 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에 대한 사용자 메타데이터 참조를 참조하세요.

반환할 속성을 지정하지 않으면 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

영역 또는 반복 속성

영역 경로 또는 반복 경로또는 IterationSK기타 속성을 조회 AreaSK 하려면 다음 쿼리를 사용합니다.

특정 영역 경로에 대한 AreaSK 반환

다음 쿼리는 Fabrikam Fiber\Service Delivery\InternetArea Path에 대해 정의된 속성을 반환 AreaSK 하도록 지정합니다. 엔터티 집합에 대해 Areas 정의된 다른 속성을 지정하려면 Azure Boards Analytics, Areas에 대한 메타데이터 참조를 참조 하세요.

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, 작업 항목 유형, 제목작업 상태 항목을 반환하려면 쿼리에 다음 절을 추가합니다. 이 절은 명명된 필드에 해당하는 속성을 지정합니다.

참고 항목

속성 이름에는 공백이 없습니다. 공백을 추가하면 쿼리가 실패합니다. OData 쿼리는 간격과 대/소문자 모두에 주의해야 합니다. 사용자 지정 필드 속성의 레이블을 지정하는 방법을 이해하려면 Azure Boards, 사용자 지정 속성에 대한 메타데이터 참조를 참조하세요.

여기서는 상위 3개의 작업 항목을 반환하도록 지정합니다.

https://analytics.dev.azure.com/fabrikam/Fabrikam Fiber/_odata/v4.0-preview/WorkItems?$select=WorkItemId,WorkItemType,Title,State&$top=3

Analytics는 다음 데이터를 반환합니다.

@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

Analytics는 다음 데이터를 반환합니다.

  
@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"

여러 필터 절 지정

여러 필터 절을 사용하고 ANDOR 지정할 수 있습니다.

예를 들어 다음 쿼리는 새로 만들기, 커밋됨 또는 활성 상태에 있는 사용자 스토리, 버그백로그 작업 유형(사용자 지정 작업 항목 형식)의 작업 항목을 반환하도록 지정합니다. 필요에 따라 괄호를 사용하여 필터 절을 그룹화합니다.

또한 , 등과 같은 containsstartswithendswith 다양한 함수를 적용할 수 있습니다. 지원되는 OData 기능 및 절, 지원되는 함수를 참조하세요.

ID, 영역 경로 및 반복 경로 필드에 대한 데이터 반환

선택 속성은 탐색 속성과 연결되며 문을 사용하여 $select 직접 액세스할 수 없습니다. 관심 있는 $expand 데이터를 반환하려면 문을 사용해야 합니다. 이러한 속성은 종종 자체의 여러 속성과 연결됩니다. 예를 들어 ID 필드를 사용하여 사용자 이름 또는 사용자 전자 메일을 반환하도록 지정할 수 있습니다.

다음 표에서는 이러한 속성 중 몇 가지를 확장하는 방법에 대한 예제를 제공합니다.

형식 필드 참조된 속성 포함할 예제 절
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)
프로젝트 ProjectSK $expand=Project($select=ProjectName)
TeamSK $expand=Teams($select=TeamName)

확장해야 하는 여러 속성을 지정하려면 쉼표로 구분된 목록 내의 단일 expand 절에 지정합니다.

$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 파이버\서비스 배달\음성 영역 경로 아래의 상위 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

Nest 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
        }
      }
    }
  ]
}

또한 결합 $expand$select 문을 사용할 수 있습니다. 예를 들어 반복 이름 및 반복 경로만 반환하도록 이전 쿼리를 변경할 수 있습니다.

/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 결과 내의 중첩된 개체입니다. 주의해야 할 또 다른 주요 항목은 URL 자체입니다. 문 및 절을 $select$expand 사용하는 경우 앞에 세미콜론(;) $expand을 사용해야 합니다. 다른 항목이 있으면 오류가 발생합니다.

결과 정렬, orderby 옵션

$orderby 결과를 정렬하거나 결과가 반환되는 시퀀스를 지정하는 옵션을 지정합니다. 각각 키워드(keyword) asc 사용하여 desc오름차순 또는 내림차순으로 정렬할 수 있습니다. 몇 가지 예가 표시됩니다.

정렬 기준 포함할 절
작업 항목 ID /WorkItems?$orderby=WorkItemId
작업 항목 ID 내림차순 /WorkItems?$orderby=WorkItemId desc
작업 항목 유형 및 상태 /WorkItems?$orderby=WorkItemType,State

다음 단계