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