Power BI — Segurança em Nível de Linha (Row Level Security)

Renato Haddad
6 min readMar 10, 2020

--

Recentemente dei uma consultoria numa empresa com o seguinte cenário: Toda semana o responsável pelo BI recebe os dados, aplica um ETL e precisa compartilhar o relatório (contas PRO) com cerca de 8 executivos da empresa. Até aí é fácil, basta compartilhar o relatório e pronto. Porém, cada executivo DEVE visualizar somente os dados dele, e o Diretor pode visualizar todos.

Diante deste cenário, a pessoa aplica os filtros pelo próprio painel de filtros e publica num workspace do respectivo executivo. Repete este passo 8 vezes, ou seja, muito trabalhoso e manual.

Para este tipo de situação, existe o recurso no Power BI chamado Segurança em Nível de Linha (RLS — Row Level Security), o qual você DEVE definir os filtros através das funções e ao publicar no Power BI Services, configurar a conta do Power BI o qual cada filtro será aplicado. Existem duas formas de aplicar o RLS, ou na sua base de dados você armazena todos os emails dos usuários e aplica o filtro de acordo com o usuário logado (a função USERNAME() do DAX captura isso) ou cria as funções de filtro e aplica por usuários, o qual é o exemplo deste artigo.

Vamos a um exemplo, tendo uma fonte de dados como a figura a seguir onde o Gerente está classificado como 100, 200, 300 ou 400, é um campo numérico e suficiente para o exemplo.

Filtros de Gerentes a serem aplicados

Crie alguns gráficos para visualizar as informações a seguir, por exemplo, um filtro de gerente (100, 200, 300, 400), um gráfico de Qtdes Vendidas por Vendedor (cada gerente contém um conjunto de vendedores) e uma tabela com os dados:

Dados de Vendas

Pronto, salve e publique este relatório em algum workspace na nuvem.

Como criar as funções de filtro?

O primeiro passo é criar as funções de filtro no Power BI Desktop, aliás, só nele é possível isto. No menu Modelagem há 2 ícones, Gerenciar funções (criar e editar os filtros) e Exibir como (testar os filtros).

Menu de funções

Clique no Gerenciar funções para abrir a tela de filtro. Clique no botão Criar, dê um nome para o filtro, Gerente100, neste caso, em Dados clique no botão construtor (…), selecione Adicionar filtro. Aqui são exibidos todos os campos existentes na fonte de dados da tabela Dados, você pode definir o filtro que quiser. Neste caso, selecione o campo Gerente.

Novo filtro

A seguir é preciso montar o filtro, neste caso informar que o Gerente = 100. Como o campo é numérico, o 100 NÃO deve estar entre aspas. Para campos alfanumérico sim, é preciso aspas, por exemplo, [Categoria] = ''Bebidas''.

Filtro Gerente = 100

Dica de filtro: quando você montar a expressão de filtro, é possível usar várias combinações dos operadores AND (&&), OR (||), contido (IN) ou concatenar outro campo.

[Gerente] = 100 || [Gerente] = 300

[Gerente] = 100 && [Categoria] = ''Bebidas''

[Gerente] in {100,200}

[Gerente] = 100 && [Preço] >= 50

Em seguida, monte os demais filtros, sendo:

Gerente200300 >> expressão >> [Gerente] IN {200, 300}

Gerente 400 >> expressão >> [Gerente] = 400

Diretor — nada de filtro

Pronto, uma vez definidos os filtros, vamos testar para saber se estão OK. Para isto, no menu Modelagem, clique no botão Exibir Como. Será aberta uma janela com todos os filtros existentes.

Filtros existentes

Selecione o filtro Gerente100 e clique em OK. Note que os dados exibidos referem-se somente ao Gerente = 100.

Filtro aplicado

Note que todos os dados mostram apenas o Gerente 100, ou seja, está funcionando o filtro. Para retornar sem filtros, clique no botão Parar Exibição.

Publicar na nuvem

Uma vez definidos e testados os filtros, salve e publique na nuvem. Até agora no Power BI Desktop criamos as funções de filtro e como na nuvem é que as contas são vinculadas, precisamos dizer ao conjunto de dados, quais filtros cada conta DEVE visualizar.

No seu Workspace selecione Conjunto de dados, RLSArtigo (neste caso é o nome do meu dataset associado ao projeto), clique no botão construtor () e selecione Segurança.

Configurar a segurança de acesso

Serão exibidos todos os nomes das funções criadas no Power BI Desktop e com zero (0) usuários vinculados ao filtro. Agora é preciso digitar os nomes dos usuários para cada filtro, e ao clicar no botão Adicionar tal usuário estará apto a aplicar o filtro assim que logado. Neste caso, você DEVE associar todos os usuários do Power BI que deverão visualizar os respectivos filtros, por exemplo, no Gerente100 associe o usuário vendas1@onmicrosoft.com, ao Gerente200300 associe os usuários vendas2@onmicrosoft.com E vendas3@onmicrosoft.com, e assim sucessivamente. Para o diretor, associe o login dele (joao@@onmicrosoft.com). Ao final, clique no botão Salvar.

Vínculo do usuário ao filtro

Caso tenha mais de um usuário do Power BI a ser vinculado ao filtro, basta adicionar a respectiva conta dele.

Vários usuários para este filtro

Posso ter um email que não tenha conta do Power BI associado ao filtro?

Não pode, todos os filtros DEVEM fazer parte de uma conta do Power BI do mesmo domínio. Uma dica para empresas que não querem distribuir contas PRO para todos os envolvidos, devido ao custo de USD 10/mês, é criar uma conta por departamento, assim alivia um pouco o investimento.

Como testar se os filtros RLS estão funcionando corretamente?

Agora vem a parte boa, testar os filtros, visualizar por usuário de acordo com as regras de filtros aplicados. Note que há 4 funções (grupos) e aquele que deseja testar, basta clicar no botão construtor (…) do respectivo grupo, e selecionar a opção Testar como função.

Teste do RLS

O Power BI abre uma tela com os dados já filtrados, note que o código do Gerente mostra apenas as vendas do 100. Isto é excelente para que possamos testar antes de liberar aos usuários. Para retornar, clique no botão azul (<- Voltar para Segurança em Nível de Linha).

RLS aplicado

Nesta mesma tela você pode alternar para outro grupo, basta clicar no botão Gerente100, o qual abrirá uma tela com os demais grupos. Basta selecionar o respectivo grupo e clicar no botão Aplicar.

Demais grupos do RLS

Pronto, uma vez testado e funcionando, já pode liberar aos usuários da sua empresa. Desta forma, basta você usar o RLS para aplicar filtros dinamicamente por usuário logado, facilitando muito o fluxo de trabalho.

Conclusão

O uso de RLS demonstrado neste artigo é uma das opções para aplicar o filtro por usuário logado. Existe outra forma de capturar o nome do usuário logado e aplicar a função DAX USERNAME() para capturar e aplicar o filtro, mas isto é tema pra outro artigo.

Boa sorte, sucesso nos projetos de Power BI, se precisar treinar o seu time, fale comigo rehaddad@msn.com
No canal http://www.youtube.com/c/RenatoHaddadMVP você tem uma playlist com vários vídeos de Power BI com dicas e truques.

--

--

Renato Haddad
Renato Haddad

Written by Renato Haddad

Renato é Microsoft Most Valuable Professional, apaixonado por Power BI, AI, VS 2019, ASP.NET, escritor, professor de Pós Graduação e velejador de Kitefoil

Responses (1)