Skip
BI4ALL BI4ALL
  • Expertise
    • Data Strategy & Governance
    • Data Visualisation
    • Inteligência Artificial
    • Low Code & Automation
    • Modern BI & Big Data
    • R&D Software Engineering
    • PMO, BA & UX/ UI Design
  • Knowledge Centre
    • Blog
    • Setores
    • Customer Success
    • Tech Talks
  • Sobre Nós
    • História
    • Board
    • Parceiros BI4ALL
    • Sustentabilidade
    • Prémios
    • Media Centre
  • Carreiras
  • Contactos
Português
Inglês
Página Anterior:
    Knowledge Center
  • Descomplicar Modelos Complexos: O poder das UDFs em DAX

Descomplicar Modelos Complexos: O poder das UDFs em DAX

Página Anterior: Blog
  • Knowledge Center
  • Blog
  • Fabric: nova plataforma de análise de dados
1 Junho 2023

Fabric: nova plataforma de análise de dados

Placeholder Image Alt
  • Knowledge Centre
  • Descomplicar Modelos Complexos: O poder das UDFs em DAX
25 Novembro 2025

Descomplicar Modelos Complexos: O poder das UDFs em DAX

Descomplicar Modelos Complexos: O poder das UDFs em DAX

Key takeways

UDFs tornam o DAX modular, reutilizável e mais fácil de manter.

VAL e EXPR controlam se a função é estática ou dinâmica conforme o contexto.

Melhoram consistência, governança e eficiência de modelos empresariais.

Com a introdução das User-Defined Functions (UDFs) em DAX, lançadas em setembro de 2025, a Microsoft transformou a forma como os modelos semânticos são construídos e otimizados no Power BI e no ecossistema Microsoft Fabric.

As UDFs permitem modularizar lógica repetida, reduzir redundância de medidas e melhorar a consistência e a manutenção dos modelos empresariais.

Este artigo técnico apresenta o conceito de UDFs em DAX, evidencia os seus principais benefícios e analisa o seu impacto prático na modelação semântica.

Os exemplos em TMDL aqui incluídos ilustram a sua aplicação em diferentes contextos empresariais, com destaque para o setor financeiro, utilizado como base nos use cases apresentados.

 

Conceito de UDF em DAX

As User-Defined Functions (UDFs) introduzem no DAX um nível de modularidade até agora inexistente, permitindo que os developers definam expressões parametrizadas que podem ser reutilizadas em múltiplas medidas e modelos. Na prática, uma UDF funciona como uma função nativa do DAX como CALCULATE, FILTER ou SUMX, mas é criada pelo próprio utilizador, com total controlo sobre os parâmetros, a lógica interna e o contexto de avaliação.

A sintaxe base segue o formato:


O símbolo => separa a definição dos parâmetros do corpo da função, que contém a lógica DAX a executar. Depois de criada, a função pode ser invocada em qualquer medida, coluna calculada ou outra função, bastando passar os argumentos necessários entre parênteses, tal como se tratasse de uma função nativa.

As UDFs podem aceitar parâmetros tipados, especificando não apenas o tipo de valor esperado (por exemplo, SCALAR, TABLE ou STRING), mas também o modo de passagem de parâmetro, que é um dos aspetos mais importantes do novo modelo funcional do DAX.

Existem dois modos principais:

VAL (Value): avaliado antecipadamente, no mesmo contexto de avaliação em que a função é chamada. O resultado é calculado uma única vez e passado para a função como um valor fixo.

É ideal para parâmetros que representam resultados estáveis ou agregações pré-calculadas.

EXPR (Expression): avaliado dinamicamente dentro da função, cada vez que é utilizado no corpo da expressão.

Pode gerar resultados diferentes consoante o contexto de filtro ou linha ativo.

Este modo é fundamental quando a função precisa de se adaptar ao contexto de execução, por exemplo, em iterações com FILTER, SUMX ou AVERAGEX.

O uso de VAL e EXPR altera profundamente o comportamento da função, especialmente em cenários com contextos complexos de filtro.

Um parâmetro VAL comporta-se como uma variável estática; um EXPR, como uma fórmula viva, que reage ao contexto onde é avaliada.

Esta distinção é o que permite às UDFs criar padrões de cálculo reutilizáveis sem comprometer o dinamismo e a flexibilidade do DAX.

Por exemplo, enquanto VAL é ideal para funções que recebem métricas já resolvidas (como totais ou médias consolidadas), EXPR é preferível em funções que precisam reavaliar medidas sob filtros distintos ou contextos específicos, como calcular uma métrica apenas para um país, segmento ou período.

 

Arquitetura e Integração com o Modelo Semântico

As User-Defined Functions (UDFs) foram concebidas para se integrarem nativamente na arquitetura do Power BI e do Microsoft Fabric, funcionando como elementos dentro do modelo semântico.

Podem ser criadas e geridas diretamente no Power BI Desktop, no Power BI Service, ou em ferramentas especializadas como o Tabular Editor, e são armazenadas no ficheiro TMDL do modelo, tornando-se parte da sua definição estrutural.

Esta abordagem garante portabilidade entre ambientes e consistência de comportamento, independentemente da origem do dataset.

As UDFs podem ser armazenadas diretamente no modelo semântico, tornando-se componentes reutilizáveis que podem ser chamadas por múltiplas medidas, colunas calculadas ou até outras funções, tal como as funções nativas do DAX.

Esta integração promove consistência lógica, reduz a duplicação de expressões e simplifica a manutenção em projetos de larga escala, onde a coerência entre modelos é crítica.

Em termos de arquitetura, as UDFs são totalmente integradas na camada semântica e processadas pelo Formula Engine, tal como qualquer outra expressão DAX.

Podem referenciar medidas, colunas, tabelas e variáveis, sendo avaliadas dinamicamente de acordo com o contexto de filtro e linha ativo no momento da execução.

As UDFs coexistem de forma complementar com os Calculation Groups e os Field Parameters, oferecendo uma camada adicional de modularidade e abstração lógica.

Enquanto os Calculation Groups lidam com padrões de cálculo aplicados sobre medidas existentes, como variações temporais (YTD, MTD, LY) as UDFs operam a um nível mais fundamental, encapsulando a lógica interna das medidas e permitindo a sua reutilização em diferentes contextos analíticos.

Este novo paradigma aproxima o DAX de linguagens funcionais mais maduras, onde a lógica de negócio é modular, testável e versionável, promovendo modelos semânticos mais limpos, consistentes e sustentáveis a longo prazo.

Na prática, esta abordagem reduz o número de medidas necessárias, melhora a legibilidade e cria uma base sólida para governança de modelos empresariais complexos.

 

Performance e Eficiência Computacional (UDFs no contexto empresarial)

A performance de um modelo semântico em Power BI depende diretamente da forma como a lógica DAX é escrita e organizada.

Em muitos projetos empresariais, é comum encontrar dezenas, ou mesmo centenas de medidas que repetem o mesmo padrão de cálculo, alterando apenas um filtro, uma moeda, um período ou uma hierarquia de produto.

Esta abordagem tradicional conduz a modelos mais pesados, com maior complexidade de manutenção e maior risco de inconsistência entre medidas semelhantes.

Do ponto de vista técnico, as UDFs são processadas pelo mesmo Formula Engine que avalia qualquer expressão DAX.

Contudo, a sua estrutura modular reduz a redundância de parsing e de avaliação, o que pode ter impacto positivo em modelos complexos, especialmente quando múltiplas medidas dependem da mesma lógica base.

Além disso, as UDFs favorecem a reutilização de subexpressões pelo Formula Engine, isto é, a partilha de partes comuns do plano de execução entre medidas que usam a mesma lógica, reduzindo o esforço global de cálculo. Mais do que ganhos diretos de desempenho, as UDFs trazem eficiência estrutural.

Ao centralizar a lógica em funções reutilizáveis, o modelo torna-se mais previsível e mais fácil de otimizar.

As alterações podem ser feitas de forma isolada, sem necessidade de rever dezenas de medidas dependentes, o que reduz significativamente o custo de manutenção e os riscos de regressão lógica.

Um exemplo simples dessa eficiência pode ser observado numa função genérica que aplica um contexto dinâmico a uma métrica:

 

Neste caso, em vez de repetir CALCULATE() com filtros diferentes em várias medidas, o modelador define uma única função e invoca-a em diferentes contextos.

A sintaxe fica mais concisa, a semântica mais clara e o esforço cognitivo de leitura reduz substancialmente.

Na prática, o impacto das UDFs não se limita à performance computacional: melhora também a performance humana a capacidade de compreender, auditar e evoluir um modelo ao longo do tempo.

Ao eliminar a duplicação de lógica, o analista ganha controlo sobre a coerência das métricas e o processo de otimização torna-se mais previsível.

Os testes e observações conduzidos por Marco Russo e Alberto Ferrari (SQLBI, 2025) confirmam esta visão qualitativa: a utilização de funções reutilizáveis conduz a modelos semanticamente mais sólidos, com ganhos tangíveis em clareza, consistência e governança.

Ainda que o impacto direto na execução dependa da estrutura e do volume de dados de cada modelo, os benefícios em termos de facilidade de manutenção e sustentabilidade são transversais a todos os cenários.

Em suma, o verdadeiro valor das UDFs está na sua capacidade de reduzir a complexidade e aumentar a previsibilidade do comportamento do modelo, mantendo a performance e a lógica de negócio sob um controlo centralizado, uma evolução natural do DAX em direção a uma modelação mais modular, escalável e orientada à reutilização.

 

Exemplos TMDL: VAL vs EXPR em Contexto Empresarial

Os seguintes exemplos demonstram a aplicação prática de VAL e EXPR em contextos empresariais.

Embora alguns se baseiem em métricas financeiras, as mesmas abordagens aplicam-se a qualquer domínio de negócio.

ApplyContext

Exemplo genérico que demonstra como aplicar um filtro dinâmico a uma métrica.

TotalWithDiscount

Exemplo de utilização de parâmetros VAL, ambos os valores são avaliados antes da execução da função.

SalesForPortugal

Exemplo de utilização de parâmetros EXPR, avaliados dentro do contexto de filtro.

ECL_Total

Exemplo mais técnico, cálculo do Expected Credit Loss (ECL) num cenário bancário.

ConvertToCurrency

Função para conversão cambial parametrizada.

 

Análise — Diferenças entre VAL e EXPR

  • VAL: avaliado uma única vez antes da função; ideal para valores estáveis ou pré-calculados.
  • EXPR: avaliado sempre que invocado no corpo da função; permite variação de contexto

(ex. CALCULATE, FILTER, AVERAGEX).

  • Usar VAL quando se quer desempenho previsível; usar EXPR quando se quer comportamento dinâmico e dependente do contexto.

 

Use Case Comparativo (Modelo A vs Modelo B)

 

Modelo A — Abordagem Tradicional (sem UDFs)

Cada medida contém a sua própria lógica, resultando em duplicação de código e maior dificuldade de manutenção.

Limitações:

  • Lógica duplicada (as fórmulas de ECL, FX e margens repetem-se por moeda ou produto).
  • Alterar uma fórmula base requer edições em várias medidas.
  • Risco elevado de divergência entre medidas semelhantes.

Modelo B — Abordagem Modular com UDFs

As UDFs permitem encapsular a lógica base e reutilizá-la em diferentes medidas, reduzindo a duplicação e aumentando a consistência.

Vantagens observadas:

  • Lógica consolidada e reutilizável.
  • Simplificação da manutenção: alterações centralizadas numa única função.
  • Facilidade em criar variações contextuais (ex. por moeda, país ou período).
  • Maior consistência e legibilidade.

 

Comparação Técnica (Resumo)

Critério

Modelo A (sem UDFs) Modelo B (com UDFs)

Estrutura de código

Duplicada Centralizada

Facilidade de manutenção

Baixa Elevada
Reutilização de lógica Limitada

Total

Consistência entre medidas Média

Elevada

Adaptabilidade a novos contextos

Difícil Imediata
Risco de erro humano Alto

Reduzido

Complexidade geral do modelo Elevada

Simplificada

Estes exemplos evidenciam claramente a vantagem estrutural das UDFs: a lógica de negócio deixa de estar dispersa entre dezenas de medidas e passa a estar concentrada em funções reutilizáveis, promovendo transparência, performance e sustentabilidade do modelo semântico.

 

Fontes e Referências

SQLBI (Russo & Ferrari, 2025) — Introducing User-Defined Functions in DAX

https://www.sqlbi.com/articles/introducing-user-defined-functions-in-dax/

SQLBI YouTube — User-Defined Functions in DAX Explained (2025)

https://www.youtube.com/@SQLBI

Microsoft Learn — DAX Function Reference

https://learn.microsoft.com/power-bi/transform-model/dax/dax-function-reference

Microsoft Learn — Tabular Model Definition Language (TMDL)

https://learn.microsoft.com/power-bi/transform-model/semantic-model-tmdl

DAX Studio — Query Performance Analysis Guide

https://daxstudio.org/documentation/

Autor

Hugo Lourenço Silva

Hugo Lourenço Silva

Senior Consultant

Partilhar

Conteúdos relacionados

Visão 2026: O panorama completo das tendências em IA eBooks

Visão 2026: O panorama completo das tendências em IA

Este eBook reúne as principais tendências que irão marcar 2026, incluindo agentes inteligentes, IA invisível e física.

O Papel do Data Governance na construção de uma organização orientada a dados Blog

O Papel do Data Governance na construção de uma organização orientada a dados

Data Governance é a base de uma verdadeira organização data-enabled, transformando os dados num ativo estratégico, seguro e confiável que acelera a inovação e a geração de insights.

Acelerar a Transformação Digital através da Democratização dos Dados Use Cases

Acelerar a Transformação Digital através da Democratização dos Dados

A criação de uma arquitetura de dados descentralizada e orientada para o domínio permitiu democratizar o acesso, melhorar a qualidade e a governação dos dados.

Data Catalogue: Como transformar o Governance num plano de controlo estratégico Blog

Data Catalogue: Como transformar o Governance num plano de controlo estratégico

O Data Catalogue transforma o Data Governance num sistema estratégico e automatizado que liga pessoas, dados e políticas para gerar confiança e valor contínuo.

Reforçar a competitividade através de Data Strategy e Governance Use Cases

Reforçar a competitividade através de Data Strategy e Governance

A definição e implementação de uma estratégia e modelo de governação de dados permitiram alinhar dados com os objetivos de negócio, garantir conformidade e aumentar a eficiência e competitividade.

Avaliação da maturidade dos dados empresariais (DMA) para uma multinacional do setor industrial Use Cases

Avaliação da maturidade dos dados empresariais (DMA) para uma multinacional do setor industrial

Uma empresa multinacional de manufatura descentralizada implementou uma Avaliação de Maturidade de Dados personalizada para alinhar entidades independentes sob uma estratégia e estrutura de dados unificadas.

video title

Vamos começar

Tem uma questão? Quer iniciar um novo projeto?
Contacte-nos

Menu

  • Expertise
  • Knowledge Centre
  • Sobre Nós
  • Carreiras
  • Contactos

Mantenha-se atualizado e impulsione o sucesso com inovação

Newsletter

2026 Todos os direitos reservados

Política de Privacidade e Proteção de Dados Política de Segurança de Informação
URS - ISO 27001
URS - ISO 27701
Cookies Settings

BI4ALL may use cookies to memorise your login data, collect statistics to optimise the functionality of the website and to carry out marketing actions based on your interests.
You can customise the cookies used in .

Opções para ativar ou desativar cookies por preferência.

These cookies are essential to provide services available on our website and to enable you to use certain features on our website. Without these cookies, we cannot provide certain services on our website.

These cookies are used to provide a more personalised experience on our website and to remember the choices you make when using our website.

These cookies are used to recognise visitors when they return to our website. This enables us to personalise the content of the website for you, greet you by name and remember your preferences (for example, your choice of language or region).

These cookies are used to protect the security of our website and your data. This includes cookies that are used to enable you to log into secure areas of our website.

These cookies are used to collect information to analyse traffic on our website and understand how visitors are using our website. For example, these cookies can measure factors such as time spent on the website or pages visited, which will allow us to understand how we can improve our website for users. The information collected through these measurement and performance cookies does not identify any individual visitor.

These cookies are used to deliver advertisements that are more relevant to you and your interests. They are also used to limit the number of times you see an advertisement and to help measure the effectiveness of an advertising campaign. They may be placed by us or by third parties with our permission. They remember that you have visited a website and this information is shared with other organisations, such as advertisers.

Política de Privacidade