Estou desenvolvendo um painel no Power BI para gerenciar registros de atendimentos realizados por clientes. Tenho uma tabela fato que contém o ID dos registros, informações sobre os atendimentos (como datas e motivos), além de colunas importantes para o RLS, como Divisões (área responsável pelo atendimento) e CNPJ (identificador do cliente).
Cenário Atual:
Atualmente, uso uma regra de RLS baseada no CNPJ do cliente. Essa regra é aplicada através da tabela carteira que vincula a carteira de vendedores aos CNPJs e ao estado correspondente. A tabela filtra a dimensão de clientes, que por sua vez filtra a tabela fato.
Utilizo a função SWITCH no RLS para validar o usuário logado e definir se a filtragem deve ser feita por UF ou pelo ID do vendedor, além de permitir perfis com acesso completo aos dados.
Novo Desafio:
Agora, preciso aplicar uma segunda regra de RLS para os responsáveis das Divisões. Essa regra deve limitar o acesso às divisões vinculadas à UF do usuário, exigindo a criação de um novo perfil.
No entanto, ao implementar ambas as regras – uma na tabela de clientes usando a tabela carteira, e outra na dimensão de divisões – percebi que elas interferem uma na outra. Ou o acesso é liberado indevidamente, ou todas as informações são filtradas, o que compromete o funcionamento do painel.
Solicitação de Ajuda:
Gostaria de saber como aplicar essas duas regras de RLS de forma que uma não interfira na outra. Minha fonte de dados está no BigQuery, e utilizo a importação dos dados no Power BI. Já considerei duplicar a base para aplicar cada regra separadamente, mas isso aumentaria significativamente o consumo de processamento.
Exemplos:
Tabela Dimensão Usuários
Nome / ID Usuário / e-mail / perfil / UF
Tabela RLS
CNPJ / ID Usuário / UF
Tabela Dimensão Divisão
Nome Divisão / ID Divisão / UF / Demais dados
Função Swich usada no RLS do cenário atual (Tabela Cliente)
var _perfil =
CALCULATETABLE(
VALUES(dUsuarios[perfil]),
dUsuarios[email] = USERPRINCIPALNAME()
)
var _idusuario =
CALCULATETABLE(
VALUES(dUsuarios[idusuario]),
dUsuarios[email] = USERPRINCIPALNAME()
)
var _uf =
CALCULATETABLE(
VALUES(dUsuarios[uf]),
dUsuarios[email] = USERPRINCIPALNAME()
)
Pergunta
Caiomens
Estou desenvolvendo um painel no Power BI para gerenciar registros de atendimentos realizados por clientes. Tenho uma tabela fato que contém o ID dos registros, informações sobre os atendimentos (como datas e motivos), além de colunas importantes para o RLS, como Divisões (área responsável pelo atendimento) e CNPJ (identificador do cliente).
Cenário Atual:
Atualmente, uso uma regra de RLS baseada no CNPJ do cliente. Essa regra é aplicada através da tabela carteira que vincula a carteira de vendedores aos CNPJs e ao estado correspondente. A tabela filtra a dimensão de clientes, que por sua vez filtra a tabela fato.
Utilizo a função
SWITCH
no RLS para validar o usuário logado e definir se a filtragem deve ser feita por UF ou pelo ID do vendedor, além de permitir perfis com acesso completo aos dados.Novo Desafio:
Agora, preciso aplicar uma segunda regra de RLS para os responsáveis das Divisões. Essa regra deve limitar o acesso às divisões vinculadas à UF do usuário, exigindo a criação de um novo perfil.
No entanto, ao implementar ambas as regras – uma na tabela de clientes usando a tabela carteira, e outra na dimensão de divisões – percebi que elas interferem uma na outra. Ou o acesso é liberado indevidamente, ou todas as informações são filtradas, o que compromete o funcionamento do painel.
Solicitação de Ajuda:
Gostaria de saber como aplicar essas duas regras de RLS de forma que uma não interfira na outra. Minha fonte de dados está no BigQuery, e utilizo a importação dos dados no Power BI. Já considerei duplicar a base para aplicar cada regra separadamente, mas isso aumentaria significativamente o consumo de processamento.
Exemplos:
Tabela Dimensão Usuários
Nome / ID Usuário / e-mail / perfil / UF
Tabela RLS
CNPJ / ID Usuário / UF
Tabela Dimensão Divisão
Nome Divisão / ID Divisão / UF / Demais dados
Função Swich usada no RLS do cenário atual (Tabela Cliente)
var _perfil =
CALCULATETABLE(
VALUES(dUsuarios[perfil]),
dUsuarios[email] = USERPRINCIPALNAME()
)
var _idusuario =
CALCULATETABLE(
VALUES(dUsuarios[idusuario]),
dUsuarios[email] = USERPRINCIPALNAME()
)
var _uf =
CALCULATETABLE(
VALUES(dUsuarios[uf]),
dUsuarios[email] = USERPRINCIPALNAME()
)
var _rls =
SWITCH(
_perfil,
1, True,
2, [uf] = _uf,
3, [idusuario] = _idusuario,
False
)
return _rls
Segunda Função Swich usada no RLS do novo desafio (Tabela Divisão)
var _perfil =
CALCULATETABLE(
VALUES(dUsuarios[perfil]),
dUsuarios[email] = USERPRINCIPALNAME()
)
var _idusuario =
CALCULATETABLE(
VALUES(dUsuarios[idusuario]),
dUsuarios[email] = USERPRINCIPALNAME()
)
var _uf =
CALCULATETABLE(
VALUES(dUsuarios[uf]),
dUsuarios[email] = USERPRINCIPALNAME()
)
var _rls =
SWITCH(
_perfil,
4, [uf] = _uf,
False
)
return _rls
Link para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados
Faça login para comentar
Você vai ser capaz de deixar um comentário após fazer o login
Entrar Agora