officetuning/skill-library

dax-udf

Funções DAX definidas pelo usuário (UDF) no padrão OfficeTuning — onde criar (DAX Query View, TMDL view, Model Explorer), sintaxe FUNCTION, tipos de parâmetro (ANYVAL, SCALAR, TABLE, MEASUREREF, COLUMNREF, TABLEREF, CALENDARREF), VAL × EXPR, parâmetro opcio…

Ver código-fonte

Como usar

  1. Copie o comando e verifique o pacote antes de instalar no seu ambiente de agente.
  2. Consulte no original as ferramentas, credenciais e ambientes necessários.
  3. Descreva os dados de entrada e a entrega esperada; confira a saída com as fontes.
npx skills add https://github.com/officetuning/skill-library --skill dax-udf

Antes de começar

  • A instalação não inclui assinatura de modelo, franquia API ou acesso aos seus arquivos.
  • Estrelas e instalações indicam atividade, não um teste independente de qualidade ou segurança.
Documento original do Skill

Renderizado do repositório de origem, preservando títulos, exemplos, código, tabelas, links e imagens.

UDF DAX

Uma UDF empacota lógica DAX com nome e parâmetros para reutilizar em medidas, colunas calculadas, cálculos visuais, formatos dinâmicos e outras UDFs. GA no Desktop e no Service desde junho/2026; exige nível de compatibilidade 1702 ou superior.

Antes de escrever uma função do zero, procure na Code Library UDF DAX (functionlibrary.officetuning.com.br/dax/udf/biblioteca): calendário, comparativo AV/AA/Δ (Delta.*), datas fiscais, feriados, texto, estatística.

Fluxo de trabalho

  1. Escreva e teste na DAX Query View com DEFINE FUNCTION … EVALUATE.

Nada vai para o modelo até você aprovar.

  1. Grave no modelo: CodeLens Update model: Add new function (uma) ou

Update model with changes (todas). Na TMDL view, botão Apply.

  1. Use na medida e confira o resultado num visual.
  2. Em .pbip, a função fica em definition/functions.tmdl e entra no Git

como qualquer medida (ver tmdl-pbir).

Anatomia (padrão da casa)

dax
DEFINE
    /// Aplica imposto sobre um valor.
    /// @param {NUMERIC} valor - Valor antes do imposto
    /// @param {NUMERIC} [aliquota] - Alíquota opcional; padrão 0,1 (10%)
    /// @returns O valor com imposto
    FUNCTION Fiscal.ComImposto =
        ( valor : NUMERIC, aliquota : NUMERIC = 0.1 ) =>
            valor * ( 1 + aliquota )

EVALUATE
    ROW (
        "Padrão", Fiscal.ComImposto ( 100 ),
        "Alíquota 20%", Fiscal.ComImposto ( 100, 0.2 )
    )
-- 110 e 120
RegraPadrão OfficeTuning
Nome da funçãoGrupo.Acao com ponto para agrupar: Vendas.Margem, Delta.AA, Formato.Escala. Sem espaço, sem ponto no início/fim, sem nome de função nativa ou palavra reservada
Nome do parâmetrocamelCase, sem ponto. Parâmetro EXPR termina em Expr (valorExpr) para quem chama saber que será calculado dentro da função
Documentação/// acima da função com @param {TIPO} nome - descrição, [nome] para opcional e @returns. Comentário // não aparece no IntelliSense
TipoO mais específico que resolve: o IntelliSense e a validação recusam o argumento errado já na chamada
TesteTodo exemplo traz um EVALUATE com o resultado esperado em comentário

Tipos de parâmetro

Forma: nome : [tipo] [subtipo] [modo] [= padrão]. Sem nada, vale ANYVAL VAL.

FamíliaTipoAceitaModo
ValorANYVALEscalar ou tabelaVAL (padrão) ou EXPR
ValorSCALAR + subtipoEscalarVAL (padrão) ou EXPR
ValorTABLETabelaVAL (padrão) ou EXPR
ExpressãoANYREFQualquer referênciasempre EXPR
ExpressãoMEASUREREF / COLUMNREF / TABLEREF / CALENDARREFReferência daquele tiposempre EXPR

Subtipos de SCALAR (declarar o subtipo já implica SCALAR): INT64, DECIMAL, DOUBLE, NUMERIC (qualquer dos três), STRING, DATETIME, BOOLEAN, VARIANT. Tipos de valor convertem implicitamente ("5" vira 5 num INT64); tipos de expressão não.

VAL × EXPR — a decisão que mais erra

ModoQuando calculaHerda do chamador
VALUma vez, antes de entrar na funçãoContexto de linha e de filtro
EXPRDentro da função, onde aparece (pode ser várias vezes, em outro contexto)Só o contexto de filtro
  • Use VAL para número, texto, data, tabela pronta.
  • Use EXPR quando a função precisa mudar o contexto da expressão

(CALCULATE, ALL, iterar e recalcular por linha).

  • Dentro de iterador, MEASUREREF faz transição de contexto sozinha;

SCALAR EXPR com SUM(...) não — envolva em CALCULATE ( valorExpr ).

Exemplos completos (TABLE VAL × EXPR, TOP N com MEASUREREF, checagem de tipo): references/padroes-udf.md.

UDF em formato dinâmico de medida

O caso que mais economiza: a mesma lógica de formato em várias medidas. Na medida: Formato → Dinâmico e, na expressão de formato:

dax
Formato.Escala ( SELECTEDMEASURE () )

A medida continua numérica (gráficos funcionam), ao contrário de FORMAT() dentro da medida, que devolve texto. No visual, deixe Unidades de exibição = Nenhum, senão o visual reescala por cima. Código da Formato.Escala e variações: references/padroes-udf.md.

Onde usar e cuidados

OndeCuidado
Medida—
Coluna calculadaA função deve devolver sempre o mesmo tipo; fixe com CONVERT
Cálculo visualSó enxerga campos do visual; sem IntelliSense para UDF
Outra UDFSem recursão
Formato dinâmicoUnidades de exibição = Nenhum no visual

Limitações (confira a data no Microsoft Learn)

  • Sem recursão (nem mútua), sem sobrecarga, sem tipo de retorno declarado.
  • Não dá para ocultar, colocar em pasta de exibição nem traduzir a função.
  • Não funciona em modelo sem tabelas.
  • Conexão dinâmica: medidas de relatório chamam a UDF, sem IntelliSense.

Modelo composto: medidas do modelo local não chamam UDF do modelo de origem.

  • ⚠️ OLS não passa para a função. Não exponha objeto protegido em nome ou

descrição de função.

  • Nome sem tabela ([Valor]) é lido como medida: dentro de UDF, sempre

qualifique colunas (Vendas[Valor]).

  • Parâmetro EXPR não usado no corpo nunca é calculado.

Listar e auditar

dax
EVALUATE INFO.USERDEFINEDFUNCTIONS ()   -- nome, expressão, estado, erro

Metadados completos podem exigir permissão de escrita ou de administrador do modelo, conforme o host. State = Error + ErrorMessage mostram função quebrada depois de renomear tabela ou coluna.

Fontes

Relacionados por tarefa

do mesmo repositório

Mais Skills

Todos os Skills
officetuning
Comunidade

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.

instalações
1
GitHub Stars
1
Atualizado
3 de out.
officetuning
Comunidade

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

instalações
1
GitHub Stars
1
Atualizado
3 de out.
officetuning
Comunidade

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.

instalações
1
GitHub Stars
1
Atualizado
3 de out.
officetuning
Comunidade

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

instalações
1
GitHub Stars
1
Atualizado
3 de out.