Se os refreshes do seu Power BI estão lentos ou falhando por memória, há uma boa chance de que o query folding não esteja funcionando. Esse é um dos conceitos mais importantes — e menos compreendidos — para quem quer refreshes rápidos e modelos eficientes.
O que é query folding
Query folding (ou “dobra de consulta”) é o mecanismo pelo qual o Power Query delega as transformações de volta para a fonte de dados em vez de processá-las localmente. Quando você aplica um filtro, remove colunas, agrupa ou renomeia campos no Power Query, o motor tenta traduzir essas etapas para a linguagem nativa da fonte — normalmente SQL — e executar lá, no servidor do banco.
Por que isso deixa o refresh mais rápido
Quando a transformação roda na fonte, o banco faz o trabalho pesado com seus índices e seu motor otimizado, e devolve ao Power BI apenas o resultado — tipicamente muito menos linhas. Isso reduz o volume trafegado pela rede, o uso de memória no refresh e o tempo total. Sem folding, a fonte devolve tudo e o Power Query processa linha a linha na sua máquina ou na capacidade, o que é muito mais caro.
Full folding, partial folding e no folding
Uma consulta pode ter três resultados possíveis:
- Full folding: todas as etapas são traduzidas e executadas na fonte. Cenário ideal.
- Partial folding: parte das etapas roda na fonte; a partir de uma etapa que “quebra” o folding, o restante roda localmente.
- No folding: nada é delegado — todo o processamento acontece no Power Query.
Quais fontes suportam query folding
O folding só existe quando a fonte tem um motor de consulta capaz de receber comandos:
- Suportam: SQL Server, Azure SQL, PostgreSQL, Snowflake, Amazon Redshift, Google BigQuery, SAP HANA e outros bancos relacionais.
- Não suportam: arquivos Excel, CSV, JSON, pastas e a maioria das APIs web — fontes baseadas em arquivo não têm motor de consulta para onde delegar.
Como saber se uma etapa faz folding
No editor do Power Query, clique com o botão direito sobre uma etapa em Etapas Aplicadas e escolha Exibir Consulta Nativa (View Native Query). Se a opção aparecer e mostrar o SQL gerado, aquela etapa está fazendo folding. Se estiver acinzentada, o folding foi quebrado em algum ponto anterior.
O que costuma quebrar o query folding
- combinar consultas de fontes diferentes;
- colunas personalizadas com funções M sem equivalente em SQL;
- operações de pivot e unpivot;
- adicionar coluna de índice;
- usar
Table.Buffer(); - mesclar fontes de natureza diferente.
A regra prática: deixe as etapas que fazem folding (filtrar, remover colunas, renomear, agrupar, mesclar tabelas da mesma fonte) no início, e só depois aplique as que quebram o folding.
Query folding e a atualização incremental
O folding é pré-requisito para uma política eficiente de atualização incremental. A atualização incremental usa os parâmetros RangeStart e RangeEnd para filtrar apenas a janela recente — e esse filtro só é eficiente se for empurrado para a fonte via folding. Por isso o Power BI avisa quando não consegue confirmar que a consulta faz folding:
Boas práticas para preservar o folding
- verifique “Exibir Consulta Nativa” após as etapas principais;
- filtre linhas e remova colunas o quanto antes na consulta;
- ao usar
Value.NativeQuery(), habilite o folding com[EnableFolding=true]; - evite trazer colunas de alta cardinalidade que não serão usadas;
- reordene as etapas para que as que quebram o folding fiquem por último.
Garantir o query folding é um dos passos que mais impactam a performance — e um dos primeiros que verificamos quando um ambiente Power BI/Fabric começa a ficar caro.
Perguntas frequentes
É o mecanismo que faz o Power Query traduzir suas transformações (filtros, remoção de colunas, agrupamentos) para a linguagem nativa da fonte, normalmente SQL, e executá-las no próprio banco. Assim a fonte devolve menos dados e o refresh fica mais rápido.
No editor do Power Query, clique com o botão direito em uma etapa nas Etapas Aplicadas e escolha “Exibir Consulta Nativa”. Se o SQL aparecer, a etapa faz folding. Se a opção estiver acinzentada, o folding foi quebrado antes dela.
Bancos relacionais com motor de consulta: SQL Server, Azure SQL, PostgreSQL, Snowflake, Redshift, BigQuery, SAP HANA, entre outros. Arquivos Excel, CSV, JSON e a maioria das APIs web não suportam folding.
Sim, é pré-requisito. A atualização incremental depende de o filtro por data (RangeStart/RangeEnd) ser empurrado para a fonte via folding. Sem folding, a incremental fica ineficiente e o próprio Power BI exibe um aviso.