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.

ソースを見る

使い方

  1. インストールコマンドをコピーし、自分の環境へ導入する前にソースを確認します。
  2. 必要なツール、認証情報、対応環境を原文で確認します。
  3. 入力と成果物を指定し、出力を資料と照合します。
npx skills add https://github.com/officetuning/skill-library --skill power-query-m

開始前の確認

  • 導入にはモデル契約、API枠、ファイルへのアクセス許可は含まれません。
  • スター数や導入数は活動の指標であり、独立した品質・安全性試験ではありません。
リポジトリの原文

見出し、例、コード、表、リンク、参照画像を含む原文を表示しています。

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

タスクに関連する項目

同じリポジトリから

関連する Skills

すべての Skills
officetuning
コミュニティ

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.

導入数
1
GitHub Stars
1
更新日
10月3日
officetuning
コミュニティ

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

導入数
1
GitHub Stars
1
更新日
10月3日
officetuning
コミュニティ

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.

導入数
1
GitHub Stars
1
更新日
10月3日
officetuning
コミュニティ

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

導入数
1
GitHub Stars
1
更新日
10月3日