Olá pessoal!

Este é um post atípico e que tem o intuito de fixar conceitos quando falamos da linguagem DAX.

Não será uma seção frequente aqui, mas terá uma certa recorrência. A ideia aqui é trazer algumas funções autorais e explicar para revisarmos alguns conceitos que podem acabar caindo no esquecimento. 

Serão sempre posts curtos que e nem todos irão para o blog. São mais voltados aqui para o Instagram mesmo. Então, inaugurando esse novo formato de post quero mostrar um tipo de situação que encontrei nos estudos sobre contextos (aqui e aqui).

O CASO

Estava tentando criar uma coluna calculada que me retornasse para cada loja, a quantidade de produtos vendidos de acordo com uma marca e categoria.

Abaixo a função e o resultado e cada linha é uma loja.

Como podemos ver, a contagem não retornou um resultado condizente e mesmo jogando em um contexto de filtro, o resultado não se alterou. Veja.

Podemos pensar que há algum problema na forma como a função foi elaborada ou, se há uma relação entre as duas tabelas. Bem, direto não há um relacionamento entre Store – Product porém, ambas se “cruzam” na tabela fato Store Sales. E é aqui que resolvemos o problema.

Repare que a direção do relacionamento entre as duas dimensões apontam para a fato mas possuem um sentido oposto. Mesmo utilizando a função relatedtable com filter, elas não conseguem filtrar corretamente na tabela produto.

Agora, se eu mudo a direção do relacionamento entre a Product – StoreSales, veja o resultado.

NOTA: Clique duas vezes na seta e em “Cross filter direction” altere para both. 

Notem que o código é exatamente o mesmo e o que mudou de um para o outro foi somente a direção do relacionamento.

Desta forma, as funções tabulares filter e relatedtable conseguem acessar corretamente a tabela Product, que por sua vez está relacionada com ProductCategory e o filtro funciona perfeitamente.

E um dos fatores que torna essa expressão criada viável é justamente o uso da função relatedtable que é bidirecional e consegue atuar tanto na “tabela origem” quanto na “destino”. Por isso a função filter consegue realizar o filtro em ProductCategory.

Quando as direções são opostas, não acontece. Apenas um count simples do total encontrado para as duas variáveis que utilizamos na filtragem.

Até mesmo a coluna calculada no filter context está com o seu resultado condizente. 

CONCLUSÃO

Sempre que forem pensar em criar uma coluna calculada ou medida, analisem a direção do relacionamento e imaginem o que pode e o que não pode acontecer quando as relações entre tabelas possuem sentidos diferentes.

E ainda que possam tentar criar uma medida, ela também é afetada por esta regra de direção.

Espero que tenham gostado deste formato e os ajude a fixar os conteúdos!

Espero que gostem, Deus os abençoe!

Saúde!