Forum Discussion
Pregunta RLS con grupo
- 5 years ago
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.
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 _finalFilter
He 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.
- Anonymous5 years agoNot 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.
- nandukrishnavs5 years agoCommunity Champion
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.
- Anonymous5 years agoNot applicable
Gracias @nandukrishnavs por guiar con esos pasos detallados.
Quería expandir la condición con 2 filtros más y añadí 2 tablas para ella. Hemos detectado un problema desconocido.
La restricción es para el grupo de gastos a 20 y 30 para el gerente de Office. En el Grupo de gastos 20, se pueden mostrar todos los datos con cualquier código de sección. Pero en 30, solamente el código de sección con CA debe ser mostrado.
Las condiciones añadidas son las siguientes,
var _secsg - CALCULATETABLE('Security SG','Security SG'[Group]IN _group)
var _sg - SELECTCOLUMNS(_secsg,"Sp Grp",[Grupo de Gastos])
var _secscode - CALCULATETABLE('Código de sección de seguridad','Código de sección de seguridad'[Grupo]IN _group)
var _sc - SELECTCOLUMNS(_secscode,"Sec Code",[Section Code])
var _OfficeManagerRole ?
[Oficina de Ventas] EN _office &&
[Grupo de gastos] EN _sg ?[Oficina de Ventas] EN _office &&
[Grupo de gastos] EN _sg &&[Código de sección] EN _sc
https://drive.google.com/file/d/1ahniIS4uGVfobTVvQp7E0J9GPJseYBfM/view?usp=sharing