Forum Discussion

Syndicate_Admin's avatar
Syndicate_Admin
Icon for Administrator rankAdministrator
2 years ago
Solved

Filtrado de varios grupos y columnas en Dynamic RLS

Hola a todos Me gustaría usar la siguiente tabla DIM_ACT como tabla de restricción de acceso para los usuarios. Esta es solo una tabla de ejemplo y tendrá muchas filas. DIM_USER tabla contiene el co...
  • Syndicate_Admin's avatar
    2 years ago

    Consulte la solución a continuación.

    1.) Todos los valores de punto y coma en DIM_ACT columnas deben ser reemplazados por el símbolo "|" para que esta fórmula funcione. Cambie los datos de origen o cree una columna calculada para reemplazar ";" por "|".

    2.) Se eliminó DIM_USER tabla y se incorporó la columna de ID de correo electrónico a DIM_ACT propia tabla. 3.) Solo hay 1 registro para un solo usuario en DIM_ACT en un solo GRUPO.

    4.) Cree un ROL en Administrar roles y aplíquelo debajo de DAX en FACT_ACTUALS tabla. Usando el siguiente DAX, cuando el usuario inicie sesión, podrá ver solo los valores separados con "|" en las columnas respectivas de DIM_ACT y cuando ALL esté presente en cualquiera de las columnas, podrá ver todos los valores disponibles en FACT ACTUALS.

    /* FILTRE DIM_ACT PARA OBTENER EL REGISTRO QUE SOLO TIENE EL ID DE CORREO ELECTRÓNICO DEL USUARIO QUE HA INICIADO SESIÓN Y LOS VALORES ASIGNADOS EN LA COLUMNA DE NIVEL */

    && [NIVEL] EN

    (

    VAR _LEV = MAXX

    (FILTER( 'DIM_ACT',[ID DE CORREO ELECTRÓNICO] = USERPRINCIPALNAME () ),'DIM_ACT'[_LEV])

    /* TOME LA LONGITUD DE LA RUTA DE LA COLUMNA LEVEL. ESTO SE HACE PORQUE PODRÍA HABER N NÚMERO DE VALORES SEPARADOS POR | EN DIM_ACT TABLAY NECESITAMOS SEPARARLOS COMO VALORES INDIVIDUALES */

    VAR _LEVLEN = LONGITUD DE LA RUTA (_LEV )

    /* CREA UNA TABLA VIRTUAL CON EL NOMBRE DE COLUMNA LEVLIST QUE TIENE LA LISTA DE VALORES DE COLUMNA DE NIVEL */

    VAR _LEVTABLE = ADDCOLUMNS ( GENERATESERIES ( 1, _LEVLEN ), "LEVLIST", PATHITEM ( _LEV, [Value] ) )

    /* SELECCIONE LOS VALORES DE LA COLUMNA Y PASE LOS VALORES A LA LISTA */

    VAR _LEV_list = SELECTCOLUMNS ( _LEVTABLE, "LEVEL", [LEVLIST] )

    /* SUMA TODOS LOS VALORES DE NIVEL DE FACT_ACTUALS. ESTO ES PARA UN USUARIO QUE TIENE ASIGNADO EL VALOR "ALL" EN EL NIVEL DE DIM_ACT TABLA */

    VAR _ALLFACTLEV = ADDCOLUMNS ( VALORES ( FACT_ACTUALS[NIVEL] ), "TODOS", "TODOS" )

    /* DEVUELVE SOLO LOS VALORES ASIGNADOS EN LA COLUMNA DE NIVEL EN DIM_ACT DE LA TABLA DE HECHOS PARA EL USUARIO QUE HA INICIADO SESIÓN O DEVUELVE TODOS LOS VALORES DE LA TABLA DE HECHOS CUANDO LA COLUMNA DE NIVEL SE PROPORCIONA COMO ALL */

    DEVOLUCIÓN

    SELECTCOLUMNS(FILTER ( _ALLFACTLEV, [LEVEL] IN _LEV_LIST || [TODOS] EN _LEV_LIST ),[NIVEL]))

    && [ETIQUETA] EN

    (

    VAR _LAB = MAXX

    (FILTRO ( 'DIM_ACT', [ID de correo electrónico] = USERPRINCIPALNAME () ),'DIM_ACT'[ETIQUETA])

    VAR _LABLEN = LONGITUD DE LA RUTA ( _LAB )

    VAR _LABTABLE = ADDCOLUMNS ( GENERATESERIES ( 1, _LABLEN ), "LABLIST", PATHITEM ( _LAB, [Value] ) )

    VAR _LAB_LIST = SELECTCOLUMNS ( _LABTABLE, "LABEL", [LABLIST] )

    VAR _ALLFACTLAB = ADDCOLUMNS ( VALORES ( FACT_ACTUALS[ETIQUETA] ), "TODOS", "TODOS" )

    DEVOLUCIÓN

    SELECTCOLUMNS (FILTER ( _ALLFACTLAB, [LABEL] IN _LAB_LIST || [TODOS] EN _LAB_LIST ),[ETIQUETA]))

    && [FUENTE] EN ------ Del mismo modo, repita el código anterior para otras columnas en DIM_ACT