Partilhar via


Colapso de consultas em consultas SQL nativas

No Power Query, pode definir uma consulta nativa e executá-la na sua fonte de dados. O artigo Importar dados de uma base de dados usando uma consulta nativa de base de dados explica como fazer este processo com múltiplas fontes de dados. Mas, ao usar o processo descrito nesse artigo, a sua consulta não tira partido de qualquer dobragem de consulta nos passos seguintes.

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

Observação

Recomendamos que leia a documentação sobre query folding e os indicadores de query folding para compreender melhor os conceitos utilizados ao longo deste artigo.

Conectores de dados suportados

O método descrito nas secções seguintes aplica-se aos seguintes conectores de dados:

Conectar ao alvo desde a fonte de dados

Observação

Para mostrar este processo, este artigo utiliza o conector SQL Server e a base de dados de exemplo AdventureWorks2019. A experiência pode variar de conector para conector, mas este artigo mostra os fundamentos sobre como ativar capacidades de folding de consultas em vez de consultas nativas para os conectores suportados.

Ao fazer a ligação à fonte de dados, é importante que se conecte ao nó ou nível onde pretende executar a sua consulta de nível nativo. No exemplo deste artigo, esse nó é o nível da base de dados dentro do servidor.

Captura de ecrã do diálogo das definições de ligação para a ligação à base de dados AdventureWorks2019 numa instância local do SQL Server.

Depois de definir as definições de ligação e fornecer as credenciais da sua ligação, abre-se o diálogo de navegação da sua fonte de dados. O diálogo de navegação contém todos os objetos disponíveis a que pode ligar-se.

Desta lista, precisa de selecionar o objeto onde a consulta nativa é executada (também conhecido como destino). Neste exemplo, esse objeto é o nível da base de dados.

Na janela do navegador no Power Query, selecione e mantenha pressionado (ou clique com o botão direito) no nó da base de dados na janela do navegador e selecione a opção Transformar Dados . Ao selecionar esta opção, cria-se uma nova consulta da vista geral da sua base de dados, que é o alvo de que precisa para executar a sua consulta nativa.

Captura de ecrã de Choose Data onde o utilizador clicou com o botão direito no nó da base de dados no navegador, com ênfase em Transform Data.

Quando a sua consulta chega ao editor Power Query, apenas o passo Source deve aparecer no painel de passos aplicados. Este passo contém uma tabela com todos os objetos disponíveis na sua base de dados, semelhante à forma como eram exibidos na janela do Navegador.

Captura de ecrã da consulta apenas com o passo de origem.

Use a função Value.NativeQuery

O objetivo deste processo é executar o seguinte código SQL e aplicar mais transformações com o Power Query que possam ser dobradas de volta à fonte.

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

O primeiro passo foi definir o alvo correto, que neste caso é a base de dados onde o código SQL é executado. Quando um passo tem o destino correto, pode selecionar esse passo — neste caso, Fonte em Passos Aplicados — e então selecionar o botão fx na barra de fórmulas para adicionar um passo personalizado. Neste exemplo, substitua a Source fórmula 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 desta fórmula é a utilização do registo opcional para o quarto parâmetro da função que tem o campo de registo EnableFolding definido como verdadeiro.

Captura de ecrã da nova fórmula personalizada de passos com a utilização da função Value.NativeQuery e da consulta SQL explícita.

Observação

Pode ler mais sobre a função Value.NativeQuery no artigo oficial de documentação.

Depois de introduzir a fórmula, é mostrado um aviso que exige que permita a execução de consultas nativas para o seu passo específico. Selecione continuar para que esta etapa seja avaliada.

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

Captura de ecrã com os resultados da consulta nativa avaliados em relação à base de dados alvo.

Dobragem de consultas de teste

Para testar o query folding da sua query, pode tentar aplicar um filtro a qualquer uma das suas colunas e ver se o indicador de query folding ao nível dos passos aplicados mostra o passo como dobrado. Neste caso, pode filtrar a coluna DepartmentID para ter valores que não sejam iguais a dois.

Captura de ecrã a demonstrar como filtrar a coluna DepartmentID para ter apenas os valores que não são iguais a dois.

Depois de adicionar este filtro, pode verificar se os indicadores de dobramento de consulta ainda mostram que está ocorrendo este dobramento de consulta neste novo passo.

Passo de filtro mostrado como dobrado de volta à fonte de dados na secção de passos aplicados.

Para validar melhor que consulta está a ser enviada para a fonte de dados, pode selecionar e manter pressionado (ou clicar com o botão direito) o passo Linhas Filtradas e selecionar a opção Ver plano de consulta para verificar o plano de consulta desse passo.

Na vista do plano de consulta, pode ver um nó com o nome Value.NativeQuery que possui um hiperlink de Ver Detalhes. Pode selecionar este hiperlink para ver a consulta exata que está a ser enviada para a base de dados SQL Server.

A consulta nativa é encapsulada numa outra instrução SELECT para criar uma subconsulta da consulta original. O Power Query faz o seu melhor para criar a consulta mais ótima, tendo em conta as transformações utilizadas e a consulta nativa fornecida.

Captura de ecrã do plano de consulta para a etapa de linhas Filtradas.

Sugestão

Para cenários em que surgem erros porque a query folding não foi possível, recomendamos que tente validar os seus passos como uma subconsulta da sua consulta nativa original para verificar se podem existir conflitos de sintaxe ou contexto.