Sobre Mim Projetos Artigos Experiência Formação Contato
Currículo PDF Mudar para Inglês 🇺🇸
Voltar para Artigos

Como implementar RLS dinâmico no Power BI com múltiplas condições (sem complicar seu modelo)

Mar 2026 8 min de leitura Power BI & DAX
RLS Dinâmico no Power BI

Tech Stack Explorada

Power BI
DAX
Data Modeling

Se você trabalha com Power BI e já precisou restringir dados com base em mais de uma dimensão ao mesmo tempo, sabe o quanto isso pode ser um desafio.

O método clássico de RLS (Row-Level Security) com relacionamentos diretos funciona bem para uma restrição simples (como filtrar apenas por Marca). Mas ele não funciona quando precisamos aplicar múltiplas condições independentes em diferentes tabelas de dimensão.

O Desafio Real

Imagine este cenário:

O usuário alex@empresa.com deve visualizar apenas: as marcas Nike e Adidas e os continentes Europa e Ásia.

Se aplicamos o RLS clássico, conseguimos filtrar por Marca ou Continente... mas não pelos dois ao mesmo tempo de forma independente.

Tentar resolver com múltiplos relacionamentos ativos gera ambiguidade no modelo ou resultados incorretos.

A Solução: RLS Dinâmico com Tabela de Permissões Desconectada

A estratégia é simples e poderosa: criamos uma tabela de permissões sem relacionamentos ativos com o modelo principal. Usamos expressões DAX dentro de uma única Role para aplicar filtros em cada dimensão.

Isso transforma a tabela de permissões em um catálogo central de regras, que pode ser consultado para qualquer dimensão.

Estrutura da Tabela de Permissões (RLS_Permissoes)

Sua tabela precisa ter pelo menos 3 colunas. Ela ficará estruturada da seguinte forma:

Email Tipo_Restricao Valor_Permitido
alex@empresa.com Marca Nike
alex@empresa.com Marca Adidas
alex@empresa.com Continente Europa
alex@empresa.com Continente Ásia
ana@empresa.com Marca Puma
ana@empresa.com Continente América do Sul

Detalhe importante: não crie relacionamentos ativos dessa tabela com outras no modelo.

Filtros DAX Aplicados Diretamente nas Dimensões

Exemplo para Marca:

DAX
[Marca] IN 
SELECTCOLUMNS(
    FILTER(
        'RLS_Permissoes',
        'RLS_Permissoes'[Email] = USERPRINCIPALNAME()
        && 'RLS_Permissoes'[Tipo_Restricao] = "Marca"
    ),
    "Marcas Permitidas", [Valor_Permitido]
)

Exemplo para Continente:

DAX
[Continente] IN 
SELECTCOLUMNS(
    FILTER(
        'RLS_Permissoes',
        'RLS_Permissoes'[Email] = USERPRINCIPALNAME()
        && 'RLS_Permissoes'[Tipo_Restricao] = "Continente"
    ),
    "Continentes Permitidos", [Valor_Permitido]
)

Exemplo genérico para qualquer outra dimensão:

DAX
[NomeDaColuna] IN 
SELECTCOLUMNS(
    FILTER(
        'RLS_Permissoes',
        'RLS_Permissoes'[Email] = USERPRINCIPALNAME()
        && 'RLS_Permissoes'[Tipo_Restricao] = "NomeDaDimensao"
    ),
    "Valores Permitidos", [Valor_Permitido]
)

Passo a Passo Resumido de Implementação

  1. Crie a tabela RLS_Permissoes (Excel, SQL Server, SharePoint, Dataverse etc.).
  2. Importe no Power BI → mantenha-a desconectada do modelo.
  3. Crie uma única Role (RLS_Dinamico).
  4. Aplique os filtros DAX diretamente em cada dimensão relevante.
  5. Teste no Power BI Desktop usando View as Roles.
  6. Publique no Power BI Service.
  7. Atribua usuários à Role.
  8. Valide no ambiente real com os usuários finais.

Exemplo Prático Aplicado

Imagine um relatório global de vendas.

Com esse modelo:

Vantagens

Pontos de Atenção

Boas Práticas

Insight Final

O RLS dinâmico com múltiplas condições é como um porteiro inteligente: cada usuário só vê o que está autorizado, sem a necessidade de criar relatórios separados ou modelos super complicados.

Esse tipo de implementação está cada vez mais valorizado em empresas que priorizam governança, segurança e escalabilidade em seus relatórios.

Gostou deste insight?

Compartilhe conhecimento com sua rede.

Tem alguma dúvida ou precisa de consultoria?

Entrar em contato