Агрегированные данные отслеживания работы с помощью аналитики
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".
Необходимые условия
Категория | Требования |
---|---|
Уровни доступа |
-
член проекта. Минимум базовый доступ. |
разрешения | По умолчанию члены проекта имеют разрешение выполнять запросы к аналитике и создавать представления. Дополнительные сведения о других предварительных требованиях для включения служб и функций и общих действий отслеживания данных см. в разделе Разрешения и предварительные требования для доступа к аналитике. |
Что такое расширение агрегирования для 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 чем меньше строк требуется, тем быстрее происходит обновление.