Поделиться через


Свертывание запросов на собственные запросы

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

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

Примечание.

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

Поддерживаемые соединители данных

Метод, описанный в следующих разделах, применяется к следующим соединителям данных:

Подключение к целевому объекту из источника данных

Примечание.

Для демонстрации этого процесса в этой статье используется соединитель SQL Server и пример базы данных AdventureWorks2019. Интерфейс может отличаться от соединителя к соединителю, но в этой статье описываются основы включения возможностей свертывания запросов через собственные запросы для поддерживаемых соединителей.

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

Снимок экрана: диалоговое окно параметров подключения для подключения к базе данных AdventureWorks2019 на локальном экземпляре SQL Server.

После определения параметров подключения и предоставления учетных данных для подключения откроется диалоговое окно навигации для источника данных. Диалоговое окно навигации содержит все доступные объекты, к которым можно подключиться.

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

В окне навигатора в Power Query выберите узел базы данных (или щелкните правой кнопкой мыши) и выберите параметр преобразования данных . При выборе этого параметра создается новый запрос общего представления базы данных, который является целевым объектом, который необходимо запустить собственный запрос.

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

После того как запрос приземляется в редакторе Power Query, на панели "Примененные шаги" должен отображаться только исходный шаг. Этот шаг содержит таблицу со всеми доступными объектами в базе данных, аналогично тому, как они отображались в окне навигатора.

Снимок экрана: запрос только с исходным шагом.

Использование функции Value.NativeQuery

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

SELECT DepartmentID, Name FROM HumanResources.Department WHERE GroupName = 'Research and Development'

Первым шагом было определить правильный целевой объект, который в данном случае — база данных, в которой выполняется код SQL. После того как шаг имеет правильный целевой объект, вы можете выбрать этот шаг (в данном случае — источник в примененных шагах), а затем нажмите кнопку fx в строке формул, чтобы добавить пользовательский шаг. В этом примере замените формулу следующей Source формулой:

Value.NativeQuery(Source, "SELECT DepartmentID, Name FROM HumanResources.Department WHERE GroupName = 'Research and Development'  ", null, [EnableFolding = true])

Наиболее важным компонентом этой формулы является использование необязательной записи для четвертого параметра функции с полем записи EnableFolding с значением true.

Снимок экрана: новая настраиваемая формула шага с использованием функции Value.NativeQuery и явного SQL-запроса.

Примечание.

Дополнительные сведения о функции Value.NativeQuery см. в официальной документации.

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

Эта инструкция SQL предоставляет таблицу только с тремя строками и двумя столбцами.

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

Свертывание запросов на тестирование

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

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

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

Шаг фильтра, показанный как сложенный обратно в источник данных в разделе примененных шагов.

Чтобы дополнительно проверить, какой запрос отправляется в источник данных, можно выбрать и сохранить (или щелкнуть правой кнопкой мыши) шаг "Отфильтрованные строки" и выбрать параметр "Просмотр плана запроса", чтобы проверить план запроса для этого шага.

В представлении плана запроса вы увидите, что узел с именем Value.NativeQuery с гиперссылкой "Сведения о представлении". Вы можете выбрать эту гиперссылку, чтобы просмотреть точный запрос, отправляемый в базу данных SQL Server.

Собственный запрос упаковывается вокруг другой инструкции SELECT, чтобы создать вложенный запрос исходного. Power Query делает все возможное, чтобы создать наиболее оптимальный запрос, учитывая используемые преобразования и предоставленный собственный запрос.

Снимок экрана: план запроса для шага

Совет

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