Power BI Esconder Abas Automaticamente usando RLS

Recentemente recebi um desafio de um camarada lá no Linkedin, que disse o seguinte:

“quero usar RLS pra ocultar as “abas”. Dependendo da pessoa, quer mostrar uma aba ou não…”.

Nota: abas ou páginas são sinônimos nesse post.

Esse é um assunto bastante complexo e nativamente o Power BI não resolve isso, então tem que ser no work around. Inclusive, pra quem quiser saber mais de RLS sugiro ler meu post sobre isso, aqui: https://powerbixpert.com/2020/08/20/power-bi-rls/.

O Problema

São dois os problemas nesse cenário. Primeiro você precisa modelar os dados de forma que você consiga dizer quais usuários acessam quais páginas; e Segundo como fazer pra que apenas as páginas desejadas sejam visíveis e acessíveis pelos usuários.

Vale notar que pra que esse work around funcione todas as abas do relatório precisam estar como escondidas (hide).

Mão na massa

Modelo de dados

Então, pra resolver o primeiro ponto, que é do modelo de dados, você precisa de uma tabela de páginas, de uma tabela de usuários e de uma tabela de usuários_paginas.

tabelas

Com isso já dá pra ver que, Pedro Carvalho tem acesso em todas as páginas, enquanto que Adele e Pradeep tem acesso apenas nas páginas 1 e 2, home e geral, respectivamente.

modelo

Importante: o relacionamento entre USER_PAGINA e PAGINAS que tem sentindo “ambos” deve ser habilitador a opção “apply security filter in both directions” pra que roles de RLS sejam transmitidas nesse relacionamento.

Acesso às páginas

Pra resolver o segundo ponto, de visualização e acesso às páginas, existem algumas formas que são: ou você usa um slicer dropdown com single select na página, que é o que eu usei, e a partir da seleção desse dropdown o usuário acessa a página; ou então você cria um botão pra cada página e esconde os botões de acordo com acesso do usuário, que eu acho mais deselegante porque o botão fica transparente, mas dá pra ver que tem algum objeto ali…

Pra criar esse slicer basta criar um slicer com a coluna de nome das páginas e criar uma medida que pega o nome que tá no slicer. Então importante: o nome da aba tem que ser exatamente igual ao que estiver no slicer. Boa prática é colocar esse slicer como single select.

slicer

Depois, criar um botão que pega o valor da medida e passa como argumento do Page Navigation.

botão com page navigation

Então quando o slicer estiver com a página GERAL selecionada, ao clicar no botão GO o relatório irá pra aba GERAL.

RLS Role

Por fim, é preciso criar uma role do RLS, pra saber como, leia aqui. No caso aqui o RLS ficou assim:

Testando

Com tudo pronto, agora é testar. Antes vamos lembrar das permissões que temos:

permissões

Então se eu pegar o usuário Adele, só vão aparecer 2 páginas pra mim, vamos ver.

Vamos tentar agora com usuário Pedro:

Referências

https://www.daytodatastuff.co.uk/blog/dynamically-hide-a-page-in-power-bi

https://www.linkedin.com/pulse/page-tab-level-security-conditional-navigation-power-bi-a%25C5%259F%25C4%25B1ro%25C4%259Flu/

https://www.youtube.com/watch?v=u8O2wqZ1IGk – Dynamically Filter Page Navigation Per User With Row Level Security (RLS)

Published by Pedro Carvalho

Apaixonado por análise de dados e Power BI

2 thoughts on “Power BI Esconder Abas Automaticamente usando RLS

  1. Olá! achei muito interessante essa modo de fazer RLS. Fiz aqui num painel meu, e deu certo em partes. O filtro por página funcionou na navegação página de navegação, lá ele só vê as páginas que selecionei pra ele corretamente. Entretanto, o usuário com acessos restritos ainda consegue navegar “cladestinamente” para outras páginas que ele não teria acesso, através das guias de página normalmente.
    Você sabe como resolver?

    Like

    1. Difícil dizer, compartilha um arquivo power bi desktop pra gente tentar entender melhor e ver como podemos resolver. E como é que ele faz pra navegar “clandestinamente” ?

      Like

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: