Pular para conteúdo

Aula 18 - Expressões DAX Avançadas e Cálculos Temporais ⏱️

Objetivo Pedagógico

Objetivo: Domínio da linguagem DAX (Data Analysis Expressions): Modificação de contexto com CALCULATE, transição de contexto, funções iteradoras (X-Functions) e cálculos de Time Intelligence (YTD, YoY).


📑 1. Fundamentos Teóricos & Análise Técnica

A linguagem DAX (Data Analysis Expressions) opera sob um modelo de execução único baseado em Contextos: 1. Contexto de Linha (Row Context): Existe nativamente em colunas calculadas ou é criado por funções iteradoras (SUMX, AVERAGEX). Avalia a linha corrente individualmente. 2. Contexto de Filtro (Filter Context): Conjunto de filtros ativos impostos por fatiadores de tela, linhas e colunas de matrizes e filtros de página. 3. A Função CALCULATE: É a função mais importante e poderosa de todo o ecossistema DAX. Ela é a única função capaz de modificar ou substituir o Contexto de Filtro e realizar a Transição de Contexto (transformando um contexto de linha em um contexto de filtro equivalente).

Recursos temporais clássicos (Time Intelligence): - YTD (Year-To-Date): Acumulado do ano atual (TOTALYTD ou DATESYTD). - YoY (Year-over-Year): Comparação de crescimento percentual em relação ao mesmo período do ano anterior (SAMEPERIODLASTYEAR).

📐 Arquitetura Conceitual & Diagrama de Fluxo

graph TD
    MatrixRow["Linha da Matriz: 'Categoria Eletrônicos'"] --> FilterCtx["Contexto de Filtro Ativo"]
    FilterCtx --> Calculate["CALCULATE( [Faturamento Total], SAMEPERIODLASTYEAR(...) )"]
    Calculate --> ShiftFilter["Contexto Modificado: 'Ano Anterior (2025)'"]
    ShiftFilter --> VertiPaq["Motor VertiPaq Avalia Dados em Memória"]
    VertiPaq --> Result["Resultado: Comparativo YoY (%)"]
    style MatrixRow fill:#e1f5fe,stroke:#01579b
    style Calculate fill:#fff3e0,stroke:#e65100
    style Result fill:#e8f5e9,stroke:#2e7d32

🔍 Pilares e Diretrizes Técnicas

Nesta unidade, aprofundamos os seguintes conceitos fundamentais: - Transição de Contexto: Ocorre quando uma medida DAX é chamada dentro de uma função iteradora, ativando um CALCULATE implícito. - Função ALL e ALLEXCEPT: Remoção deliberada de filtros para calcular participações percentuais do total geral (Share of Total). - Funções Iteradoras com 'X': Execução de cálculos linha a linha (SUMX(Tabela, Qtd * Preco)) antes da agregação final. - Variáveis com VAR e RETURN: Melhoria drástica de legibilidade e performance através da avaliação única de subexpressões em cache.


🛠️ 2. Implementação Prática em Data Analysis Expressions (DAX) e Inteligência Temporal

Abaixo está a implementação técnica de referência, estruturada com padrões de engenharia de software e foco em robustez:

// time_intelligence_measures.dax (Medidas DAX Avançadas de Crescimento YoY)
// 1. Faturamento Base
Faturamento Total = SUM(f_Vendas[Valor_Liquido])

// 2. Faturamento no Mesmo Período do Ano Anterior (LY)
Faturamento Ano Anterior = 
CALCULATE(
    [Faturamento Total],
    SAMEPERIODLASTYEAR(d_Calendario[Date])
)

// 3. Crescimento Percentual Ano contra Ano (YoY %)
Crescimento YoY % = 
VAR FaturamentoAtual = [Faturamento Total]
VAR FaturamentoPassado = [Faturamento Ano Anterior]
RETURN
    DIVIDE(
        FaturamentoAtual - FaturamentoPassado,
        FaturamentoPassado,
        0 // Retorno seguro contra divisão por zero
    )

💡 Análise Passo a Passo do Código

  1. Reutilização de Medidas: A medida [Faturamento Total] é reutilizada dentro das fórmulas derivadas sem duplicação de código.
  2. Modificação com SAMEPERIODLASTYEAR: A função desloca o filtro temporal da data atual exatamente 365 dias para trás.
  3. Divisão Segura com DIVIDE(): Evita erros visuais de #ERROR quando o ano anterior não possui registros de vendas.

🎯 3. Próximos Passos & Sequência Didática