Olá FERAS da analise de dados! Hoje, vamos ver “uma Tabela Excel alimentando WHERE do SQL em uma consulta no Power Query“, e trazer somente os dados que nos interessam.
Parece complicado? Não se preocupe, eu estou aqui para guiá-lo passo a passo, como um Gandalf dos dados. Então, pegue seu café, ajuste sua cadeira e vamos nessa! BORA?!
A Missão
Imagine que você tem uma tabela Excel chamada FiltrarPedidos, com uma única coluna chamada Pedidos contendo os números 1, 2, 3.
Seu objetivo é levar essa tabela para o Power Query, converter os números em texto e incluí-los na cláusula WHERE do SQL de uma consulta à TabelaVendas.
Parece uma missão para o James Bond, certo? Mas com as ferramentas e técnicas certas nós vamos resolver isso em um piscar de olhos.
A Preparação
Primeiro, vamos preparar nosso terreno, mandando essa tabela para o PowerQuery, e para isso, basta clicar na tabela, e depois na guia DADOS, e por fim na opção “de Tabela / Intervalo“
Isso fará abrir o editor Power Query e você verá na barra de fórmulas do Power Query o comando “Excel.CurrentWorkbook“, que é a função que traz os dados do Excel para o Power Query. Na barra de fórmulas, o comando completo que aparecerá será:
let
Source = Excel.CurrentWorkbook(){[Name="FiltrarPedidos"]}[Content]
in
Source
Este comando está buscando a tabela “FiltrarPedidos” do nossa planilha atual e trazendo o conteúdo dela para o Power Query.
Agora estamos prontos para a próxima etapa!
Importantíssima etapa no Power Query
No Power Query, temos a tabela FiltrarPedidos. Vamos alterar o tipo de dado da coluna para texto (Transformar > Tipo de Dado > Texto).
= Table.TransformColumnTypes(Collab,{{"Pedidos", type text}})
Agora, vamos criar uma lista com os textos vindos dessa tabela (Transformar > Corverter em uma Lista)
OK, essa lista servirá de base para que possamos usar nas duas soluções que vamos mostrar. Isso mesmo, duas soluções pois já vou te ensinar um macete quando o tipo de dados é diferente.
A conexão SQL bruta
No Power Query, vamos para Base de Dados > SQL Server.
Na janela que se abre, insira as informações do servidor e da base de dados (No nosso caso, o servidor é ‘localhost‘ e a base de dados é ‘EuAmoSQL‘)
No campo Instrução SQL, insira a consulta desejada, substituindo a cláusula WHERE pela lista de texto que criamos.
let
Fonte= Sql.Database("localhost", "EuAmoSQL", [Query="SELECT * FROM TabelaVendas WHERE Pedidos IN (1, 2, 3)"])
in
Fonte
Essa instrução fará que retornem os dados de TabelaVendas, cujos códigos dos Pedidos sejam 1, 2 ou 3.
Mas o que desejamos é automatizar IN (1, 2, 3). E, por isso mesmo que eu estou aqui!
Vamos fazer um ajuste no comando acima, incluindo uma varredura na Lista criada anteriormente, e criando uma coisa que eu chamo de “textão“:
let
// implementação aqui------------------------
// Texto vai retornar => '1,2,3'
Textao = Text.Combine(FiltrarPedidos[Pedidos], ", "),
// ------------------------------------------
Fonte= Sql.Database("localhost", "EuAmoSQL", [Query="SELECT * FROM TabelaVendas WHERE Pedidos IN (1, 2, 3)"])
in
Fonte
Clique em OK, e depois vá na etapa “Textao” e veja que ela está retornando os itens da lista concatenados e separados por vírgulas.
Agora falta pouco para a automação!
A automação da cláusula WHERE
Agora ficou molezinha, pois se temos um texto, podemos fazer uma colcha de retalhos, aproveitando o resultado da variável Textao.
let
Textao = Text.Combine(FiltrarPedidos[Pedidos], ", "),
Fonte= Sql.Database("localhost", "EuAmoSQL", [Query="SELECT * FROM TabelaVendas WHERE Pedidos IN (" &Textao& ")"])
in
Fonte
Agora eu ganhei o teu coração, pois você já vai passar para o SQL o comando nativo como você deseja que seja executado, evitando assim esforço computacional do Servidor e do Terminal (Excel ou Power Bi serviço).
Mas calma, que apelando pela estética e pelo meu TOC, eu tenho mais uma pequena adaptação para fazer no comando acima, que é o isolamento do comando em uma variável especifica para poder copiar e testar execução direto no SSMS.
let
Textao = Text.Combine(FiltrarPedidos[Pedidos], ", "),
comando = "SELECT * FROM TabelaVendas WHERE Pedidos IN (" &Textao& ")",
Fonte= Sql.Database("localhost", "EuAmoSQL", [Query=comando])
in
Fonte
O possivel problema com tipos de dados
Pode acontecer de você tentar replicar o exemplo em seu ambiente e dar erro, pois o campo pode estar formatado como Texto e não número (muito comum), e se for esse o seu caso, basta alterarmos o Textao, incluindo um Prefixo e um Sufixo à cada ítem da lista.
let
Textao = Text.Combine(List.Transform(Collab[Pedidos], each "'" & _ & "'"), ", "),
comando = "SELECT * FROM TabelaVendas WHERE Pedidos IN (" &Textao& ")",
Fonte= Sql.Database("localhost", "EuAmoSQL", [Query=comando])
in
Fonte
Isso acontece também quando está tentando manusear campo cujo dado está registrado em tipo DATA no banco de dados SQL.
A Revisão do Vídeo
Agora que já dominamos a arte de usar o Excel para modificar a cláusula WHERE de uma consulta SQL com o Power Query, que tal revisar o vídeo que inspirou este post?
No vídeo “[POWER QUERY] Tabela Excel alimentando WHERE no SQL SERVER” do meu canal, você vai ver todo esse processo em ação.
Clica Aqui e assista, pois o vídeo é bem didático e vai ajudar a consolidar tudo que você aprendeu aqui.
Conclusão
E aí, curtiu ? Espero que sim!
Lembre-se, isso é apenas a ponta do iceberg. Para dominar o Power Query e se tornar um verdadeiro 007 dos dados, confira a FORMAÇÃO POWER QUERY 2.0. Vamos muito além do Power Query, explorando todas as suas possibilidades.
Então, não perca tempo e venha fazer parte do nosso time de super analistas de dados!
Forte Abraço do