Агрегируйте данные отслеживания работы, используя аналитику.

Сервисы Azure DevOps | Azure DevOps Server | Azure DevOps Server 2022

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

Подсказка

Вы можете использовать ИИ, чтобы помочь с этой задачей далее в этой статье или см. включение ИИ-помощи с помощью Azure DevOps MCP Server, чтобы приступить к работе.

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

Примечание.

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

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

Примечание.

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

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

Необходимые условия

Категория Требования
Уровни доступа - член проекта.
Минимум базовый доступ.
разрешения По умолчанию члены проекта имеют разрешение выполнять запросы к аналитике и создавать представления. Дополнительные сведения о других предварительных требованиях для включения служб и функций и общих действий отслеживания данных см. в разделе Разрешения и предварительные требования для доступа к аналитике.

Об расширении агрегирования $apply

OData предоставляет расширение агрегирования, которое вводит ключевое слово $apply для группировки, фильтрации и вычисления агрегатных значений по данным, связанным с отслеживанием работы. В следующих разделах показано, как использовать $apply с aggregate, groupbyи filtercompute. Полные спецификации см. в разделе "Расширение OData для агрегирования данных".

Агрегируйте данные с помощью $apply

Добавьте токен $apply в URL-адрес запроса, чтобы активировать агрегации. Базовый синтаксис:

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

Параметр Описание
{entitySetName} Сущность, заданная для запроса, например WorkItems.
{columnToAggregate} Поле для агрегирования, например RemainingWork.
{aggregationType} Функция агрегирования: sum, , minmax, averageили countdistinct.
{newColumnName} Псевдоним для агрегированного столбца результатов.

В следующих примерах показаны распространенные aggregate операции.

Вычислите сумму всех оставшихся работ

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

Предложение groupby работает как SQL GROUP BY — оно разбивает агрегированные результаты по одному или нескольким свойствам.

Подсчет рабочих элементов по типу

https://analytics.dev.azure.com/{OrganizationName}/_odata/{version}/WorkItems?
  $apply=groupby((WorkItemType), aggregate($count as Count))

Возвращает результат, например:

{
  "value": [
    { "WorkItemType": "Bug", "Count": 3 },
    { "WorkItemType": "Product Backlog Item", "Count": 13 }
  ]
}

Группировать по нескольким свойствам

Добавьте дополнительные свойства внутри groupby круглых скобок, чтобы создать более подробные разбивки:

https://analytics.dev.azure.com/{OrganizationName}/_odata/{version}/WorkItems?
  $apply=groupby((WorkItemType, State), aggregate($count as Count))

Возвращает одну строку для каждого уникального сочетания типа и состояния (например, Ошибка/Активный, Ошибка/Обязательство, Невыполненные элементы продукта/Активный).

Группировка по сущностям

Вы можете группировать связанные объекты по свойствам навигации. Например, для подсчета областей для каждого проекта:

https://analytics.dev.azure.com/{OrganizationName}/_odata/{version}/Areas?
  $apply=groupby((Project/ProjectName), aggregate($count as Count))

Фильтрация результатов статистической обработки

Используйте filter() внутри $apply для узких данных до или после агрегирования. Соедините несколько фильтров, используя / (pipe), и разместите наиболее избирательный фильтр первым для оптимальной производительности.

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 только для возврата одного значения.

Агрегировать несколько полей в одном вызове

Перечислите несколько полей в одном aggregate блоке, разделяя их запятыми, чтобы избежать дополнительных обращений.

/WorkItems?$apply=aggregate(CompletedWork with sum as SumOfCompletedWork, RemainingWork with sum as SumOfRemainingWork)

Возвращает:

{
  "value": [
    { "SumOfCompletedWork": 1525841.29, "SumOfRemainingWork": 73842.39 }
  ]
}

Вычисление вычисленных свойств

Передайте агрегированные результаты в compute(), чтобы получить новые значения, используя арифметические выражения (div, add, sub, mul). В следующем примере вычисляется процент завершенной работы:

/WorkItems?$apply=aggregate(CompletedWork with sum as SumOfCompletedWork, RemainingWork with sum as SumOfRemainingWork)/compute(SumOfCompletedWork div (SumOfCompletedWork add SumOfRemainingWork) as DonePercentage)

Возвращает:

{
  "value": [
    { "DonePercentage": 0.9676, "SumOfCompletedWork": 1514698.34, "SumOfRemainingWork": 50715.95 }
  ]
}

Создание запроса на накопительную схему потоков

Следующий запрос объединяет filtergroupbyи aggregate против WorkItemBoardSnapshot набора сущностей для создания данных для накопительной схемы потоков в Power BI или Excel.

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

Этот запрос применяет фильтрацию к диапазону дат, к определенной доске и команде, группирует данные по дате и по столбцу доски и возвращает количество для каждой группы. Возвращает:

{
  "value": [
    { "DateValue": "2015-07-16T00:00:00-07:00", "ColumnName": "Completed", "Count": 324 },
    { "DateValue": "2015-07-16T00:00:00-07:00", "ColumnName": "In Progress", "Count": 5 }
  ]
}

Подсказка

Чем меньше строк возвращается, тем быстрее обновляется Power BI или Excel. Используйте строго ограниченные диапазоны дат и конкретные фильтры доски и команды, чтобы свести к минимуму результирующий набор.

Использование ИИ для агрегирования данных отслеживания работы

Если вы настроите сервер MCP Azure DevOps, вы сможете обратиться к вашему помощнику ИИ с просьбой получить данные рабочих элементов в режиме реального времени из вашей организации Azure DevOps и помочь вам составить или устранить неполадки с запросами агрегации OData Analytics на основе этих данных.

задачи Пример запроса
Подсчет по штатам In <OrganizationName>, draft an Analytics OData $apply query that counts work items grouped by State in <ProjectName>. Use placeholders for <ODataVersion> and any filters I need.
Подсчет по типу и состоянию Create an Analytics OData $apply query for <OrganizationName> that groups WorkItems by WorkItemType and State and returns a count for each group in <ProjectName>.
Фильтрация, а затем статистическая обработка Write an Analytics OData query that filters WorkItems to bugs with Priority = 1 in <ProjectName>, then groups by Area/AreaPath and State and returns counts.
Сумма оставшихся и завершенных работ Generate an Analytics OData $apply query that filters to Iteration/IterationPath startswith '<IterationPath>' in <ProjectName>, then returns SumOfCompletedWork and SumOfRemainingWork.
Агрегация данных между командами Help me create an Analytics OData $apply query for WorkItemBoardSnapshot that filters to BoardName '<BoardName>' and Team/TeamName '<TeamName>' in <ProjectName>, then groups by DateValue and ColumnName and returns Count.
Объяснить каждое предложение Explain what each part of this $apply query does and how to adjust it for a different iteration: <ODataQueryOrUrl>.
Отладка ошибок $apply This Analytics OData query returns a 400 error. Diagnose the $apply syntax and suggest a corrected query: <ODataQueryOrUrl>.
Проверка результатов Given this Analytics OData query for <OrganizationName>/<ProjectName>: <ODataQueryOrUrl>, tell me what columns and shape of JSON to expect back, and what common mistakes to check if results look wrong.

Подсказка

Если вы используете Visual Studio Code, режим агента особенно полезен для итерации запросов агрегирования— уточнения фильтров, устранения неполадок $apply синтаксиса и проверки результатов.

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