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!