M Lens — Power Query ToolsFerramentas que faltavam para trabalhar com Power Query M no VS Code: linter, extração/sincronização de queries de projetos PBIP, leitura de queries de arquivos PBIX e preview de dados. O M Lens complementa a extensão oficial Power Query / M Language (instalada automaticamente como dependência) — ela cuida de IntelliSense, highlighting e formatação; o M Lens cuida do resto. Recursos🧭 Painel visualComando: M Lens: Abrir painel visual. Uma tela central para usuários que vêm do Power BI e não querem decorar comandos do VS Code. O painel mostra status do workspace, quantidade de queries 🧾 Arquivos
|
| Regra | Padrão | O que detecta |
|---|---|---|
unused-step |
warning | Step declarado no let mas nunca referenciado (com quick fix de remoção) |
table-buffer |
info | Table.Buffer / List.Buffer / Binary.Buffer — materializa em memória e impede query folding |
hardcoded-path |
warning | Caminhos C:\... ou \\servidor\... em literais — quebram ao compartilhar o relatório |
generic-step-name |
hint | Nomes gerados pela UI (Custom1, Renamed Columns2...) |
sensitive-literal |
error | Possíveis senhas, tokens, API keys ou Bearer tokens hardcoded |
localhost-source |
warning | Fontes apontando para localhost / 127.0.0.1 |
web-contents-options |
info | Web.Contents("...?...") sem RelativePath/Query |
remove-columns-risk |
hint | Uso de Table.RemoveColumns quando Table.SelectColumns pode ser mais explícito |
Severidades configuráveis em mlens.lint.* (off, hint, info, warning, error).
Comando: M Lens: Analisar todos os arquivos .pq/.m do workspace.
Quick fixes:
- remover step não usado;
- abrir renomeação para steps genéricos.
🧹 Organização leve de query
Comando: M Lens: Organizar query atual.
Faz uma limpeza segura no arquivo atual: remove espaços finais, reduz sequências de linhas em branco e garante newline final. A extensão não tenta reescrever semanticamente o M.
📦 Projetos PBIP (round-trip)
Edite as queries do seu relatório com git, multi-cursor e busca de verdade:
- Salve o relatório no Power BI Desktop como Projeto Power BI (.pbip) com formato TMDL.
- M Lens: Extrair queries do projeto PBIP — todo
source =de partition M eexpressionvira um arquivo.pqemmlens-queries/. - Edite os
.pqnormalmente (com linter e IntelliSense). - M Lens: Pré-visualizar aplicação PBIP — veja quais queries e
.tmdlserão alterados. - M Lens: Aplicar arquivos .pq de volta ao projeto PBIP — o código volta para os
.tmdl, preservando o restante do arquivo.
Na reaplicação o bloco é localizado pelo nome (não por número de linha), então edições manuais no .tmdl entre os dois passos não corrompem nada. Observação: o bloco reaplicado é sempre escrito em formato multi-linha com a indentação do arquivo.
Antes de aplicar, o M Lens cria backup dos .tmdl alterados em .mlens/backups/<timestamp>/.
🗺️ Scanner de fontes e dependências
Comandos:
- M Lens: Escanear fontes de dados do workspace
- M Lens: Mostrar mapa de dependências das queries
- M Lens: Diagnosticar workspace
Casos de uso reais:
- descobrir todos os
Sql.Database,Web.Contents,SharePoint.Files,File.Contents, etc.; - localizar caminhos locais antes de publicar no Power BI Service;
- achar possíveis tokens/senhas antes de commitar;
- entender quais queries dependem de outras queries em projetos grandes.
📄 Arquivos PBIX (somente leitura)
Clique com o botão direito em um .pbix → M Lens: Extrair queries de um arquivo .pbix. O M Lens lê a parte DataMashup e abre o documento de section com todas as queries.
PBIX salvos no formato enhanced metadata (sem DataMashup) não são suportados — salve como
.pbipe use o fluxo acima.
Quando isso acontece, o M Lens mostra um guia com o fluxo recomendado: abrir o .pbix no Power BI Desktop, salvar como Power BI Project (.pbip) e então extrair via TMDL.
▶️ Preview de dados (experimental, Windows)
M Lens: Avaliar query atual executa o arquivo .pq aberto via PQTest.exe (componente Microsoft.PowerQuery.SdkTools, distribuído pela extensão Power Query SDK) e mostra o resultado em uma tabela pesquisável, com cabeçalho fixo, ordenação por coluna, resumo de linhas/colunas e painel de erro formatado.
- O executável é localizado automaticamente; se necessário, configure
mlens.preview.pqTestPath. - Para SQL, use M Lens: Configurar credenciais SQL do preview e preencha
SQL_SERVER,SQL_DB,SQL_USER,SQL_PASS. - Para APIs, use M Lens: Gerenciar credenciais do preview e referencie segredos com
MLens_GetCredential("Nome"). - Limite de linhas do preview:
mlens.preview.maxRows(padrão 500).
Fluxo SQL simples:
- Rode M Lens: Configurar credenciais SQL do preview.
- Preencha:
SQL_SERVER = "servidor"
SQL_DB = "banco"
SQL_USER = "usuario"
SQL_PASS = "senha"
- Na query, use:
let
Source = Sql.Database(SQL_SERVER, SQL_DB)
in
Source
O M Lens substitui placeholders vazios como SQL_SERVER = "" no arquivo temporário do preview e também registra a credencial no cache do PQTest usando --CredentialsFilePath.
Requisitos
- VS Code 1.85+
- Extensão oficial Power Query / M Language (instalada automaticamente)
- Para o preview de dados: Windows + Power Query SDK
Configurações
| Configuração | Padrão | Descrição |
|---|---|---|
mlens.lint.enabled |
true |
Liga/desliga o linter |
mlens.lint.unusedStep |
warning |
Severidade de step não usado |
mlens.lint.tableBuffer |
info |
Severidade de uso de Buffer |
mlens.lint.hardcodedPath |
warning |
Severidade de caminho hardcoded |
mlens.lint.genericStepName |
hint |
Severidade de nome genérico |
mlens.lint.sensitiveLiteral |
error |
Severidade para possível segredo/token hardcoded |
mlens.lint.localhostSource |
warning |
Severidade para fonte localhost |
mlens.lint.webContentsOptions |
info |
Severidade para Web.Contents sem opções estruturadas |
mlens.lint.removeColumnsRisk |
hint |
Severidade para Table.RemoveColumns |
mlens.files.lintMFiles |
true |
Inclui arquivos .m nas análises |
mlens.preview.pqTestPath |
"" |
Caminho do PQTest.exe |
mlens.preview.maxRows |
500 |
Linhas máximas no preview |
mlens.preview.injectCredentials |
true |
Injeta variáveis/credenciais no arquivo temporário do preview |
Limitações conhecidas
- O linter não modela shadowing de identificadores em
letaninhados — em casos raros um step usado apenas em escopo sombreado pode ser apontado como não usado. - A reaplicação PBIP reescreve o bloco em formato multi-linha (diff maior na primeira aplicação).
- O mapa de dependências é heurístico: ele cruza nomes de arquivos
.pq/.mcom referências textuais no código. - Preview de dados depende de ferramenta externa da Microsoft (Windows apenas).
Licença
MIT