Forum Discussion
Pregunta RLS con grupo
Estoy tratando de usar el RLS para un informe y quería orientación.
El informe es para proporcionar los detalles de los importes de gasto para las oficinas de ventas y el grupo de gastos específico.
La tabla siguiente es frrm datos AD con grupos de seguridad vinculados a los diferentes usuarios.
| Usuario | Correo electrónico | Grupo | Oficina de Ventas |
| 1000 | [email protected] | Gerente de Oficina | Bristol |
| 1005 | [email protected] | Gerente de Oficina | Cheshire |
| 1010 | [email protected] | Gerente de Oficina | Essex |
| 1020 | [email protected] | Prod Manager | Essex |
| 1025 | [email protected] | Prod Manager | Kent |
La tabla de hechos tiene a continuación datos con grupos de gastos y la cantidad
| Fecha | Grupo de Gastos | Oficina de Ventas | Cantidad |
| 1/2/2020 | 20 | Bristol | 20000 |
| 2/2/2020 | 30 | Bristol | 10000 |
| 3/1/2020 | 20 | Essex | 12000 |
| 4/2/2020 | 40 | Essex | 17000 |
| 1/2/2020 | 100 | Essex | 19000 |
| 1/2/2020 | 20 | Kent | 25000 |
| 2/2/2020 | 100 | Kent | 20000 |
Los usuarios vinculados al grupo de gerentes de oficina deben ver sólo los datos relacionados con su oficina y grupo de gastos NO EN 100.
Además, hay usuarios de administración que tendrían que ver todos los datos. No los he agregado a los grupos AD, ya que solo hay pocos usuarios.
¿Cómo se puede definir la regla para implementar esto. Estoy tratando de ver los ejemplos radacad y tratando de aprender en paralelo, pero quería hacer esta pregunta a los expertos.
Archivo Pbix
https://drive.google.com/file/d/1WOksrHS8FT0H4NkL-Lej4r92Uxhz3UZl/view?usp=sharing
var _admin=DISTINCT('Admin'[Email])Obtener la lista de correos electrónicos de administración y asignarlo a _admin variable
var _x = CALCULATETABLE(Division,Division[Email]=USERPRINCIPALNAME())Filtrar la tabla División en función del usuario de inicio de sesión y asignarla a _x variable
var _office = SELECTCOLUMNS(_x,"Office",[Sales Office])Creación de una nueva tabla denominada _office. Contendrá una sola columna "Office" que se deriva de _x tabla. es decir, la oficina del usuario de inicio de sesión.
var _group = SELECTCOLUMNS(_x,"Group",[Group])Creación de una nueva tabla denominada _group. Contendrá una sola columna "Grupo" que se deriva de _x tabla. es decir, el grupo del usuario de inicio de sesión.
var _OfficeManagerRole = AND([Sales Office] IN _office,[Spending Group]<>100)Especificar una condición de filtro, Rol de administrador de Office
var _ProdManagerRole = [Sales Office] IN _officeEspecificar una condición de filtro, Rol de gerente de producto
var _finalFilter =SWITCH(TRUE(), USERPRINCIPALNAME() IN _admin, TRUE(), "Office Manager" IN _group, _OfficeManagerRole, "Prod Manager" IN _group, _ProdManagerRole) return _finalFilterDecidir el rol de usuario en función del usuario de inicio de sesión.
5 Replies
- nandukrishnavsCommunity Champion
Pruebe debajo de DAX en la ventana Administrar roles.
var _admin=DISTINCT('Admin'[Email]) var _x = CALCULATETABLE(Division,Division[Email]=USERPRINCIPALNAME()) var _office = SELECTCOLUMNS(_x,"Office",[Sales Office]) var _group = SELECTCOLUMNS(_x,"Group",[Group]) var _OfficeManagerRole = AND([Sales Office] IN _office,[Spending Group]<>100) var _ProdManagerRole = [Sales Office] IN _office var _finalFilter =SWITCH(TRUE(), USERPRINCIPALNAME() IN _admin, TRUE(), "Office Manager" IN _group, _OfficeManagerRole, "Prod Manager" IN _group, _ProdManagerRole) return _finalFilterHe adjuntado el archivo PBIX para su referencia.
Sus requisitos reales pueden ser diferentes. Puesto que faltan los usuarios de administración en la tabla, he creado una tabla calculada como Admin. Modifique la lógica en función de sus necesidades.
- AnonymousNot applicable
- AnonymousNot applicable
Gracias @nandukrishnavs por provocar los pasos.
Tratando de entender los pasos que hiciste en este Dax.
Creación de la tabla virtual con _X. Pero , la columna selecta es que realmente para filtrar la condición específica para Office y grupo ?
Así que si tengo condiciones adicionales que necesito filtrar, el enfoque será para obtener la tabla virtual y filtrar con selectcolumn?
Familiarizarme con estas funciones. Gracias de nuevo por la ayuda.