Usando TREATAS ao invés de IN no DAX

Estava pesquisando sobre funções do DAX e encontrei uma maneira de usar TREATAS o lugar de IN.  Pode-se dizer que aumenta, ou não, a legibilidade do código.  Por isso fiz o post abaixo para podermos examinar os pós e os contras.

O código abaixo, gera a tabela BRANDS com duas marcas.

EVALUATE
FILTER (
ALL ( 'Product'[Brand] ),
'Product'[Brand] IN { "Contoso", "Fabrikam" }
)

Você pode obter o mesmo resultado usando TREATS de forma criativa:

EVALUATE
TREATAS ( { "Contoso", "Fabrikam" }, 'Product'[Brand] )

Quando usados em uma medida, as duas sintaxes são muito mais parecidas.

Products Special Brands :=
CALCULATE (
DISTINCTCOUNT ( 'Product'[Color] ),
'Product'[Brand] IN { "Contoso", "Fabrikam" }
)

Products Special Brands 2 :=
CALCULATE (
DISTINCTCOUNT ( 'Product'[Color] ),
TREATAS ( { "Contoso", "Fabrikam" }, 'Product'[Brand] )
)

As duas medidas acima criam esse relatório simples.

 

 

Analisando os planos de consulta das duas opções, no SQL Server 20016, desempenho resultante é muito semelhante, provavelmente deveria ter usado um conjunto de dados maior para um teste mais efetivo.

Foram feitas outras consultas usando KEEPFILTERS, mas o plano de consulta é mais caro usando TREATAS em vez da sintaxe IN mais simples e mais intuitiva.
A conclusão que chegamos é que o TREATAS deve ser usado apenas para transferir o filtro no relacionamento “virtual”, e não como alternativa aos filtros tradicionais que são melhor suportados para a sintaxe DAX comum.

Podem testar as mesmas consultas neste Power BI workbook.

TREATAS X IN (3 downloads)
Fonte: sqlbi

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *