Forum Discussion

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

SPI

El requisito es filtrar la tabla DATA_TABLE en función de valores de columna específicos de la tabla USER_FILTERS para cada usuario que haya iniciado sesión. El filtrado debe basarse en varios atributos, Utilice la seguridad de nivel de fila (RLS) con USERPRINCIPALNAME() para filtrar los datos en función del usuario que ha iniciado sesión Haga coincidir la columna USERNAME de la tabla USER_FILTERS con el USERPRINCIPALNAME() del usuario que ha iniciado sesión.
Vamos a desglosarlo:
Si un valor es NULL o ALL:

El usuario debe ver todos los datos de ese atributo.
En otras palabras, si el valor del filtro es NULL o ALL, el usuario debe tener ACCESO SIN RESTRICCIONES a todos los valores de ese atributo.

Si se especifica un valor:

El usuario solo debe ver el VALOR ESPECIFICADO para ese atributo.
En otras palabras, si se proporciona un valor de filtro específico, el usuario solo debe tener ACCESO A ESE VALOR ESPECÍFICO para ese atributo.

Para ilustrar esto, consideremos un ejemplo:
Supongamos que tenemos un atributo llamado "LOB" (Line of Business). Si el valor de filtro para LOB es:

NULL o ALL, el usuario debe ver TODOS los valores de LOB (por ejemplo, LOB1, LOB2, LOB3, etcétera).
"LOB1", el usuario solo debe ver los datos de LOB1 y no los de ningún otro valor de LOB.

Existe una relación inactiva de varios a varios entre FILTERS y DATA_TABLE en esos atributos.

Usando a continuación, filtra, pero cuando combino todos los atributos del filtro, no funciona, veo en blanco o todos los valores.

VAR Usuario actual = NOMBRE PRINCIPAL DE USUARIO()

VAR LOBFilterValues =
CALCULABLE(
VALORES('USER_FILTERS'[GLOBO]),
'USER_FILTERS'[NOMBRE DE USUARIO] = Usuario actual
)

DEVOLUCIÓN
COUNTROWS (Filas de recuentos)(LOBFilterValues) = 0 ||
"TODOS" EN LOBFilterValues ||
'DATA_TABLE'[LINE_OF_BUSINESS] EN LOBFilterValues