Power BI — Segurança em Nível de Linha (Row Level Security)
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.
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:
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).
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.
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''.
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.
Selecione o filtro Gerente100 e clique em OK. Note que os dados exibidos referem-se somente ao Gerente = 100.
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.
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.
Caso tenha mais de um usuário do Power BI a ser vinculado ao filtro, basta adicionar a respectiva conta dele.
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.
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).
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.
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.