Redirecionamento de consulta em consultas nativas

No Power Query, é possível definir uma consulta nativa e executá-la na fonte de dados. O artigo Importar dados de um banco de dados usando consulta nativa ao banco de dados explica como realizar esse processo com várias fontes de dados. Mas, ao usar o processo descrito naquele artigo, sua consulta não aproveita nenhum query folding das etapas subsequentes da consulta.

Este artigo apresenta um método alternativo para criar consultas nativas na fonte de dados usando a função Value.NativeQuery e manter o mecanismo de query folding ativo nas etapas subsequentes da consulta.

Observação

Leia a documentação sobre fusão de consulta e os indicadores de fusão de consulta para entender melhor os conceitos usados ao longo deste artigo.

Conectores de dados com suporte

O método descrito nas próximas seções se aplica aos seguintes conectores de dados:

Conectar ao destino a partir da fonte de dados

Observação

Para demonstrar esse processo, este artigo usa o conector SQL Server e o banco de dados de exemplo AdventureWorks2019. A experiência pode variar de conector para conector, mas este artigo apresenta os fundamentos de como habilitar recursos de dobramento de consulta para consultas nativas nos conectores compatíveis.

Ao se conectar à fonte de dados, é importante que você se conecte ao nó ou ao nível em que deseja executar sua consulta nativa. No exemplo deste artigo, esse nó é o nível do banco de dados dentro do servidor.

Captura de tela da caixa de diálogo de configurações de conexão para a conexão com o banco de dados AdventureWorks2019 em uma instância local do SQL Server.

Depois de definir as configurações de conexão e fornecer as credenciais para sua conexão, a caixa de diálogo de navegação da fonte de dados será aberta. A caixa de diálogo de navegação contém todos os objetos disponíveis aos quais a conexão é possível.

Nessa lista, você precisa selecionar o objeto em que a consulta nativa é executada (também conhecida como destino). Para este exemplo, esse objeto é o nível do banco de dados.

Na janela do navegador no Power Query, selecione e segure o nó do banco de dados na janela do navegador (ou clique com o botão direito do mouse nele) e selecione a opção Transformar Dados. Selecionar essa opção cria uma nova consulta da exibição geral do banco de dados, que é o destino necessário para executar sua consulta nativa.

Captura de tela de Escolher dados em que o usuário clicou com o botão direito no nó do banco de dados no navegador, com Transformar dados em destaque.

Depois que a consulta chegar ao editor de Power Query, somente a etapa Origem será exibida no painel Etapas Aplicadas. Esta etapa contém uma tabela com todos os objetos disponíveis em seu banco de dados, semelhante à forma como eles foram exibidos na janela Navegador.

Captura de tela da consulta contendo apenas a etapa de origem.

Usar a função Value.NativeQuery

O objetivo desse processo é executar o código SQL a seguir e aplicar mais transformações com Power Query que podem ser dobradas de volta para a origem.

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

A primeira etapa foi definir o destino correto, que nesse caso é o banco de dados em que o código SQL é executado. Depois que uma etapa tiver o destino correto, selecione essa etapa , nesse caso, Origem em Etapas Aplicadas e, em seguida, selecione o botão fx na barra de fórmulas para adicionar uma etapa personalizada. Neste exemplo, substitua a fórmula Source pela seguinte fórmula:

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

O componente mais importante dessa fórmula é o uso do registro opcional para o quarto parâmetro da função que tem o campo do registro EnableFolding definido como true.

Captura de tela da nova fórmula de etapa personalizada mostrando o uso da função Value.NativeQuery e a consulta SQL explícita.

Observação

Você pode ler mais sobre a função Value.NativeQuery no artigo da documentação oficial.

Depois de inserir a fórmula, é mostrado um aviso que exige que você habilite as consultas nativas a serem executadas para sua etapa específica. Selecione continuar para que esta etapa seja avaliada.

Essa instrução SQL produz uma tabela com apenas três linhas e duas colunas.

Captura de tela com os resultados da consulta nativa avaliada no banco de dados de destino.

Testar redirecionamento de consulta

Para testar a compactação da sua consulta, você pode tentar aplicar um filtro a qualquer uma das suas colunas e verificar se o indicador de compactação da consulta, na seção Etapas Aplicadas, mostra que a etapa foi compactada. Nesse caso, filtre a coluna DepartmentID para ter valores que não sejam iguais a dois.

Captura de tela que demonstra como filtrar a coluna DepartmentID para mostrar apenas os valores diferentes de dois.

Depois de adicionar esse filtro, você pode verificar se os indicadores de dobramento de consulta ainda mostram a dobragem de consulta acontecendo nesta nova etapa.

Etapa de filtro mostrada como delegada novamente à fonte de dados na seção Etapas Aplicadas.

Para validar ainda mais qual consulta está sendo enviada para a fonte de dados, selecione e segure a etapa Linhas Filtradas (ou clique com o botão direito do mouse nela) e selecione a opção Exibir plano de consulta para verificar o plano de consulta para essa etapa.

Na exibição do plano de consulta, você pode ver que há um nó com o nome Value.NativeQuery que tem um hiperlink Ver detalhes. Selecione este hiperlink para exibir a consulta exata que está sendo enviada para o banco de dados SQL Server.

A consulta nativa é encapsulada em torno de outra instrução SELECT para criar uma subconsulta do original. O Power Query busca sempre criar a consulta mais otimizada, considerando as transformações usadas e a consulta nativa fornecida.

Captura de tela do plano de consulta para a etapa Linhas filtradas.

Dica

Em cenários em que ocorrem erros porque a dobra de consulta não é possível, tente validar suas etapas como uma subconsulta da sua consulta nativa original para verificar se pode haver conflitos de sintaxe ou de contexto.