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
- Reutilização de Medidas: A medida
[Faturamento Total]é reutilizada dentro das fórmulas derivadas sem duplicação de código. - Modificação com SAMEPERIODLASTYEAR: A função desloca o filtro temporal da data atual exatamente 365 dias para trás.
- Divisão Segura com DIVIDE(): Evita erros visuais de
#ERRORquando o ano anterior não possui registros de vendas.
🎯 3. Próximos Passos & Sequência Didática
-
Slides da Aula
-
Quiz de Fixação
-
Exercícios Práticos
-
Desafio de Projeto