M365Con 2027 – conferência online gratuita · 11–22 Jan 2027 · 120 sessions→ m365con.net

Blog · Mirko Peters

Desmistificando UDFs de DAX: VAL vs. EXPR explicados

By ·

Bem-vindo de volta ao blog complementar do podcast! No nosso episódio mais recente, mergulhamos fundo no poderoso mundo das funções definidas pelo usuário (UDFs) do DAX. Se você tem acompanhado…

Automatically translated with AI from the original post. Read the English original

▶ BLOGDemystifying DAX UDFs:VAL vs. EXPR ExplainedM365.FM
Titelbild: Demystifying DAX UDFs: VAL vs. EXPR Explained

Bem-vindo de volta ao blog complementar do podcast! No nosso episódio mais recente, mergulhamos fundo no mundo poderoso das funções definidas pelo usuário (UDFs) do DAX. Se você tem experimentado UDFs no Power BI ou no Analysis Services, provavelmente sabe que elas são verdadeiras mudanças de jogo para eliminar a duplicação de código e centralizar a lógica de negócio. No entanto, mergulhar na modelagem avançada sem entender as nuances dos modos de parâmetro é receita para bugs silenciosos, totais inesperados e timeouts de consulta angustiantes. Para acompanhar o detalhamento completo em áudio e ouvir exemplos reais desses conceitos em ação, não deixe de ouvir o episódio complementar em DAX UDF VAL vs EXPR: Prevent Timeouts and Wrong Totals.

Neste post, vamos aprofundar as principais diferenças entre os modos de parâmetro VAL e EXPR. Ao terminar a leitura, você saberá exatamente quando capturar um valor estático e quando empregar uma expressão dinâmica, sensível ao contexto, para manter seus modelos semânticos rápidos e precisos.

Visão geral das UDFs do DAX

O que são UDFs do DAX?

As UDFs (funções definidas pelo usuário) do DAX permitem criar cálculos personalizados que você pode reutilizar em seus modelos de dados. Em vez de escrever a mesma fórmula várias vezes, você a define uma única vez como uma função. Depois, chama essa função sempre que precisar. Essa abordagem ajuda a manter seu trabalho organizado e consistente.

Pense nas UDFs do DAX como blocos de construção para seus relatórios. Elas encapsulam a lógica, para que você não precise se repetir. Isso economiza tempo e reduz erros. Você também pode compartilhar essas funções com sua equipe, facilitando a colaboração.

Veja a seguir um resumo do que torna as UDFs do DAX diferentes de outras funções definidas pelo usuário em análise de dados:

RecursoDescrição
Lógica centralizadaAs UDFs do DAX permitem a definição central e a reutilização de cálculos DAX, tornando os modelos mais fáceis de gerenciar e alterar.
ReutilizaçãoElas possibilitam o encapsulamento e a reutilização da lógica em diferentes expressões DAX e modelos semânticos.
Eficiência de tempoAs UDFs do DAX economizam tempo ao reutilizar DAX em diferentes modelos e projetos.
Melhoria de desempenhoElas podem melhorar o desempenho em cenários com cálculos de medidas em camadas, reduzindo a sobrecarga do mecanismo de fórmulas.
Organização aprimoradaAs UDFs do DAX ajudam a organizar os modelos e a melhorar o consumo em cálculos e relatórios posteriores.

Importância das UDFs do DAX

Usar funções definidas pelo usuário do DAX melhora o desenvolvimento dos seus relatórios de várias maneiras. Primeiro, elas tornam seus modelos mais limpos e fáceis de manter. Quando você atualiza uma função, todas as medidas que a utilizam são atualizadas automaticamente. Isso reduz a chance de erros e mantém seus relatórios consistentes.

As UDFs do DAX também aumentam a escalabilidade. Elas ajudam seus relatórios a crescer sem se tornar desorganizados ou lentos. Você pode construir cálculos complexos passo a passo e reutilizar essas etapas em outras partes do modelo. Esse design modular torna seu trabalho mais eficiente.

Estes são alguns dos principais benefícios que você obtém ao usar UDFs do DAX:

  • Elas reduzem a duplicação de lógica, o que diminui erros e economiza tempo.
  • Permitem atualizar regras de negócio em um único lugar, refletindo as mudanças em todos os pontos.
  • Melhoram a colaboração ao fornecer uma biblioteca compartilhada de funções para a sua equipe.
  • Simplificam o desenvolvimento de relatórios, reduzindo o tempo necessário em até 70-80%.

Comparadas às fórmulas DAX tradicionais, as UDFs do DAX também podem melhorar o desempenho de forma expressiva. Por exemplo, alguns testes mostram que as UDFs reduzem o tempo de cálculo de mais de 6.000 milissegundos para pouco mais de 160 milissegundos — uma melhoria de 97%.

Ao dominar as funções definidas pelo usuário do DAX, você ganha mais controle sobre seus modelos de dados. Você cria relatórios mais rápidos, mais fáceis de manter e mais confiáveis. Essa habilidade ajuda você a entregar analytics de alta qualidade que atendem às necessidades do seu negócio.

Pare de usar UDFs do DAX de forma incorreta: erros comuns

Compreensão equivocada dos tipos de dados

Muitos usuários têm dificuldades com tipos de dados ao trabalhar com UDFs do DAX. Frequentemente, eles não dão a devida importância ao uso do tipo correto para os parâmetros. Essa compreensão equivocada pode levar a resultados inesperados. Por exemplo, se você passar um valor de texto para uma função que espera um número, o cálculo pode falhar ou retornar resultados incorretos.

Estes são alguns erros comuns relacionados a tipos de dados:

  • Os usuários costumam confundir formatos numéricos e de texto.
  • Eles podem não perceber que o DAX trata datas como números, o que pode complicar os cálculos.
  • O uso inadequado de tipos de dados pode degradar o desempenho do modelo, resultando em relatórios lentos.

Uso incorreto de sintaxe

Erros de sintaxe são outro problema comum ao trabalhar com UDFs do DAX. Um pequeno erro no código pode interromper a execução dos cálculos. Quando você comete um erro de sintaxe, o DAX exibe um símbolo de aviso amarelo no editor de expressões. Esse símbolo indica que há algo errado, mas nem sempre esclarece o problema exato.

Estes são alguns erros de sintaxe típicos a evitar:

  • Esquecer de fechar parênteses ou colchetes.
  • Usar nomes de funções incorretos ou escrevê-los errado.
  • Não separar os argumentos com vírgulas.

Esses erros podem gerar frustração e desperdício de tempo. Sempre revise a sintaxe antes de executar suas expressões DAX.

Ignorar o tratamento de erros

O tratamento eficaz de erros é fundamental para manter a confiabilidade das suas UDFs do DAX. Muitos usuários negligenciam esse aspecto, o que pode resultar em falhas de cálculo. Por exemplo, se uma função receber um tipo de entrada inesperado, ela pode retornar um erro em vez de um resultado útil.

Para evitar esses problemas, considere implementar as seguintes estratégias:

  • Use a função IFERROR() para fornecer um valor alternativo. Isso evita que erros interrompam seus visuais.
  • Utilize ISBLANK() para verificar valores realmente em branco, distinguindo-os de zero ou de strings vazias.
  • Implemente COALESCE() para retornar o primeiro valor não em branco de uma lista de expressões.

Você também pode definir funções que verificam os tipos de entrada. Por exemplo, use ISSTRING() para verificar se uma entrada é uma string. Se não for, retorne BLANK(). Essa abordagem garante que seus cálculos continuem robustos e confiáveis.

Ao evitar esses erros comuns, você pode aprimorar suas UDFs do DAX e melhorar o desempenho geral do seu modelo de dados. Lembre-se: entender como usar VAL e EXPR corretamente é a chave para aproveitar todo o potencial das suas funções definidas pelo usuário no DAX.

Entendendo a VAL no DAX

Finalidade da VAL

A função VAL no DAX tem uma finalidade específica: ela converte uma representação em texto de um número em um valor numérico real. Essa função é essencial ao trabalhar com dados que podem chegar em formatos diferentes. Por exemplo, se você receber um número como texto de uma fonte de dados, pode usar a VAL para convertê-lo em um formato numérico utilizável. Essa conversão permite realizar cálculos com precisão.

Você deve usar a VAL quando:

  • Você precisa garantir que seus cálculos trabalhem com valores numéricos.
  • Você quer evitar erros causados pelo uso de texto em vez de números.
  • Você está lidando com entradas de usuários que nem sempre estão no formato correto.

Sintaxe da VAL

A sintaxe da função VAL é simples:

VAL(<text>)
  • <text>: este parâmetro representa a string de texto que você quer converter em número. Pode ser uma entrada de texto direta ou uma referência a uma coluna que contém valores de texto.

Veja um exemplo simples de como você pode usar a função VAL:

SalesAmount = VAL('Sales'[SalesText])

Neste exemplo, a função converte o texto da coluna 'SalesText' em um valor numérico, permitindo que você realize cálculos sobre ele.

Exemplos de uso da VAL

Vamos explorar alguns exemplos práticos de uso da função VAL no DAX.

  1. Conversão básica: suponha que você tenha uma coluna chamada 'RevenueText' com valores de receita como texto. Você pode criar uma medida para converter esses valores em números:

    TotalRevenue = SUMX('Sales', VAL('Sales'[RevenueText]))

    Essa medida calcula a receita total convertendo cada entrada de texto em um número.

  2. Tratamento de entradas do usuário: se houver um cenário em que os usuários informam números como texto, você pode usar a VAL para garantir que seus cálculos continuem precisos. Por exemplo, se um usuário informar uma meta de vendas como texto, você pode convertê-la:

    SalesTarget = VAL(UserInput[TargetText])

    Isso garante que os cálculos baseados na meta de vendas estejam corretos.

  3. Prevenção de erros: usar a VAL pode ajudar a evitar erros nos seus relatórios. Se você tentar realizar cálculos com valores de texto sem convertê-los, poderá encontrar problemas. Ao usar a VAL, você se protege contra esses erros:

    AdjustedSales = IF(ISERROR(VAL('Sales'[SalesText])), 0, VAL('Sales'[SalesText]))

    Neste exemplo, se a conversão falhar, a medida retorna 0 em vez de causar um erro.

Ao entender a finalidade e o uso correto da função VAL, você pode aprimorar suas UDFs do DAX. Esse conhecimento permite tratar os dados de forma mais eficaz e garante que seus cálculos produzam resultados precisos.

Entendendo a EXPR no DAX

Finalidade da EXPR

O modo de parâmetro EXPR no DAX desempenha um papel fundamental quando você quer que suas funções definidas pelo usuário reajam dinamicamente às mudanças no seu modelo de dados. Diferentemente de VAL, que captura um valor fixo no momento da chamada da função, EXPR permite passar uma expressão que é avaliada toda vez que a função é executada. Isso significa que seus cálculos podem se adaptar automaticamente a diferentes contextos de filtro ou contextos de linha.

Você deve usar EXPR quando sua função precisar responder a condições de dados que mudam. Por exemplo, se você quiser calcular uma medida que depende do filtro atual ou da seleção de um segmentador, EXPR permite passar essa lógica como uma expressão. Essa flexibilidade torna suas funções definidas pelo usuário mais poderosas e sensíveis ao contexto.

Dica: use EXPR para criar cálculos dinâmicos que se atualizam com base nas interações dos usuários ou nos filtros de dados. Isso ajuda você a criar relatórios que refletem insights em tempo real.

Sintaxe de EXPR

A sintaxe para usar EXPR em funções definidas pelo usuário do DAX exige que você declare o parâmetro como uma expressão. Esta é a forma geral:

DEFINE FUNCTION MyFunction(EXPR paramName AS EXPRESSION)
RETURNS <return_type>
AS
BEGIN
    RETURN <calculation_using paramName>
END
  • paramName: o nome do parâmetro que vai receber a expressão.
  • EXPRESSION: especifica que o parâmetro espera uma expressão, e não um valor fixo.

Ao chamar a função, você passa uma expressão DAX em vez de um valor simples. A função avalia essa expressão a cada execução, considerando o contexto de filtro ou de linha atual.

Exemplos de uso de EXPR

Vamos ver alguns exemplos práticos para entender como EXPR funciona em funções definidas pelo usuário do DAX.

  1. Exemplo de filtragem dinâmica

Suponha que você queira criar uma função que calcule o total de vendas, mas que permita passar uma expressão de filtro dinamicamente:

DEFINE FUNCTION TotalSalesWithFilter(EXPR FilterExpression AS EXPRESSION)
RETURNS DECIMAL
AS
BEGIN
    RETURN CALCULATE(SUM(Sales[Amount]), FilterExpression)
END

Ao chamar essa função, você pode passar diferentes expressões de filtro:

TotalSalesWithFilter(FILTER(Sales, Sales[Region] = "West"))

Essa chamada calcula o total de vendas apenas para a região Oeste. A função avalia a expressão de filtro a cada execução, adaptando-se ao contexto que você fornece.

  1. Cálculo sensível ao contexto

Você também pode usar EXPR para passar uma medida ou um cálculo que depende do contexto de linha ou de filtro atual:

DEFINE FUNCTION CalculateMargin(EXPR SalesExpr AS EXPRESSION, EXPR CostExpr AS EXPRESSION)
RETURNS DECIMAL
AS
BEGIN
    RETURN SalesExpr - CostExpr
END

Chamar essa função com expressões como SUM(Sales[Amount]) e SUM(Sales[Cost]) permite calcular a margem dinamicamente, com base nos filtros atuais.

  1. Usando EXPR com CALCULATE

Sempre envolva os parâmetros EXPR em CALCULATE quando quiser forçar transições de contexto. Isso garante que a expressão seja avaliada corretamente no contexto de filtro desejado.

Observação: usar EXPR de forma incorreta, passando valores estáticos ou não envolvendo as expressões em CALCULATE, pode levar a resultados inesperados.

Ao dominar EXPR nas suas funções definidas pelo usuário do DAX, você ganha a capacidade de escrever cálculos flexíveis e sensíveis ao contexto. Essa habilidade ajuda você a criar relatórios que respondem com precisão às seleções dos usuários e às mudanças nos dados.

Melhores práticas para funções definidas pelo usuário do DAX

Dicas de uso eficaz

Para otimizar suas funções definidas pelo usuário do DAX, siga estas melhores práticas:

  • Tenha cuidado com problemas de transição de contexto ao usar parâmetros EXPR. Transições de contexto podem levar a resultados inesperados se não forem gerenciadas corretamente.
  • Use CALCULATE em cenários complexos. Essa função ajuda a gerenciar contextos de tabela de forma eficaz, garantindo que seus cálculos reflitam a lógica pretendida.
  • Dê ênfase ao desenvolvimento modular. Divida a lógica complexa em partes gerenciáveis. Essa abordagem simplifica a manutenção e melhora o desempenho.
  • Padronize a lógica de negócio entre as equipes. A consistência na forma como você define e usa as funções aumenta a colaboração e reduz a redundância.
  • Otimize os cálculos em um único lugar. Essa prática permite melhorar o desempenho e a manutenibilidade, atualizando a lógica sem a necessidade de buscas extensas.

Cenários comuns e soluções

Entender quando usar VAL e EXPR pode melhorar significativamente suas UDFs do DAX. Veja alguns cenários comuns:

  • Use parâmetros VAL quando o valor do parâmetro for estático ou não depender do contexto de linha. Por exemplo, se você precisar de um valor limite fixo, VAL é a escolha certa.
  • Escolha parâmetros EXPR quando o parâmetro precisar ser avaliado em diferentes contextos de linha. Essa flexibilidade permite cálculos dinâmicos, como iterar sobre tabelas ou filtrar com base em métricas calculadas.

Veja a seguir exemplos específicos para ilustrar esses pontos:

  1. Na função BestCustomers, usar parâmetros EXPR permite que a métrica seja avaliada para cada cliente, produzindo resultados precisos.
  2. Ao usar parâmetros VAL, a função avalia a métrica apenas uma vez. Isso pode levar a resultados incorretos ou vazios se o contexto mudar.
  3. A necessidade de transições de contexto é fundamental. Os parâmetros EXPR podem ser gerenciados explicitamente com CALCULATE para garantir uma avaliação correta.

Ao aplicar essas boas práticas, você pode simplificar a manutenção e melhorar o desempenho das suas funções definidas pelo usuário em DAX. Essa abordagem não só aprimora seus cálculos, como também contribui para a eficiência de longo prazo dos seus modelos de dados.


Neste blog, você aprendeu sobre a importância de VAL e EXPR nas funções definidas pelo usuário em DAX. Entender esses conceitos ajuda você a evitar erros comuns e aprimora seus modelos de dados.

  • VAL captura valores fixos, enquanto EXPR permite cálculos dinâmicos.
  • O uso adequado dessas funções melhora a precisão e o desempenho.

Ao aplicar esse conhecimento, você pode criar UDFs em DAX mais eficazes. Comece a aplicar essas práticas hoje mesmo e eleve suas habilidades em análise de dados! 🚀 Não deixe de conferir o episódio relacionado para uma explicação completa em áudio e a discussão sobre DAX UDF VAL vs EXPR: Prevent Timeouts and Wrong Totals.

Perguntas frequentes

Qual é a diferença entre VAL e EXPR no DAX?

VAL captura um valor fixo no momento da invocação da função. EXPR avalia uma expressão dinamicamente, adaptando-se a mudanças no contexto de filtro ou de linha.

Quando devo usar VAL?

Use VAL quando precisar de um valor numérico constante. Ele é ideal para cenários em que a entrada não muda conforme o contexto, como limites (thresholds).

Quando EXPR é a melhor escolha?

Escolha EXPR quando seus cálculos precisarem responder a condições de dados em mudança. Ele permite avaliações dinâmicas baseadas em interações do usuário ou em filtros.

Posso combinar VAL e EXPR na mesma função?

Sim, você pode combinar VAL e EXPR em uma função. Basta garantir que os use de forma adequada, conforme precise de valores fixos ou de expressões dinâmicas.

Como posso melhorar o desempenho das minhas UDFs em DAX?

Para melhorar o desempenho, minimize cálculos complexos dentro das funções. Use VAL para valores estáticos e envolva as avaliações de EXPR em CALCULATE para gerenciar as transições de contexto de forma eficaz.

Quais erros comuns devo evitar com UDFs em DAX?

Evite o uso incorreto de tipos de dados, sintaxe incorreta e a falta de tratamento de erros. Esses erros podem gerar resultados imprecisos e prejudicar o desempenho do seu modelo de dados.

Existe uma forma de testar minhas UDFs em DAX?

Sim, você pode testar suas UDFs em DAX criando relatórios de exemplo ou usando o DAX Studio. Isso permite avaliar o desempenho e garantir a precisão dos cálculos.

Onde posso encontrar mais recursos sobre UDFs em DAX?

Você pode encontrar recursos adicionais sobre UDFs em DAX na documentação oficial da Microsoft, em cursos online e em fóruns da comunidade. Essas plataformas oferecem insights valiosos e exemplos.

Entities in this article

Azure Functions DAX user-defined functions (UDFs) Power BI Data analyst Filter context

Related articles

RSS