Индикаторы сворачивания запросов

Замечание

Прежде чем читать эту статью, ознакомьтесь с обзором оценки запросов и свертывания запросов в Power Query, чтобы лучше понять, как свертка работает в Power Query.

Индикаторы сворачивания запросов помогают понять, для каких шагов применяется сворачивание, а для каких — нет. Шаг сворачивается, когда Power Query преобразует преобразования этого шага в запрос к источнику данных и выполняет их в источнике данных.

При использовании индикаторов свёртывания запроса сразу видно, когда внесённое вами изменение нарушает свёртывание. Эта функция помогает устранить проблемы, избежать проблем с производительностью и получить более подробные сведения о запросах. В большинстве случаев шаги либо сворачиваются, либо не сворачиваются. Но многие случаи существуют, когда результат не очевиден. В разделе Индикаторы пошаговой диагностики описаны следующие случаи («возможное свёртывание», «непрозрачный» и «неизвестный»).

Замечание

Функция индикаторов свертывания запросов доступна только для Power Query Online.

Интерпретируйте диагностику свертывания запросов

В Power Query Online индикатор свертывания запроса рядом с шагом показывает, сворачивается ли весь запрос на этом этапе. Состояние диагностики не является последовательным. Если индикатор, показывающий, что запрос не сворачивается, сменяется индикатором, показывающим, что он сворачивается, то запрос до этого момента сворачивается.

Эта интерпретация работает даже с простым запросом к источнику SQL. Например, подключитесь к таблице Production.Product в примере базы данных AdventureWorks и загрузите данные. Загрузка этого примера с помощью навигатора Power Query дает следующий запрос:

let
  Source = Sql.Database("ServerName", "AdventureWorks"),
  Navigation = Source{[Schema = "Production", Item = "Product"]}[Data]
in
  Navigation

Если проверить, как этот код отображается в индикаторах сворачивания запросов, обратите внимание, что первый шаг является неопределённым. Но второй шаг действительно складывается, что значит, что запрос до этой точки также складывается.

Снимок экрана: этапы исходной и навигации в области свертывания индикаторов.

В этом примере нельзя подтвердить, что первые шаги сворачиваются (результат неоднозначен), однако последний шаг, создаваемый при первоначальной загрузке данных, сворачивается. Как обрабатываются первые шаги (источник, а иногда и другие действия навигации ) зависят от соединителя. Например, при использовании SQL шаг обрабатывается как значение таблицы каталога, которое не сворачивается. Однако как только вы выбираете данные для этого соединителя, он сворачивается.

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

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

let
  Source = Sql.Database("ServerName", "AdventureWorks"),
  Navigation = Source{[Schema = "Production", Item = "Product"]}[Data],
  #"Capitalized each word" = Table.TransformColumns(Navigation, {{"Name", each Text.Proper(_), type text}})
in
  #"Capitalized each word"

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

Снимок экрана шагов

Индикаторы диагностики шагов

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

Индикатор Иконка Описание
Складывание Индикатор сворачивания указывает, что источник данных обрабатывает запрос на этом этапе.
Не сворачивать Индикатор не свертывания сообщает, что некоторые части запроса до этого шага оцениваются за пределами источника данных. Вы можете сравнить его с последним индикатором складывания, если он есть, чтобы узнать, можно ли изменить порядок запроса для повышения производительности.
Может свернуться Могут сложить индикаторы редко. Они хотят сказать, что запрос может "свернуться". Они указывают на то, что выбор между свертыванием и несвертыванием определяется во время выполнения, при извлечении результатов из запроса, и что план запроса носит динамический характер. Эти индикаторы, скорее всего, отображаются только с подключениями ODBC или OData.
Непрозрачный Непрозрачные индикаторы свидетельствуют о том, что полученный план запроса является неопределённым по какой-то причине. Как правило, это означает, что существует истинная "константная" таблица или что индикаторы и средство плана запросов не поддерживает это преобразование или соединитель.
Неизвестный Неизвестные индикаторы представляют отсутствие плана запроса из-за ошибки или попытки выполнить оценку плана запроса на нечто отличное от таблицы (например, записи, списка или примитива).

Анализ индикаторов свертывания запросов

Чтобы проанализировать индикаторы свертывания запросов, подключитесь к таблице Production.Product из базы данных AdventureWorks (SQL). При начальной загрузке этап Source отображается как неопределённый, а этап Navigation — в свёрнутом состоянии, как показано на изображении ниже.

Снимок экрана: индикаторы начального шага для загрузки таблицы Product.

Когда вы добавляете больше сворачиваемых шагов, вы удлиняете зелёную линию справа. Это расширение происходит, потому что этот шаг тоже складывается.

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

Когда вы добавляете шаг, который не поддерживает свертывание, вы увидите другой индикатор. Например, С заглавной буквы каждое слово никогда не сворачивается. Индикатор изменяется, показывая, что на этом шаге он перестал сворачиваться. Как уже упоминалось ранее, предыдущие шаги по-прежнему выполняются.

Снимок экрана, на котором показано, как добавление шага

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

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

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

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