Вывод списка связанных рабочих элементов с примерами запросов и отчетов

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и IterationArea сущностей.

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 BI, переименование запроса.

Преобразование данных в Редактор 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 Query Закрыть и применить.

Создание отчета таблицы для перечисления связанных рабочих элементов

  1. В Power BI выберите отчет "Таблица " в разделе "Визуализации".

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

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

    • Идентификатор, щелкните правой кнопкой мыши и выберите " Не сводные данные"
    • Штат
    • Заголовок
    • Идентификатор целевого объекта, щелкните правой кнопкой мыши и выберите " Не сводные данные"
    • Тип ссылки
    • Целевое состояние
    • Название целевого объекта

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

Снимок экрана: примеры ссылок