Forum Discussion
Filtrado de varios grupos y columnas en Dynamic RLS
- 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
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