Вывод списка связанных рабочих элементов с примерами запросов и отчетов
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 'Closed' and State ne 'Removed' "
&"and startswith(Area/AreaPath,'{areapath}') "
&"&$select=WorkItemId,Title,WorkItemType,State,AreaSK "
&"&$expand=AssignedTo($select=UserName),Iteration($select=IterationPath),Area($select=AreaPath), "
&"Links( "
&"$filter=LinkTypeName eq 'Child' "
&"and TargetWorkItem/WorkItemType eq 'User Story'; "
&"$select=LinkTypeName; "
&"$expand=TargetWorkItem($select=WorkItemType,WorkItemId,Title,State) "
&") "
,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 'Closed' and State ne 'Removed'
Опустить функции, состояние которых имеет значение "Закрыто" или "Удалено".
and startswith(Area/AreaPath,'{areapath}')
Включите только компоненты в определенный путь области, заменяющий '{areapath}'
его.
Чтобы отфильтровать по имени команды, используйте инструкцию Teams/any(x:x/TeamName eq '{teamname})'
фильтра.
&$select=WorkItemId,Title,WorkItemType,State,AreaSK
Выберите поля для возврата.
&$expand=AssignedTo($select=UserName), Iteration($select=IterationPath), Area($select=AreaPath),
Укажите поля, используемые для расширения AssignedTo
и Iteration
Area
сущностей.
Links(
Links
Разверните сущность.
$filter=LinkTypeName eq 'Child'
Фильтруйте связанные рабочие элементы только для тех, кто использует тип дочерней ссылки. Другие примеры: Parent, Child, Duplicate, Duplicate of, Affected, Affected.
and TargetWorkItem/WorkItemType eq 'User Story';
Включайте только связанные истории пользователей.
$select=LinkTypeName;
Выберите возвращаемое LinkTypeName
свойство.
$expand=TargetWorkItem($select=WorkItemType, WorkItemId, Title, State)
Выберите свойства связанного рабочего элемента для возврата.
)
Links()
Закройте предложение.
Возврат пользовательских историй, связанных с типом связанной ссылки
Скопируйте и вставьте следующий запрос 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 'Closed' "
&"and startswith(Area/AreaPath,'{areapath}') "
&"&$select=WorkItemId,Title,WorkItemType,State,AreaSK "
&"&$expand=AssignedTo($select=UserName),Iteration($select=IterationPath),Area($select=AreaPath), "
&"Links( "
&"$filter=LinkTypeName eq 'Related' "
&"and TargetWorkItem/WorkItemType eq 'User Story'; "
&"$select=LinkTypeName; "
&"$expand=TargetWorkItem($select=WorkItemType,WorkItemId,Title,State) "
&") "
,null, [Implementation="2.0",OmitValues = ODataOmitValues.Nulls,ODataVersion = 4])
in
Source
Возврат связанных историй пользователей, отфильтрованных Teams
Следующий запрос совпадает с используемым ранее в этой статье, за исключением фильтров по имени команды, а не по пути к области.
Скопируйте и вставьте следующий запрос 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 'Closed' "
&"and (Teams/any(x:x/TeamName eq '{teamname}) or Teams/any(x:x/TeamName eq '{teamname}) or Teams/any(x:x/TeamName eq '{teamname}) "
&"&$select=WorkItemId,Title,WorkItemType,State,Priority,Severity,TagNames,AreaSK "
&"&$expand=AssignedTo($select=UserName),Iteration($select=IterationPath),Area($select=AreaPath), "
&"Links( "
&"$filter=LinkTypeName eq 'Related' "
&"and TargetWorkItem/WorkItemType eq 'User Story'; "
&"$select=LinkTypeName; "
&"$expand=TargetWorkItem($select=WorkItemType,WorkItemId,Title,State) "
&") "
,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 'Bug' "
&"and State ne 'Closed' "
&"and startswith(Area/AreaPath,'{areapath}') "
&"and Links/any(x:x/LinkTypeName eq 'Duplicate' and x/TargetWorkItem/WorkItemType eq 'Bug') "
&"&$select=WorkItemId,Title,WorkItemType,State,Priority,Severity,TagNames "
&"&$expand=AssignedTo($select=UserName),Iteration($select=IterationPath),Area($select=AreaPath), "
&"Links( "
&"$filter=LinkTypeName eq 'Duplicate' "
&"and TargetWorkItem/WorkItemType eq 'Bug'; "
&"$select=LinkTypeName; "
&"$expand=TargetWorkItem($select=WorkItemType,WorkItemId,Title,State) "
&") "
,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 'Bug' "
&"and State ne 'Closed' "
&"and startswith(Area/AreaPath,'{areapath}') "
&"and not (Links/any(x:x/LinkTypeName eq 'Duplicate' and x/TargetWorkItem/WorkItemType eq 'Bug')) "
&"&$select=WorkItemId,Title,WorkItemType,State,Priority,Severity,TagNames "
&"&$expand=AssignedTo($select=UserName),Iteration($select=IterationPath),Area($select=AreaPath) "
,null, [Implementation="2.0",OmitValues = ODataOmitValues.Nulls,ODataVersion = 4])
in
Source
(Необязательно) Переименование запроса
Вы можете переименовать метку запроса по умолчанию, query1, в что-то более понятное. Просто введите новое имя в области параметров запроса.
Преобразование данных в Редактор Power Query
Перед созданием отчета необходимо развернуть столбцы, возвращающие записи, содержащие несколько полей. В этом экземпляре необходимо развернуть следующие записи:
Links
Links.TargetWorkItem
Area
Iteration
AssignedTo
Сведения о том, как развернуть рабочие элементы, см. в разделе "Аналитика преобразования" для создания отчетов Power BI.
(Необязательно) Переименование полей
После развертывания столбцов может потребоваться переименовать одно или несколько полей. Например, можно переименовать столбец AreaPath
Area Path
в . Их можно переименовать в представлении таблицы данных или более поздней версии при создании отчета. Сведения о том, как это сделать, см. в разделе "Переименовать поля столбцов".
В этом примере были переименованы следующие поля:
Исходное имя поля | Переименовать |
---|---|
Links.TargetWorkItem.ID | Идентификатор целевого объекта |
LinksLinkTypeName | Тип ссылки |
Links.TargetWorkItem.State | Целевое состояние |
Links.TargetWorkItem.Title | Название целевого объекта |
Закройте запрос и примените изменения
Завершив все преобразования данных, нажмите кнопку "Закрыть" и "Применить " из меню "Главная ", чтобы сохранить запрос и вернуться на вкладку "Отчет " в Power BI.
Создание отчета таблицы для перечисления связанных рабочих элементов
В Power BI выберите отчет "Таблица " в разделе "Визуализации".
Добавьте следующие поля в порядок, указанный в столбцах:
- Идентификатор, щелкните правой кнопкой мыши и выберите " Не сводные данные"
- Штат
- Заголовок
- Идентификатор целевого объекта, щелкните правой кнопкой мыши и выберите " Не сводные данные"
- Тип ссылки
- Целевое состояние
- Название целевого объекта
В примере отчета отображается.