(+351) 21 24 10006  ·  info@bconcepts.pt
Carnaxide, Lisboa

DP-600: implementar role-playing tables em modelos semânticos

João Barros 20 de October de 2026 4 min de leitura

Vou ensinar como implementar role-playing tables (tabelas que representam a mesma entidade em diferentes papéis, por exemplo, OrderDate e ShipDate a apontarem para a mesma dimensão de Data) em modelos semânticos no contexto do exame DP-600. Esta competência é importante porque melhora a modelização temporo-relacional e a qualidade das análises sem duplicar dados ou criar ambiguidade nas métricas.

O que precisas de saber

Uma role-playing table permite usar uma única dimensão (por exemplo, uma dimensão de Data) para múltiplos papéis no modelo de dados. Em vez de duplicar a tabela (o que aumenta a manutenção e o risco de inconsistências), criam-se várias relações entre a tabela factual e a mesma dimensão, cada relação representando um papel distinto (OrderDate, ShipDate, PaymentDate, etc.).

Exemplo conceptual: tens uma tabela Orders com colunas OrderDateKey e ShipDateKey. Em vez de criar duas tabelas Date_Order e Date_Ship, ligas ambas as chaves à mesma tabela Date. Depois controlas qual relação está activa para cálculo de medidas ou usas funções DAX para forçar o contexto temporal desejado.

Como funciona na prática

Passos práticos para implementar role-playing tables num modelo semântico no Power BI/Fabric (Model view ou Semantic Model):

  1. Preparar a dimensão: garante que a tabela Date tem uma chave única (DateKey) e colunas necessárias (Date, Year, Month, FiscalYear...).
  2. Ligar as chaves: cria relações entre Orders[OrderDateKey] → Date[DateKey] e Orders[ShipDateKey] → Date[DateKey]. Tipicamente apenas uma dessas relações fica activa por defeito (active relationship).
  3. Decidir relações activas/inactivas: mantém apenas uma relação activa (por norma a mais usada, ex.: OrderDate). As outras ficam inactivas para evitar ambiguidade no momento em que o motor de cálculo resolve filtros automaticamente.
  4. Medidas explícitas com USERELATIONSHIP: para usar a relação inactiva numa medida específica, utiliza USERELATIONSHIP em DAX para activar temporariamente essa relação durante o cálculo.

Exemplo DAX de medida que usa ShipDate (relação inactiva):

Sales by Ship Date =
CALCULATE(
    SUM(Orders[SalesAmount]),
    USERELATIONSHIP(Orders[ShipDateKey], Date[DateKey])
)

Notas importantes:

  • Se precisares de comparar períodos com diferentes papéis (ex.: vendas por OrderDate vs entregas por ShipDate), cria medidas separadas que explicitamente usem a relação desejada.
  • Em modelos grandes, usar muitas relações inactivas pode complicar a manutenção; documenta-as e padroniza nomes de medidas para clarificar o papel temporal usado.

Erros comuns

1) Tornar todas as relações activas: criar múltiplas relações activas entre a mesma tabela pode causar ambiguidade e erros de modelização — a maioria das ferramentas não permite múltiplas relações activas para a mesma coluna-chave e isso conduz a resultados inesperados se for manipulado de forma imprudente.

2) Não usar USERELATIONSHIP quando necessário: confiar na relação activa apenas pode levar a métricas incorrectas quando se pretende analisar por um papel temporal alternativo. Sempre que a relação relevante é inactiva, usa USERELATIONSHIP ou alternativas (como TREATAS) nas medidas.

3) Duplicar a dimensão sem necessidade: criar múltiplas cópias físicas da tabela Date aumenta o custo de armazenamento e complexifica actualizações/refresh; só se justifica em cenários muito específicos (ex.: performance extrema ou requisitos de segurança separados).

Como praticar

Pratica este padrão num pequeno projecto: importa uma tabela Orders (com OrderDateKey, ShipDateKey) e uma Date table. Cria as duas relações com Date, mantém uma activa e cria pelo menos duas medidas de soma (Sales by Order Date e Sales by Ship Date) usando CALCULATE + USERELATIONSHIP. Valida os resultados com visuais de linha por mês e compara os comportamentos.

Recursos oficiais gratuitos para treino:

  • Practice Assessment oficial da Microsoft (gratuito) — usa-o para avaliar as tuas lacunas; não é um substituto para prática.
  • Study guide oficial do exame DP-600 na Microsoft Learn (gratuito) — consulta as secções sobre modelização semântica e DAX.

Em resumo

  • Role-playing tables permitem usar a mesma dimensão para múltiplos papéis sem duplicar dados.
  • Mantém apenas uma relação activa e usa USERELATIONSHIP para medidas que necessitem de relações inactivas.
  • Evita duplicações desnecessárias da dimensão; documenta relações e medidas para manter a clareza.
  • Pratica com um modelo Orders + Date e valida as medidas em visuais temporais; usa os recursos oficiais da Microsoft para complementar o estudo.