Forum Discussion

Anonymous's avatar
Anonymous
Not applicable
5 years ago
Solved

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.

UsuarioCorreo electrónicoGrupoOficina de Ventas
1000[email protected]Gerente de OficinaBristol
1005[email protected]Gerente de OficinaCheshire
1010[email protected]Gerente de OficinaEssex
1020[email protected]Prod ManagerEssex
1025[email protected]Prod ManagerKent

La tabla de hechos tiene a continuación datos con grupos de gastos y la cantidad

FechaGrupo de GastosOficina de VentasCantidad
1/2/202020Bristol20000
2/2/202030Bristol10000
3/1/202020Essex12000
4/2/202040Essex17000
1/2/2020100Essex19000
1/2/202020Kent25000
2/2/2020100Kent20000

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

  • @Pbi07

    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 _office

    Especificar 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 _finalFilter

    Decidir el rol de usuario en función del usuario de inicio de sesión.

5 Replies

  • nandukrishnavs's avatar
    nandukrishnavs
    Community Champion

    @Pbi07

    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

    nandukrishnavs_0-1601620626430.png

    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.

    • Anonymous's avatar
      Anonymous
      Not applicable

      Gracias @nandukrishnavs

      Permítanme digerir a través de esta lógica DAX.

      • Anonymous's avatar
        Anonymous
        Not 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.