Пример сводного отчета о ходе выполнения функций
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.StateCategory
Descendants.TotalStoryPoints
- Применение преобразования столбца сводной таблицы к
Descendants.StateCategory
столбцу для разделения отдельных категорий состояний - Замените значения NULL во всех сводных столбцах.
- Добавьте настраиваемый столбец для представления процента завершения. В пользовательском столбце будут отображаться ошибки, если в столбцах сводных состояний есть какие-либо пустые столбцы.
Дополнительные сведения см. в следующих разделах в разделе "Аналитика преобразования" для создания отчетов Power BI:
- Разверните столбец потомков.
- Столбец Pivot Descendants.StateCategory.
- Замените значения NULL.
- Создание вычисляемого столбца в процентах
Примечание.
В этом примере значения состояния для истории пользователя включают предлагаемое, "Выполняется" и "Завершено".
Закройте запрос и примените изменения
Завершив все преобразования данных, нажмите кнопку "Закрыть" и "Применить " из меню "Главная ", чтобы сохранить запрос и вернуться на вкладку "Отчет " в Power BI.
Создание отчета гистограммы с накоплением
В Power BI выберите отчет гистограммы с накоплением в разделе "Визуализации".
Добавьте
Title
в ось Y.Добавьте
PercentComplete
в ось X, щелкните правой кнопкой мыши и выберите "Сумма".
В примере отчета отображается.