Módulo 8: DAX intermediário: filtros, relações e ranking

Aula 2 de 4

VALUES, DISTINCT, RELATED e RELATEDTABLE

Navegando pelo modelo dentro do DAX.

17 minutos de leitura


VALUES e DISTINCT

As duas devolvem os valores únicos de uma coluna no contexto atual. A diferença: VALUES inclui a linha em branco criada por chaves órfãs; DISTINCT não.

DAXUsos mais comuns de VALUES
-- Detectar se há apenas um valor selecionadoTítulo Dinâmico =IF(    HASONEVALUE( dProduto[Categoria] ),    "Análise de " & VALUES( dProduto[Categoria] ),    "Todas as categorias") -- Forma moderna e segura da mesma coisaTítulo Dinâmico 2 ="Análise de " & SELECTEDVALUE( dProduto[Categoria], "todas as categorias" ) -- Contar categorias presentes no contextoQtd Categorias = COUNTROWS( VALUES( dProduto[Categoria] ) )

RELATED e RELATEDTABLE

FunçãoDireçãoOnde usar
RELATED(coluna)Do lado muitos para o lado umColuna calculada na fato buscando atributo da dimensão
RELATEDTABLE(tabela)Do lado um para o lado muitosColuna calculada na dimensão agregando a fato
DAXOs dois lados da relação
-- Coluna em fVendas (lado muitos): puxa um único valor da dimensãoCusto Padrão = RELATED( dProduto[CustoPadrao] ) -- Coluna em dCliente (lado um): agrega a fato relacionadaQtd Pedidos do Cliente = COUNTROWS( RELATEDTABLE( fVendas ) )Última Compra          = MAXX( RELATEDTABLE( fVendas ), fVendas[Data] )

LOOKUPVALUE: quando não há relacionamento

DAXBuscando valor sem relacionamento
Meta do Vendedor =LOOKUPVALUE(    fMetas[ValorMeta],    fMetas[Vendedor], fVendas[Vendedor],    fMetas[AnoMes],   FORMAT( fVendas[Data], "yyyy-mm" ),    0                              -- valor quando não encontra)

Funções de informação

DAXBlindando medidas contra contextos inesperados
Comentário Automático =VAR Cresceu = [Var. YoY %] > 0RETURNSWITCH( TRUE(),    ISBLANK( [Receita Total] ),          "Sem movimento no período",    NOT HASONEVALUE( dProduto[Produto] ), "Selecione um produto para ver o detalhe",    ISINSCOPE( dProduto[Produto] ) && Cresceu,        SELECTEDVALUE( dProduto[Produto] ) & " cresceu " & FORMAT( [Var. YoY %], "0.0%" ),    SELECTEDVALUE( dProduto[Produto] ) & " caiu " & FORMAT( ABS([Var. YoY %]), "0.0%" ))

Exercício prático

Crie um título dinâmico que muda conforme a seleção do usuário (1 categoria, várias, ou nenhuma) e aplique-o com 'Formatação condicional → Título' em um visual.