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…

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 dax-udf

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.

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

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