Статистическая обработка данных отслеживания работы с помощью аналитики

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

Вы можете получить сумму данных отслеживания работы одним из двух способов с помощью аналитики с OData. Первый метод возвращает простое количество рабочих элементов на основе запроса OData. Второй метод возвращает результат в формате JSON на основе запроса OData, который выполняет расширение агрегирования OData.

В этой статье приведены сведения, приведенные в разделах Создание запросов OData для аналитики и Определение базовых запросов с помощью OData Analytics. Кроме того, запросы в этой статье посвящены получению данных рабочих элементов, однако принципы применяются для запросов к другим наборам сущностей.

В этой статье рассматриваются следующие темы:

  • Сведения о расширении агрегирования OData
  • Использование расширения агрегирования для OData
  • Группирование и фильтрация агрегированных результатов
  • Как агрегировать данные для создания схемы совокупного потока

Сведения о том, как создавать простые счетчики, см. в разделах Возврат количества элементов (без других данных) и Возврат количества элементов и данных.

Примечание

Служба аналитики автоматически включается и поддерживается в рабочей среде для всех Azure DevOps Services. Интеграция Power BI и доступ к веб-каналу OData службы аналитики являются общедоступными. Мы рекомендуем вам использовать его и оставить отзыв. Доступные данные зависят от версии. Последняя поддерживаемая версия — v2.0, а последняя предварительная версия — v4.0-preview. Дополнительные сведения см. в разделе Управление версиями API OData.

Примечание

Служба Аналитика автоматически устанавливается и поддерживается в рабочей среде для всех новых коллекций проектов для Azure DevOps Server 2020 и более поздних версий. Интеграция Power BI и доступ к веб-каналу OData службы аналитики являются общедоступными. Мы рекомендуем вам использовать его и оставить отзыв. Если вы обновили службу с Azure DevOps Server 2019 г., вы можете установить службу Аналитика во время обновления.

Доступные данные зависят от версии. Последняя поддерживаемая версия — v2.0, а последняя предварительная версия — v4.0-preview. Дополнительные сведения см. в разделе Управление версиями API OData.

Примечание

Служба "Аналитика" доступна в предварительной версии для Azure DevOps Server 2019 г. Его можно включить или установить для коллекции проектов. Интеграция Power BI и доступ к веб-каналу OData службы аналитики находятся на этапе предварительной версии. Мы рекомендуем вам использовать его и оставить отзыв.

Доступные данные зависят от версии. Последняя поддерживаемая версия — v2.0, а последняя предварительная версия — v4.0-preview. Дополнительные сведения см. в разделе Управление версиями API OData.

Что такое расширение агрегирования для OData?

Аналитика использует OData для создания запросов к данным отслеживания работы. Агрегаты в OData выполняются с помощью расширения, которое представляет $apply ключевое слово. Ниже приведены некоторые примеры использования этого ключевое слово. Дополнительные сведения о расширении см. в статье Расширение OData для агрегирования данных.

Агрегирование данных с помощью модуля агрегирования OData

Теперь, когда вы узнали, как выполнять простые подсчеты, давайте рассмотрим, как активировать агрегаты с помощью $apply маркера, где базовый формат в конце URL-адреса выглядит следующим образом:

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

Где:

  • {entitySetName} — это сущность, для которую необходимо запросить
  • {columnToAggregate} — это столбец агрегирования.
  • {aggregationType} укажет тип используемого агрегата.
  • {newColumnName} указывает имя столбца, имеющего значения после агрегирования.

Агрегированные данные с помощью расширения apply

$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 также поддерживает предложение, идентичное groupby предложению SQL GROUP BY . Это предложение можно использовать для быстрого более подробного разбиения чисел.

Например, следующее предложение thie возвращает количество рабочих элементов:

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 отличается от того, как вы обычно об этом думаете.

Например, предположим, что вы хотите узнать, сколько областей в каждом проекте в организации или коллекции. В 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, чем меньше строк требуется, тем быстрее происходит обновление.

Дальнейшие действия