fx

DAX

Code Library UDF DAX

Biblioteca de 28 funções DAX definidas pelo usuário (UDFs) com código completo, argumentos, exemplos e teste em DAX Query View: calendário, comparativo com o ano anterior, texto, datas fiscais, feriados móveis e estatística.

29 funções

Guia de uso

1. Requisitos

Funções DAX definidas pelo usuário (UDFs) estão disponíveis de forma geral no Power BI Desktop e no Power BI Service desde a versão de junho de 2026 e exigem nível de compatibilidade do banco 1702 ou superior.

2. Gravar uma função no modelo

  1. Abra a DAX Query View, cole o Código completo da função e execute (o EVALUATE do fim testa a função).
  2. Clique em Update model with changes para gravar todas as funções da consulta, ou em Update model: Add new function acima de uma função para gravar só ela.
  3. A função aparece no Model explorer, no nó Functions.

Na TMDL view, use createOrReplace com function no lugar de FUNCTION. Num Power BI Project, as funções ficam em functions.tmdl.

3. Tipos de parâmetro

TipoAvaliaçãoUse quando
ANYVAL, SCALAR, TABLE (com subtipo INT64, STRING, DATETIME, NUMERIC...)val: uma vez, na chamadaA função só usa o valor recebido. Aceita medida, variável ou expressão
ANYREF, MEASUREREF, COLUMNREF, TABLEREF, CALENDARREFexpr: dentro da funçãoA função precisa avaliar o argumento em outro contexto, como dentro de CALCULATE

⚠️ Parâmetro expr é reavaliado a cada uso dentro da função. Se a função só faz conta com o valor, prefira ANYVAL ou NUMERIC.

4. Documentar a função

Use /// acima de FUNCTION, com @param e @returns: a descrição aparece no IntelliSense. Comentários // e /* */ não aparecem.

DEFINE
    /// Diferença entre o valor atual e o do ano anterior.
    /// @param {ANYVAL} Valor - Valor atual.
    /// @param {ANYVAL} ValorAA - Valor do ano anterior.
    /// @returns Valor − ValorAA, ou BLANK se um dos dois estiver em branco.
    FUNCTION Delta.Absoluto =
        ( Valor : ANYVAL, ValorAA : ANYVAL ) =>
        IF ( ISBLANK ( Valor ) || ISBLANK ( ValorAA ), BLANK (), Valor - ValorAA )

EVALUATE
{ Delta.Absoluto ( 120, 100 ) }

5. Listar as funções do modelo

EVALUATE
INFO.USERDEFINEDFUNCTIONS ()

6. Limitações

  • Sem recursão, sem sobrecarga e sem tipo de retorno explícito.
  • Funções não vão para pastas de exibição e não podem ser ocultadas.
  • Segurança em nível de objeto (OLS) não passa para a função: uma função que usa uma medida protegida não fica protegida.

Fontes

Exemplos de medidas

Melhor dia de vendas

Devolve a data de maior venda e o valor, num único texto.

Melhor Dia de Vendas =
CONCATENATEX (
    TOPN ( 1, VALUES ( TabDimCalendario[Data] ), [Total de Vendas] ),
    FORMAT ( TabDimCalendario[Data], "dd-mmm" ) & " | "
        & FORMAT ( [Total de Vendas], "#,.0K" ),
    ", "                                   -- separa as datas em caso de empate
)
  • TOPN devolve todas as linhas empatadas na primeira posição: o delimitador ", " evita que as datas saiam grudadas.
  • ⚠️ A vírgula logo antes do ponto decimal em "#,.0K" divide o valor por 1.000. O texto final segue a localidade do modelo.

Seta de variação

Troca os triângulos de Delta.Info por setas Unicode.

Seta Δ% Total de Vendas =
VAR vDeltaPct = [Δ% Total de Vendas]
RETURN
    SWITCH (
        TRUE (),
        ISBLANK ( vDeltaPct ), BLANK (),   -- sem ano anterior
        vDeltaPct > 0, "🡽",
        vDeltaPct = 0, "🢂",
        "🢆"
    )
  • ⚠️ Use ISBLANK e não vDeltaPct = BLANK (): todo operador de comparação, exceto ==, trata BLANK como 0, então uma variação zero viraria BLANK e a seta horizontal nunca apareceria.
  • Formate a medida Δ% Total de Vendas conforme o padrão AV/AA/Δ das funções Delta.*.

Fontes