Свертка значений дочерних рабочих элементов в родительский пример отчета
Azure DevOps Services | Azure DevOps Server 2022 — Azure DevOps Server 2019
Свертка предоставляет поддержку для отображения количества рабочих элементов или суммы точек истории, оставшихся работ или другого настраиваемого поля дочерних элементов. В этой статье представлено несколько примеров создания табличного сводного отчета для эпических, функций или пользовательских историй, содержащих дочерние рабочие элементы. На следующем рисунке показан пример сведений о точках истории, развернутых для их родительских функций.
Дополнительные сведения о свертки и параметрах для отображения свертки см. в разделе "Отображение хода выполнения накопительного пакета" или итогов в Azure Boards.
Примечание.
В этой статье предполагается, что вы читаете обзор примеров отчетов с помощью запросов 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 'Cut'"
&" and startswith(Area/AreaPath,'{areapath}')"
&" and Descendants/any()"
&"& $select=WorkItemId,Title,WorkItemType,State,AreaSK"
&"& $expand=AssignedTo($select=UserName),Iteration($select=IterationPath),Area($select=AreaPath),"
&"Descendants("
&"$apply=filter(WorkItemType eq 'User Story')"
&"/aggregate($count as CountOfUserStories, 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()
Включите все функции, даже те, которые не содержат пользовательских историй. Замените "any(d:d/WorkItemType eq "Пользовательская история"), чтобы не указывать функции, у которых нет дочерних историй пользователей.
&$select=WorkItemId, Title, WorkItemType, State
Выберите поля для возврата.
&$expand=AssignedTo($select=UserName), Iteration($select=IterationPath), Area($select=AreaPath),
Выберите поля AssignedTo
расширяемого свойства , , Area
Iteration
.
Descendants(
Descendants
Разверните предложение.
$apply=filter(WorkItemType eq 'User Story')
Отфильтруйте потомков, чтобы включить только пользовательские истории (омитирует задачи и ошибки).
/aggregate($count as CountOfUserStories, StoryPoints with sum as TotalStoryPoints)
Для всех потомков, соответствующих предложению фильтра, подсчитывайте их и суммируете StoryPoints
свойство.
)
Закройте среду Descendants()
.
Сводная история указывает на функции дочерних пользовательских историй на основе Teams
В следующих запросах показано, как создавать отчеты свертки по имени команды, а не по пути к области.
Скопируйте и вставьте следующий запрос 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=AssignedTo($select=UserName),Iteration($select=IterationPath),Area($select=AreaPath),"
&"Descendants("
&"$apply=filter(WorkItemType eq 'User Story')"
&"/aggregate($count as CountOfUserStories, StoryPoints with sum as TotalStoryPoints)"
&")",
null, [Implementation="2.0",OmitValues = ODataOmitValues.Nulls,ODataVersion = 4])
in
Source
Свертка истории указывает на эпические
С помощью следующих запросов можно свернуть историю в Epics.
Скопируйте и вставьте следующий запрос Power BI непосредственно в окно получения пустого запроса данных>. Дополнительные сведения см. в разделе "Обзор примеров отчетов с помощью запросов OData".
let
Source = OData.Feed("https://analytics.dev.azure.com/{organization}/{project}/_odata/v3.0-preview/WorkItems?"
&"$filter=WorkItemType eq 'Epic'"
&" and State ne 'Cut'"
&" and startswith(Area/AreaPath,'{areapath}')"
&" and Descendants/any(d:d/WorkItemType eq 'User Story')"
&"& $select=WorkItemId,Title,WorkItemType,State,AreaSK"
&"& $expand=AssignedTo($select=UserName),Iteration($select=IterationPath),Area($select=AreaPath),"
&"Descendants("
&"$apply=filter(WorkItemType eq 'User Story')"
&"/aggregate(StoryPoints with sum as TotalStoryPoints)"
&")",
null, [Implementation="2.0",OmitValues = ODataOmitValues.Nulls,ODataVersion = 4])
in
Source
Свертки задач, оставшихся рабочих и завершенных работ для пользовательских историй
В следующем запросе показано, как свернуть оставшуюся работу и завершенную работу, назначенную дочерним задачам для пользовательских историй в иерархии. Эти запросы предполагают, что задачи назначаются как дочерние элементы пользовательской истории в указанном пути области.
Скопируйте и вставьте следующий запрос Power BI непосредственно в окно получения пустого запроса данных>. Дополнительные сведения см. в разделе "Обзор примеров отчетов с помощью запросов OData".
let
Source = OData.Feed("https://analytics.dev.azure.com/{organization}/{project}/_odata/v3.0-preview/WorkItems?"
&"$filter=WorkItemType eq 'User Story'"
&" and State ne 'Removed'"
&" and startswith(Area/AreaPath,'{areapath}')"
&" and Descendants/any()"
&"& $select=WorkItemId,Title,WorkItemType,State,AreaSK"
&"& $expand=AssignedTo($select=UserName),Iteration($select=IterationPath),Area($select=AreaPath),"
&"Descendants("
&"$apply=filter(WorkItemType eq 'Task')"
&"/aggregate(RemainingWork with sum as TotalRemainingWork, CompletedWork with sum as TotalCompletedWork)"
&")",
null, [Implementation="2.0",OmitValues = ODataOmitValues.Nulls,ODataVersion = 4])
in
Source
Количество ошибок свертки в функции
В следующих запросах показано, как свернуть количество ошибок, назначенных функциям. Эти запросы предполагают, что ошибки определяются как дочерние элементы компонента в указанном пути области.
Скопируйте и вставьте следующий запрос 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,WorkItemType,State,AreaSK"
&"& $expand=AssignedTo($select=UserName),Iteration($select=IterationPath),Area($select=AreaPath),"
&"Descendants("
&"$apply=filter(WorkItemType eq 'Bug')"
&"/aggregate($count as CountOfBugs)"
&")",
null, [Implementation="2.0",OmitValues = ODataOmitValues.Nulls,ODataVersion = 4])
in
Source
(Необязательно) Переименование запроса
Вы можете переименовать метку запроса по умолчанию, query1, в что-то более понятное. Просто введите новое имя в области параметров запроса.
Развертывание столбцов в Power BI
Предложение &$expand=AssignedTo($select=UserName), Iteration($select=IterationPath), Area($select=AreaPath)
возвращает записи, содержащие несколько полей. Прежде чем создать отчет, необходимо развернуть запись, чтобы она была сплощена в определенные поля. В этом экземпляре необходимо развернуть следующие записи:
AssignedTo
AreaPath
IterationPath
Сведения о том, как можно узнать, как создавать отчеты Power BI, см. в статье "Аналитика преобразования".
(Необязательно) Переименование полей
После развертывания столбцов может потребоваться переименовать одно или несколько полей. Например, можно переименовать столбец AreaPath
Area Path
в . Сведения о том, как это сделать, см. в разделе "Переименовать поля столбцов".
Замена значений NULL в полях свертки
Если рабочий элемент не имеет дочерних элементов, значение свертки может иметь значение NULL. Например, Потомки.CountOfUserStories имеет значение NULL, если компонент не имеет дочерних историй пользователей.
Чтобы упростить отчеты, замените все значения NULL нулем, выполнив следующие действия.
- Выберите столбец, щелкнув заголовок столбца.
- Выберите меню "Преобразование".
- Выберите " Заменить значения". Откроется диалоговое окно "Заменить значения ".
- Введите значение NULL для поиска.
- Введите "0" в замене.
- Выберите OK.
Повторите все столбцы свертки.
Закройте запрос и примените изменения
Завершив все преобразования данных, нажмите кнопку "Закрыть" и "Применить " из меню "Главная ", чтобы сохранить запрос и вернуться на вкладку "Отчет " в Power BI.
Создание отчета таблицы
В Power BI выберите отчет "Таблица" в разделе "Визуализации".
Добавьте следующие поля в столбцы в указанном порядке:
WorkItemI
, выберите "Не сводные данные" для отображения идентификатора при необходимостиWorkItemType
Title
State
Count of User Stories
Total Story Points
.
В примере отчета отображается.