Power BI Role Playing Dimensions

No exame da Microsoft o termo “role-playing dimensions” aparece em apenas um tópico:

  • define role-playing dimensions

É um tema importante pra ser estudado porque combina muito com outros dois conceitos importantes, que são os das tabelas de Data (dimensão de data, ou dimensão calendário) e assunto de relacionamentos ativos/inativos e uso de DAX para controle deles com USERELATIONSHIP.

Definindo Role Playing Dimensions

A Microsoft define Role Playing Dimension (RPD) como uma dimensão que tem vários relacionamentos com uma tabela fato, o que significa que a mesma dimensão pode ser usada para filtrar várias colunas ou tabelas de dados da mesma tabela fato.

No caso da imagem abaixo, CALENDAR é uma dimensão do tipo Role Playing Dimension, pois se relaciona várias vezes com a fato SALES.

Importante: quando uma dimensão se relaciona com duas fatos diferentes ela não é uma Role Playing Dimension! Ela é uma Role Playing Dimension por se relacionar várias vezes com a mesma fato. Quando uma dimensão se relaciona com duas fatos diferentes ela na verdade é uma CONFORMED DIMENSION.

Existem duas formas de se implementar RPD, uma é duplicando as tabelas, e a outra é utilizando vários relacionamentos e ativar esses relacionamentos com DAX. Na imagem acima temos um caso de relacionamentos inativos que precisaríamos ativar com DAX , e na imagem abaixo temos um caso onde as tabelas de data foram duplicadas.

Como pode ver, temos duas formas de implementar Role Playing Dimensions e cada uma delas funciona de uma forma diferente, com vantagens e desvantagens. O metodo escolhido geralmente vai depender de como seu cliente quer o usar o report.

Eu, particularmente, prefiro a forma de relacionamentos ativos / inativos. Continue lendo que explico o motivo.

Role Playing Dimensions na prática

Perceba que no meu modelo a dimensão DATE se relaciona com SALES, um relacionamento 1:N. Só que, dá forma que está aí, eu só consigo criar gráficos, informações baseadas entre DATE e SALES na role de ORDERDATE, porque o meu relacionamento foi criado usando esses campos.

Mas… E se eu quiser criar uma gráfico de SALES por orderDate e também por dueDate ou shipDate? Porque eu sei que SALES tem vários tipos diferentes de datas… Como resolver isso?

Bem, nesse caso a única forma é criando mais relacionamentos entre as duas tabelas, no entanto, esses relacionamentos ficarão inativos, porque o Power BI só permite um relacionamento ativo por vez, de forma que pra tratar isso precisaremos criar measures que ativem esses relacionamentos. O resultado vai ser um modelo assim:

Voltando ao nosso objetivo: “E se eu quiser criar uma gráfico de SALES por orderDate e também por dueDate”. Agora eu consigo, mas antes preciso criar uma measure, assim:

Sales Amount DueDate =
CALCULATE(
SUM(SALES[SalesAmount]),
USERELATIONSHIP(SALES[DueDateKey], ‘DATE'[DateKey]))

Para que essa measure possa ser criada é mandatório que exista uma relação criada, mesmo que inativa. Se quiser adicionar ShipDate é só criar mais uma relação e criar mais uma medida.

Ok, entendi, mas e se eu não quiser criar medidas? Consigo tratar isso de alguma forma? Não… Você pode criar várias tabelas de DATE e relacionar com SALES, mas com essa abordagem é impossível determinar um eixo único de data.

Vou duplicar a tabela DATE e vou chamar ela de SHIPDATE, pra isso vou criar uma nova tabela com DAX, assim SHIPDATE = ‘DATE’.

Perceba que, minha measure de Sales Amount DueDate já era, porque deletei minha relação inativa. O resultado dessa abordagem você pode ver na imagem abaixo. Perceba que foi preciso criar duas tabelas distintas, que tem slicers distintos, é bastante complicado pra um usuário usar esse modelo nesse cenário de DATA, mas existem cenários onde essa abordagem tem um resultado melhor do que a abordagem anterior, por exemplo em casos onde você precisa garantir bom funcionamento de Q&A, ou quando tem RLS aplicado a uma tabela dimensão que é uma RPD (porque RLS não funciona com USERELATIONSHIP).

De todas as referências, recomendo fortemente que leiam essa: https://docs.microsoft.com/en-us/power-bi/guidance/relationships-active-inactive

Referências

http://leandrobarbieri.blogspot.com/2019/05/role-play-dimensions-em-modelos.html
https://www.biinsight.com/side-by-side-role-playing-dimensions-in-power-bi/
https://www.biinsight.com/role-playing-dimensions-in-power-bi/
https://docs.microsoft.com/en-us/learn/modules/design-model-power-bi/4-dimensions
https://docs.microsoft.com/en-us/power-bi/guidance/star-schema#role-playing-dimensions
https://docs.microsoft.com/en-us/power-bi/guidance/relationships-active-inactive
https://radacad.com/userelationship-or-role-playing-dimension-dealing-with-inactive-relationships-in-power-bi
https://docs.microsoft.com/en-us/dax/userelationship-function-dax
https://www.youtube.com/watch?v=2BxaUXlx3K4 – Power BI Desktop And Role-Playing Dimensions: Can you do it?
https://www.youtube.com/watch?v=LfVDUiU8vaU – How to solve Inactive Relationship Problem with Role Playing Dimensions in Power BI

Published by Pedro Carvalho

Apaixonado por análise de dados e Power BI

Deixe uma resposta

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: