Erick Reis • 14 nov 2023 • Microsoft Power BI
Quando estamos trabalhando com Power BI, especificamente na parte de cálculos (DAX), muitas vezes nos deparamos com funções que fazem trabalhos parecidos e que tem nomes parecidos, mas que o método de utilização é diferente.
Como por exemplo, as funções RELATED e RELATEDTABLE.
Mas qual a diferença entre elas?
A função RELATED e sua função complementar RELATEDTABLE são duas funções importantes em Dax, são utilizadas com frequência e desempenham um papel fundamental quando se usa o contexto de linha com relacionamentos. Nós usamos o RELATED quando analisamos uma tabela e dentro do contexto de linha, buscamos acessar as linhas das outras tabelas que estão relacionadas.
Quando temos um contexto de linha apresentado, podemos acessar o valor de qualquer tabela que sendo repetida(iterada)
RELATED – Permite que você busque uma coluna presente em outra tabela para o seu cálculo atual (Geralmente essa coluna está na tabela dimensão, é como se você estivesse pegando o conteúdo da tabela dimensão e trazendo para um contexto de cálculo que está acontecendo na tabela Fato).
RELATEDTABLE - Já a RELATEDTABLE trabalha no sentido inverso, enquanto a função RELATED pega as informações da tabela dimensão e traz para a tabela Fato para que um cálculo possa ser realizado, a função RELATEDTABLE tende a levar informações da tabela Fato para a Tabela dimensão (Trabalhando no sentido inverso da RELATEDTABLE).
Por exemplo, vimos que o caminho pela qual a informação percorre tende a ser sempre da tabela dimensão para a tabela fato.
No exemplo vamos utilizar nossa tabela Dim Produtos:
Digamos que você queira através da tabela Dim Produtos, saber quantas vendas cada produto teve e criar uma coluna mostrando esses resultados para nós.
Mas a informação que especifica a quantidade de produtos vendidos está na nossa tabela Fato Vendas:
É justamente nesse momento que entra a função RELATEDTABLE para trazer a coluna de quantidade (tabela Fato) para a tabela Dim Produtos (Dimensão):
Por exemplo, como meu objetivo é saber a quantidade de vendas que cada produto teve e levando em conta que cada linha da tabela Fato representa uma venda, se contarmos quantas linhas tem na tabela Fato consequentemente chegamos no número de vendas por produto.
É exatamente utilizando essa lógica que criarei nossa coluna calculada utilizando uma função de contagem de linhas chamada COUNTROWS:
A função COUNTROWS conta quantas linhas você tem em uma tabela (mas sem perder o contexto da linha, ou seja, ele conta sabendo qual produto foi vendido, em qual data etc.)
E aqui como estamos tentando realizar um cálculo dentro da tabela dimensão envolvendo informações da tabela fato, vamos precisar utilizar a função RELATEDTABLE para que ele consiga realizar essa contagem, caso contrário o resultado é o seguinte:
Notem que sem a função RELATEDTABLE, ele retorna o mesmo valor para todos os produtos (isso porque por si só a função COUNTROWS não consegue pegar as informações da tabela Fato e trazer para a tabela dimensão).
Agora quando utilizamos junto com a COUNTROWS nossa função RELATEDTABLE:
Qtde Prod Vendidos =
COUNTROWS(RELATEDTABLE('Fato Vendas'))
Notem que sem a função RELATEDTABLE, ele retorna o mesmo valor para todos os produtos (isso porque por si só a função COUNTROWS não consegue pegar as informações da tabela Fato e trazer para a tabela dimensão).
De uma forma direta, enquanto a função RELATED tende a trazer informações de uma tabela dimensão para a tabela Fato (Claro que a aplicação pode variar), a RELATEDTABLE faz justamente o oposto; ela traz as informações da tabela Fato para a tabela dimensão (como uma espécie de filtro bidirecional.)