분석을 사용하여 작업 추적 데이터 집계

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

OData와 함께 Analytics를 사용하는 두 가지 방법 중 하나로 작업 추적 데이터의 합계를 가져올 수 있습니다. 첫 번째 메서드는 OData 쿼리를 기반으로 하는 간단한 작업 항목 수를 반환합니다. 두 번째 메서드는 OData 집계 확장을 연습하는 OData 쿼리에 따라 JSON 형식의 결과를 반환합니다.

이 문서에서는 분석용 OData 쿼리 생성 및 OData Analytics사용하여 기본 쿼리 정의에 제공된 정보를 작성합니다. 또한 쿼리는 이 문서에서 작업 항목 데이터를 검색하는 데 중점을 두고 있지만 다른 엔터티 집합 쿼리에 원칙이 적용됩니다.

이 문서에서는 다음을 알아봅니다.

  • OData 집계 확장 정보
  • OData에 대한 집계 확장을 사용하는 방법
  • 집계된 결과를 그룹화하고 필터링하는 방법
  • 누적 흐름 다이어그램을 생성하기 위해 데이터를 집계하는 방법

단순 개수를 생성하는 방법을 알아보려면 항목 수 반환(다른 데이터 없음)항목 및 데이터 수 반환을 참조하세요.

참고

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

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

OData에 대한 집계 확장이란?

Analytics는 OData를 사용하여 작업 추적 데이터에 대한 쿼리를 작성합니다. OData의 집계는 키워드(keyword) 도입하는 확장을 사용하여 수행됩니다 $apply . 아래에 이 키워드(keyword) 사용하는 방법에 대한 몇 가지 예가 있습니다. 데이터 집계용 OData 확장에서 확장에 대해 자세히 알아봅니다.

OData 집계 확장을 사용하여 데이터 집계

간단한 개수를 수행하는 방법을 살펴보았으므로 URL 끝에 있는 기본 형식이 다음과 같은 토큰을 사용하여 $apply 집계를 트리거하는 방법을 검토해 보겠습니다.

/{entitySetName}?$apply=aggregate({columnToAggregate} with {aggregationType} as {newColumnName})

위치:

  • {entitySetName}은(는) 쿼리해야 하는 엔터티입니다.
  • {columnToAggregate}는 집계 열입니다.
  • {aggregationType}은 사용되는 집계 유형을 지정합니다.
  • {newColumnName}은 집계 후 값이 있는 열의 이름을 지정합니다.

적용 확장을 사용하여 집계된 데이터

$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. 이 절을 사용하여 숫자를 더 자세히 빠르게 세분화할 수 있습니다.

예를 들어 thie following 절은 작업 항목 수를 반환합니다.

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))

참고

절을 제공할 groupby 필요가 없습니다. 절을 aggregate 사용하여 단일 값을 반환할 수 있습니다.

단일 호출 내에서 여러 집계 생성

여러 정보를 제공할 수 있습니다. 예를 들어 완료된 작업의 합계와 나머지 작업의 합계가 있습니다. 이러한 경우 다음과 같이 별도의 호출 또는 단일 호출을 수행할 수 있습니다.

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

단일 호출 내에서 사용할 계산 속성 생성

수학적 식을 사용하여 결과 집합에 사용할 속성을 계산해야 할 수 있습니다. 완료된 작업의 합계와 완료된 작업의 백분율을 계산하기 위해 남은 작업의 합계로 나뉘는 것이 예입니다. 이러한 경우 다음 예제를 사용할 수 있습니다.

/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을 새로 고칠 때 필요한 행 수가 적을수록 새로 고침 속도가 빨라집니다.

다음 단계