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

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 . Это предложение можно использовать для быстрого разбиения чисел более подробно.

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

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 меньше необходимых строк, чем быстрее происходит обновление.

Следующие шаги