Módulo 9: DAX avançado: iteradores, tabelas virtuais e metas

Aula 1 de 4

Iteradores: a família X

SUMX, AVERAGEX, MAXX, RANKX, CONCATENATEX — e o custo real de iterar.

18 minutos de leitura


Um iterador percorre uma tabela linha a linha, avalia uma expressão em cada linha e agrega o resultado. É o que permite cálculos que a agregação simples não alcança.

DAXQuando SUMX é obrigatório
-- Não existe coluna de receita: ela nasce da multiplicação linha a linhaReceita = SUMX( fVendas, fVendas[Quantidade] * fVendas[PrecoUnitario] ) -- Cálculo com regra por linhaReceita Líquida =SUMX(    fVendas,    fVendas[Quantidade] * fVendas[PrecoUnitario] * ( 1 - fVendas[PercDesconto] )) -- Margem por linha, considerando o custo vigente na dataMargem Real =SUMX(    fVendas,    VAR Preco = fVendas[PrecoUnitario]    VAR Custo = RELATED( dProduto[CustoPadrao] )    RETURN fVendas[Quantidade] * ( Preco - Custo ))

Iterando dimensões em vez da fato

DAXMédia de receita por loja (e não média das linhas)
-- ERRADO: média das linhas de vendaMédia Errada = AVERAGE( fVendas[Receita] ) -- CERTO: média do total de cada lojaReceita Média por Loja =AVERAGEX( VALUES( dLoja[Loja] ), [Receita Total] )

Outros iteradores muito úteis

DAXMINX, MAXX, CONCATENATEX, COUNTX
Melhor Mês do Ano =MAXX( VALUES( dCalendario[AnoMes] ), [Receita Total] ) Nome do Melhor Mês =VAR Melhor = [Melhor Mês do Ano]RETURNCONCATENATEX(    FILTER( VALUES( dCalendario[AnoMes] ), [Receita Total] = Melhor ),    dCalendario[AnoMes], ", ") Categorias Selecionadas =CONCATENATEX( VALUES( dProduto[Categoria] ), dProduto[Categoria], " • ", dProduto[Categoria], ASC ) Dias com Venda = COUNTX( VALUES( dCalendario[Date] ), IF( [Receita Total] > 0, 1 ) )

Exercício prático

Crie as medidas Receita Média por Loja e Melhor Mês do Ano. Depois escreva um texto dinâmico com CONCATENATEX mostrando quais categorias estão selecionadas no momento.