Поделиться через


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

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

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