Пример отчета о тренде длительности конвейера

Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2020

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

На следующем рисунке показан пример отчета о тренде длительности.

Снимок экрана: отчет о тренде длительности конвейеров Power BI.

Внимание

Интеграция Power BI и доступ к веб-каналуOData службы Аналитики общедоступны для Azure DevOps Services и Azure DevOps Server 2020 и более поздних версий. Примеры запросов, указанные в этой статье, допустимы только для Azure DevOps Server 2020 и более поздних версий, и зависят от версии 3.0-preview или более поздней версии. Мы рекомендуем вам использовать эти запросы и предоставлять нам отзывы.

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

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

Примечание.

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

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

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

Примечание.

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

Получение тренда длительности 80-го процентиля для указанного конвейера

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

let
   Source = OData.Feed ("https://analytics.dev.azure.com/{organization}/{project}/_odata/v3.0-preview/PipelineRuns?"
        &"$apply=filter( "
                &"Pipeline/PipelineName eq '{pipelinename}' "
                &"and CompletedDate ge {startdate} "
                &"and (SucceededCount eq 1 or PartiallySucceededCount eq 1) "
        &") "
        &"/compute( "
            &"percentile_cont(TotalDurationSeconds, 0.8,CompletedDateSK) as Duration80thPercentileInSeconds) "
                &"/groupby( "
                &"(Duration80thPercentileInSeconds, CompletedOn/Date)) "
            &"&$orderby=CompletedOn/Date asc "
    ,null, [Implementation="2.0",OmitValues = ODataOmitValues.Nulls,ODataVersion = 4]) 
in
    Source

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

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

  • {organization} — Название организации
  • {project} — Имя проекта группы
  • {pipelinename} — Имя конвейера. Пример: Fabrikam hourly build pipeline
  • {startdate} — Дата начала отчета. Формат: ГГГГ-ММ-ДДЗ. Пример: 2021-09-01Z представляет 1 сентября 2021 г. Не заключайте в кавычки или скобки и используйте две цифры как для месяца, так и для даты.

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

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

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

Description


$apply=filter(

Предложение Start filter() .

Pipeline/PipelineName eq '{pipelinename}'

Возвращаемый конвейер выполняется для указанного конвейера.

and CompletedDate ge {startdate}

Возврат конвейера выполняется в указанной дате или после указанной даты.

and (SucceededCount eq 1 or PartiallySucceededCount eq 1)

Возвращает только успешные или частично успешные запуски.

)

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

/compute(

Предложение Start compute() .

percentile_cont(TotalDurationSeconds, 0.8,CompletedDateSK) as Duration80thPercentileInSeconds)

Вычислите 80-й процентиль длительности конвейера всех запусков конвейера, которые соответствуют критериям фильтра.

/groupby(

Запуск groupby()

(Duration80thPercentileInSeconds, CompletedOn/Date))

Группируйте по дате завершения выполнения конвейера и вычисляемого дня 80-го процентильного конвейера.

&$orderby=CompletedOn/Date asc

Укажите ответ по дате завершения.

Фильтрация по идентификатору конвейера, а не имени конвейера

Конвейеры можно переименовать. Чтобы убедиться, что отчеты Power BI не прерываются при изменении имени конвейера, используйте идентификатор конвейера, а не имя конвейера. Идентификатор конвейера можно получить из URL-адреса страницы выполнения конвейера.

https://dev.azure.com/{organization}/{project}/_build?definitionId= `{pipelineid}`

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

let
   Source = OData.Feed ("https://analytics.dev.azure.com/{organization}/{project}/_odata/v3.0-preview/PipelineRuns?"
        &"$apply=filter( "
                &"PipelineId eq {pipelineId} "
                &"and CompletedDate ge {startdate} "
                &"and (SucceededCount eq 1 or PartiallySucceededCount eq 1) "
        &") "
        &"/compute( "
            &"percentile_cont(TotalDurationSeconds, 0.8,CompletedDateSK) as Duration80thPercentileInSeconds) "
                &"/groupby( "
                &"(Duration80thPercentileInSeconds, CompletedOn/Date)) "
            &"&$orderby=CompletedOn/Date asc "
    ,null, [Implementation="2.0",OmitValues = ODataOmitValues.Nulls,ODataVersion = 4]) 
in
    Source

Получить 50-й и 90-й процентиль, а также 80-й процентиль продолжительности тренда

Может потребоваться просмотреть тенденцию длительности, вычисляемую с помощью другого значения процентиля. Следующие запросы предоставляют 50-й и 90-й длительность конвейера процентиля вместе с 80-й процентиль.

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

let
   Source = OData.Feed ("https://analytics.dev.azure.com/{organization}/{project}/_odata/v3.0-preview/PipelineRuns?"
        &"$apply=filter( "
                &"Pipeline/PipelineName eq '{pipelinename}' "
                &"and CompletedDate ge {startdate} "
                &"and (SucceededCount eq 1 or PartiallySucceededCount eq 1) "
        &") "
        &"/compute( "
            &"percentile_cont(TotalDurationSeconds, 0.5,CompletedDateSK) as Duration50thPercentileInSeconds, "
                &"percentile_cont(TotalDurationSeconds, 0.8,CompletedDateSK) as Duration80thPercentileInSeconds, "
                &"percentile_cont(TotalDurationSeconds, 0.90,CompletedDateSK) as Duration90thPercentileInSeconds) "
            &"/groupby( "
                &"(Duration50thPercentileInSeconds, Duration80thPercentileInSeconds, Duration90thPercentileInSeconds, CompletedOn/Date)) "
            &"&$orderby=CompletedOn/Date asc "
    ,null, [Implementation="2.0",OmitValues = ODataOmitValues.Nulls,ODataVersion = 4]) 
in
    Source

Фильтрация по ветви

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

  • Развернитесь Branch в Branch.BranchName.
  • Выберите срез визуализации Power BI и добавьте Branch.BranchName его в поле среза.
  • Выберите конвейер из среза, для которого необходимо увидеть тенденцию длительности конвейера.

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

let
   Source = OData.Feed ("https://analytics.dev.azure.com/{organization}/{project}/_odata/v3.0-preview/PipelineRuns?"
        &"$apply=filter( "
                &"Pipeline/PipelineName eq '{pipelinename}' "
                &"and CompletedDate ge {startdate} "
                &"and (SucceededCount eq 1 or PartiallySucceededCount eq 1) "
        &") "
        &"/compute( "
            &"percentile_cont(TotalDurationSeconds, 0.8,BranchSK, CompletedDateSK) as Duration80thPercentileInSeconds) "
                &"/groupby( "
                &"(Duration80thPercentileInSeconds, Branch/BranchName, CompletedOn/Date)) "
            &"&$orderby=CompletedOn/Date asc "
    ,null, [Implementation="2.0",OmitValues = ODataOmitValues.Nulls,ODataVersion = 4]) 
in
    Source

Тенденция длительности для всех конвейеров проектов

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

  • Развернитесь Pipeline в Pipeline.PipelineName.
  • Выберите срез в области "Визуализации" и добавьте его Pipeline.PipelineNam в поле среза.
  • Выберите конвейер из среза, для которого необходимо увидеть тенденцию передачи конвейера.

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

let
   Source = OData.Feed ("https://analytics.dev.azure.com/{organization}/{project}/_odata/v3.0-preview/PipelineRuns?"
        &"$apply=filter( "
                &"CompletedDate ge {startdate} "
                &"and (SucceededCount eq 1 or PartiallySucceededCount eq 1) "
                &") "
        &"/compute( "
        &"percentile_cont(TotalDurationSeconds, 0.8,PipelineId, CompletedDateSK) as Duration80thPercentileInSeconds) "
            &"/groupby( "
                &"(Duration80thPercentileInSeconds, Pipeline/PipelineName, CompletedOn/Date)) "
                &"&$orderby=CompletedOn/Date asc "
    ,null, [Implementation="2.0",OmitValues = ODataOmitValues.Nulls,ODataVersion = 4]) 
in
    Source

Разверните столбцы в Редактор Power Query

Перед созданием отчета необходимо развернуть столбцы, возвращающие записи, содержащие несколько полей. В этом экземпляре необходимо развернуть CompletedOn столбец, чтобы он был неструктурированным CompletedOn.Date.
Сведения о том, как развернуть рабочие элементы, см. в разделе "Аналитика преобразования" для создания отчетов Power BI.

Изменение типа данных столбца

В меню преобразования измените тип данных для Duration80thPercentileInSecondsдесятичного числа. Сведения о том, как это сделать, см. в разделе "Преобразование типа данных столбца".

(Необязательно) Переименование полей столбцов

Можно переименовать поля столбцов. Например, можно переименовать столбец Pipeline.PipelineName в Pipeline Name,или TotalCount в Total Count. Сведения о том, как это сделать, см. в разделе "Переименовать поля столбцов".

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

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

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

Создание отчета о графике

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

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

  2. Добавьте в ось X, щелкните его правой кнопкой мыши и выберите "Завершено.Дата", а не "Иерархия дат".CompletedOn.Date

  3. Добавьте Duration80thPercentileInSeconds его в ось Y правой кнопкой мыши и убедитесь, что выбрана сумма.

Отображаемый отчет должен выглядеть примерно так, как показано на следующем рисунке.

Снимок экрана: отчет о тренде длительности конвейеров Power BI.