Пример сводного отчета о ходе выполнения функций

Azure DevOps Services | Azure DevOps Server 2022 — Azure DevOps Server 2019

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

Снимок экрана: отчет о ходе выполнения функций с накоплением линейчатой диаграммы.

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

Примечание.

В этой статье предполагается, что вы читаете обзор примеров отчетов с помощью запросов OData и имеет базовое представление о Power BI.

Необходимые компоненты

Примеры запросов

Ход выполнения функции запрашивает WorkItems сущность, чтобы получить текущее состояние хода выполнения.

Примечание.

Сведения о доступных свойствах для фильтрации или отчета см . в справочнике по метаданным для Azure Boards. Вы можете отфильтровать запросы или возвращать свойства с помощью любого из Property значенийEntityType, доступных в разделе EntitySetили NavigationPropertyBinding Path значениях. Каждое EntitySet соответствует .EntityType Дополнительные сведения о типе данных каждого значения см. в метаданных, предоставленных для соответствующего EntityTypeзначения.

Просмотр хода выполнения функции на основе пути к области

Скопируйте и вставьте следующий запрос Power BI непосредственно в окно получения пустого запроса данных>. Дополнительные сведения см. в разделе "Обзор примеров отчетов с помощью запросов OData".

let
   Source = OData.Feed ("https://analytics.dev.azure.com/{organization}/{project}/_odata/v3.0-preview/WorkItems?"
        &"$filter=WorkItemType eq 'Feature' "
            &"and State ne 'Removed' "
            &"and startswith(Area/AreaPath,'{areapath}') "
            &"and Descendants/any()"
            &"&$select=WorkItemId,Title,Area,Iteration,AssignedTo,WorkItemType,State,AreaSK"
            &"&$expand=Descendants( "
            &"$apply=filter(WorkItemType eq 'User Story') " 
                &"/groupby((StateCategory), "
                &"aggregate(StoryPoints with sum as TotalStoryPoints)) "
            &")  "
    ,null, [Implementation="2.0",OmitValues = ODataOmitValues.Nulls,ODataVersion = 4]) 
in
    Source

Строки подстановки и разбивка запросов

Замените следующие строки значениями. Не включайте скобки в подстановку {} . Например, если вашей организации присвоено имя Fabrikam, замените {organization} на Fabrikam, а не {Fabrikam}.

  • {organization} — Название организации
  • {project} — Имя проекта группы или опущено /{project} полностью для межпроектного запроса
  • {areapath} — Путь к области. Пример формата: Project/Level1/Level2.

Разбивка запросов

В следующей таблице описана каждая часть запроса.

Часть запроса

Description


$filter=WorkItemType eq 'Feature'

Возвращаемые функции.

and State ne 'Cut'

Опустить функции, помеченные как вырезанные.

and startswith(Area/AreaPath,'{areapath}')

Возвращайте рабочие элементы в соответствии с определенным путем к области. Замена на возвращаемые Area/AreaPath eq '{areapath}' элементы по определенному пути области.
Чтобы отфильтровать по имени команды, используйте инструкцию Teams/any(x:x/TeamName eq '{teamname})'фильтра.

and Descendants/any()

Отфильтруйте все рабочие элементы, имеющие по крайней мере один или "любой" потомок. Включает все компоненты с по крайней мере одним дочерним рабочим элементом. Чтобы получить все рабочие элементы со своими потомками, даже если у них нет, выполните запрос без Descendants/any() фильтра. Чтобы опустить функции, не имеющие дочерних историй пользователей, замените на any(d:d/WorkItemType eq 'User Story').

Для всех рабочих элементов с потомками и без нее:

$filter=endswith(Area/AreaPath,'suffix')
&$select=WorkItemId,Title,WorkItemType,State,Area, Descendants
&$expand=Descendants($select=WorkItemId)

Для всех рабочих элементов с по крайней мере одним потомком:

$filter=endswith(Area/AreaPath, 'suffix')and Descendants/any()
&$select=WorkItemId,Title,WorkItemType,State,Area, Descendants
&$expand=Descendants($select=WorkItemId)

&$select=WorkItemId, Title, WorkItemType, State

Выберите свойства для возврата.

&$expand=Descendants(

Начало предложения expand Descendants

$apply=filter(WorkItemType eq 'User Story')

Фильтрация потомков. Включайте только истории пользователей (опустите задачи и ошибки).

/groupby((StateCategory),

Группирование свертки по StateCategory. Дополнительные сведения о категориях состояний см. в статье о том, как состояния рабочего процесса и категории состояний используются в невыполненных работах и советах.

aggregate(StoryPoints with sum as TotalStoryPoints))

Суммарная сумма точек истории.

)

Закрыть Descendants() предложение.

Проверка хода выполнения функций для команды

Следующий запрос совпадает с приведенным выше, за исключением фильтров по имени команды, а не по пути к области.

Скопируйте и вставьте следующий запрос Power BI непосредственно в окно получения пустого запроса данных>. Дополнительные сведения см. в разделе "Обзор примеров отчетов с помощью запросов OData".

let
   Source = OData.Feed ("https://analytics.dev.azure.com/{organization}/{project}/_odata/v3.0-preview/WorkItems?"
        &"$filter=WorkItemType eq 'Feature' "
            &"and State ne 'Cut' "
            &"and (Teams/any(x:x/TeamName eq '{teamname}) or Teams/any(x:x/TeamName eq '{teamname}) or Teams/any(x:x/TeamName eq '{teamname}) "
            &"and Descendants/any() "
        &"&$select=WorkItemId,Title,WorkItemType,State,AreaSK "
        &"&$expand=Descendants( "
            &"$apply=filter(WorkItemType eq 'User Story') "
                &"/groupby((StateCategory), "
                &"aggregate(StoryPoints with sum as TotalStoryPoints)) "
            &")  "
    ,null, [Implementation="2.0",OmitValues = ODataOmitValues.Nulls,ODataVersion = 4]) 
in
    Source

Преобразование данных в Редактор Power Query

Запрос возвращает несколько столбцов, которые необходимо развернуть, прежде чем использовать их для создания отчета. Любая сущность, извлеченная с помощью инструкции OData $expand , возвращает запись с потенциально несколькими полями. Разверните запись, чтобы выровнили сущность в полях.

Для отчета о ходе выполнения функций необходимо выполнить следующие преобразования:

  • Descendants Разверните столбец на два столбца: Descendants.StateCategoryDescendants.TotalStoryPoints
  • Применение преобразования столбца сводной таблицы к Descendants.StateCategory столбцу для разделения отдельных категорий состояний
  • Замените значения NULL во всех сводных столбцах.
  • Добавьте настраиваемый столбец для представления процента завершения. В пользовательском столбце будут отображаться ошибки, если в столбцах сводных состояний есть какие-либо пустые столбцы.

Дополнительные сведения см. в следующих разделах в разделе "Аналитика преобразования" для создания отчетов Power BI:

Примечание.

В этом примере значения состояния для истории пользователя включают предлагаемое, "Выполняется" и "Завершено".

Закройте запрос и примените изменения

Завершив все преобразования данных, нажмите кнопку "Закрыть" и "Применить " из меню "Главная ", чтобы сохранить запрос и вернуться на вкладку "Отчет " в Power BI.

Снимок экрана: параметр Редактор Power Query Закрыть и применить.

Создание отчета гистограммы с накоплением

  1. В Power BI выберите отчет гистограммы с накоплением в разделе "Визуализации".

    Снимок экрана: выбор визуализаций и полей Power BI для отчета о ходе выполнения функций с накоплением линейчатой диаграммы.

  2. Добавьте Title в ось Y.

  3. Добавьте PercentComplete в ось X, щелкните правой кнопкой мыши и выберите "Сумма".

В примере отчета отображается.

Снимок экрана: отчет о ходе выполнения функции с накоплением линейчатой диаграммы.