officetuning/skill-library

power-query-m

Boas práticas de Power Query M no Power BI — Query Folding, consultas em camadas (Cns), Incremental Refresh com RangeStart/RangeEnd, função M documentada com Value.ReplaceType e tratamento de erro auditável.

View source

How to use

  1. Copy the installation command and review the source package before installing it in your own agent environment.
  2. Check the source document for required tools, credentials and supported hosts.
  3. Describe your input and desired deliverable; review the output against the source material.
npx skills add https://github.com/officetuning/skill-library --skill power-query-m

Before you start

  • Installation does not include a model subscription, API allowance or permission to access your files.
  • Repository stars and installation counts describe activity, not an independent quality or security test.
Original skill document

Rendered from the source repository. Headings, examples, code, tables, links, and referenced images are preserved.

Power Query M

Camada entre a origem dos dados e o modelo semântico. Metade dos problemas de refresh lento nasce aqui e ninguém olha primeiro.

Pergunta central

Essa transformação pode ser feita na fonte, ou precisa mesmo acontecer aqui?

Power Query é o lugar de tratar, não de processar. Agregação, junção de tabelas grandes e filtro sobre milhões de linhas vão para a fonte (SQL, view semântica). Sobra para o M: tipagem, renomeação para o nome semântico, tratamento de nulo e erro, e combinação de fontes que a origem não combina sozinha.

Regras

Obrigatório

  • Verificar Query Folding em toda consulta sobre fonte relacional. Perder o

folding no meio faz a máquina local processar linha a linha, e o refresh sai de minutos para horas.

  • Nomear toda consulta de ETL com prefixo Cns, separando staging (não

carregada) de final (carregada). Nomes seguem a skill bi-nomenclatura.

  • Conferir no catálogo de funções (references/funcoes-m.md) antes de escrever

uma transformação nova. Não invente função.

  • Documentar toda função reutilizável com metadados via Value.ReplaceType.

Nunca entregue função "nua".

  • Corrigir erro na causa. Nunca mascare com try ... otherwise sem isolar as

linhas descartadas.

Preferir

  • Três camadas por tabela: Staging → Tratamento → Final.
  • Table.Buffer só antes de operação não dobrável reaproveitada por várias

consultas-filhas. Nunca "por garantia".

  • Parâmetros (RangeStart, RangeEnd, ambiente, caminho) como Parâmetros de

Consulta nomeados, nunca valor fixo dentro de um passo.

  • "Selecionar Colunas" quando se mantêm poucas colunas: a consulta sobrevive a

colunas novas na fonte sem trazer lixo.

Evitar

  • Mais de ~40–50 passos numa consulta sem quebrar em consultas intermediárias.
  • Table.Buffer no início da consulta: trava a árvore em memória e impede o

folding no resto.

  • Filtro de data com valor fixo (= #date(2024,1,1)) em vez dos parâmetros de

Incremental Refresh: funciona no Desktop, mas não particiona no Service.

Query Folding

Folding é o Power Query traduzir os passos numa única instrução executada na fonte (ex.: um SELECT), em vez de baixar tudo e filtrar localmente.

Como achar o passo que quebrou:

  1. Clique com o botão direito no último passo aplicado.
  2. Se Exibir Consulta Nativa estiver ativo, ainda dobra até ali.
  3. Suba passo a passo até o primeiro em que a opção fica cinza. Esse passo

quebrou o folding.

Os indicadores de folding no painel de passos mostram o mesmo sem clicar.

O que costuma quebrar (varia por conector):

  • Transformação de texto complexa (ex.: Text.Combine sobre várias colunas).
  • Table.AddColumn com função customizada que o conector não traduz.
  • Ordenar antes de filtrar. Inverta a ordem quando der.
  • Mesclar consultas de fontes diferentes.
  • Table.Buffer, sempre.

Regra prática: toda transformação pesada acontece antes do primeiro passo que quebra o folding. Depois dele, só tipagem final e renomeação.

Docs: Query folding · Indicadores

Padrão de camadas

CamadaExemplo de nomeCarrega no modelo?Faz
StagingCnsClienteStagingNãoExtração crua, 100% dobrável
TratamentoCnsClienteTratadoNãoTipagem, renomeação, nulo, duplicata
FinalTabDimClienteSimReferencia o Tratamento

Desmarque Habilitar carregamento em Staging e Tratamento. Vantagens: debug por camada, reuso do mesmo Staging por várias tabelas finais e isolamento da quebra de folding na camada de Tratamento.

Incremental Refresh

Particiona a tabela por faixas de data e atualiza só as recentes. Suportado em Pro, PPU, Premium e Embedded. As partições reais só existem depois de publicar no Service; no Desktop os parâmetros apenas filtram uma janela pequena.

Parâmetros com nomes exatos, tipo Data/Hora:

m
// Valores iniciais quaisquer: a política sobrescreve ao publicar
RangeStart = #datetime(2024, 1, 1, 0, 0, 0) meta [IsParameterQuery = true, Type = "DateTime", IsParameterQueryRequired = true]
RangeEnd   = #datetime(2024, 1, 2, 0, 0, 0) meta [IsParameterQuery = true, Type = "DateTime", IsParameterQueryRequired = true]

Filtro na consulta, logo após a origem para dobrar:

m
= Table.SelectRows(
    CnsVendaTratado,
    // >= em um lado e < no outro: evita linha duplicada entre partições
    each [DataVenda] >= RangeStart and [DataVenda] < RangeEnd
)
Campo da políticaDefine
Arquivar dados a partir deHistórico retido sem reprocessar
Atualizar incrementalmente a partir deJanela "quente" refeita a cada refresh
Detectar alterações de dados (opcional)Coluna de última modificação na fonte
Atualizar só períodos completosNão reprocessa o dia corrente aberto

Docs: Incremental refresh

Função documentada e tratamento de erro

Modelos prontos em references/padroes-m.md:

  • função com Value.ReplaceType completo (nome, descrição, categoria, exemplo);
  • padrão de auditoria de erro que isola as linhas que falharam, em vez de

descartá-las em silêncio.

Checklist final

  • [ ] Consulta relacional com "Exibir Consulta Nativa" ativo até o passo mais tardio possível
  • [ ] Nenhum Table.Buffer no início de consulta
  • [ ] Camadas Staging → Tratamento → Final, com as duas primeiras sem carregamento
  • [ ] Consultas de ETL com prefixo Cns
  • [ ] RangeStart/RangeEnd em toda fato de volume relevante
  • [ ] Funções reutilizáveis documentadas com Value.ReplaceType
  • [ ] Nenhum try ... otherwise sem isolar as linhas afetadas
  • [ ] Nenhuma função inventada (confira references/funcoes-m.md)
  • [ ] Consultas com mais de ~40–50 passos avaliadas para quebra

Related by task

from this repository

More skills

All skills
officetuning
Community

bi-nomenclatura

Padrão Corporativo de Nomenclatura para SQL, ETL e modelo semântico Power BI — prefixos Tab/Vw/Pr/Fn/Cns, TabDim/TabFat/TabPon/TabFlt, fronteira entre camada física e semântica, nomes de medida e a convenção de comparativo temporal AV/AA/Δ/Δ%/Δi. Use ao nomear ou renomear tabela, view, procedure, consulta, coluna ou medida, ao escolher prefixo, ao criar alias SQL ou ao nomear medida que compara com o ano anterior.

installs
1
GitHub stars
1
Updated
Oct 3
officetuning
Community

bi-qa-documentacao

Documentar e validar um modelo Power BI antes de publicar — descrição de medida com /// na DAX Query View, QA em três camadas (Best Practice Analyzer pelo Tabular Editor CLI, smoke test de medidas via XMLA, binding visual.json × TMDL), pipeline de CI/CD e geração de documentação .docx a partir do TMDL/PBIR. Use para documentar medida no código, checklist de publicação automatizado, validar PBIP, CI/CD Power BI, testar medidas por script, visual quebrado, dicionário de dados, handoff ou "gerar Wo

installs
1
GitHub stars
1
Updated
Oct 3
officetuning
Community

dashboard-canvas

Método Dashboard Canvas (OfficeTuning) para planejar um relatório Power BI antes de abrir o Desktop — 12 blocos em 4 fases (Descoberta, Dados, Governança, Execução), taxonomia de tabela e campo, matrizes Tipo de Dado × Segmentação e Tipo de Dado × 5W2H, anatomia de página e revisão de modelo existente contra o Canvas. Use em briefing de BI, workshop com cliente, escopo de dashboard, cronograma de projeto BI, 5W2H ou "planejar dashboard". Para posição em pixel dos visuais use dashboard-layout.

installs
1
GitHub stars
1
Updated
Oct 3
officetuning
Community

dashboard-layout

Wireframe, grid e sistema visual de relatórios Power BI — base 8px, grid 12×9 sobre canvas 1920×1080, conversão para x/y/width/height do visual.json, zonas reservadas e modos de filtro do Background Builder, tooltip 400×304, paleta derivada de Accent/Navy e o bug de fuso horário em "última atualização" no Service. Use para definir onde cada visual fica, padronizar layout entre páginas, montar um relatório a partir do Background Builder, diagnosticar relatório desalinhado ou data de atualização e

installs
1
GitHub stars
1
Updated
Oct 3