Filtrar con USERPRINCIPALNAME ()

Un usuario Pregunto ✅

Anónimo

Hola amigos

Otro día otro desafío 😉

Tenemos RLS en todos nuestros informes, pero estamos tratando de encontrar formas de abrir los conjuntos de datos sin dejar de mostrar los datos «relevantes» para el usuario. RLS se configura en función de una tabla de ubicación que utiliza el filtrado de una lista de usuarios / ubicaciones y la función USERPRINCIPALNAME ().

El escenario ideal sería que una lista de las ubicaciones asignadas al usuario se hace visible en una segmentación. Por defecto, Yo establecería el valor para mostrar solo esas ubicaciones y al mismo tiempo permitir al usuario ver otras ubicaciones, por ejemplo, a través de marcadores.

Por lo tanto, necesito hacer una tabla calculada. Esto es lo que obtuve:

Creé un modelo simple:

Modelo simpleModelo simple

En la tabla StationUser tengo:

upn contiene direcciones de correo electrónico, sry para el espacio en blancoupn contiene direcciones de correo electrónico, sry para el espacio en blanco

Ahora puedo crear una medida para contar a cuántas estaciones estoy asignado:

Count My Stations =

CALCULATE (
    COUNTROWS ( Stations );
    StationUser[upn] = USERPRINCIPALNAME ();
    CROSSFILTER ( Stations[stationid]; StationUser[stationid]; BOTH )
)

Y devolverá el recuento correcto. Entonces esto funciona.

Puedo hacer lo mismo con la tabla calculada indicando mi UPN explícitamente en la fórmula

My Stations =
CALCULATETABLE (
    VALUES ( Stations[station] );
    StationUser[upn] = "myemail@email.com";
    CROSSFILTER ( Stations[stationid]; StationUser[stationid]; BOTH )
)

PERO, cuando uso Prinicpalname () en lugar de «myemail@email.com» en una tabla calculada, no me deja:
3.jpg

¿Parece que no es posible crear una tabla dinámica basada en la función USERPRINCIPLENAME ()?

¿Alguien tiene una solución / alternativa para esto?

¡Gracias!

Hola @Anónimo

¿Qué tal usar esta fórmula?

Measure:

USERPRINCIPALNAME = USERPRINCIPALNAME()

My Stations =
CALCULATETABLE (
    VALUES ( Stations[station] );
    StationUser[upn] = [USERPRINCIPALNAME];
    CROSSFILTER ( Stations[stationid]; StationUser[stationid]; BOTH )
)

Atentamente

Maggie

Anónimo

En respuesta a v-juanli-msft

Hola @ v-juanli-msft
Gracias por la ayuda. Intenté algo similar. Con su fórmula, todavía devuelve un error que dice: Se ha usado una función ‘CALCULAR’ en una expresión Verdadero / Falso que se usa como expresión de filtro de tabla. Esto no esta permitido.

Supongo que eso es realmente un desafío y es más complejo de lo que pensé.

amarines

En respuesta a Anónimo

Hola

CROSSFILTER no está permitido aquí, escriba el siguiente

Mis estaciones =

Calculable(
VALORES(Estaciones[station] )
;FILTRAR(
VALORES(Estaciones[station])
;CALCULAR(
COUNTROWS(StationUser)
;StationUser[upn] = [USERPRINCIPALNAME]
)>0
)
)

Hola @Anónimo

Sí, no es posible crear una tabla dinámica basada en la función USERPRINCIPLENAME (), podría usar la función en una medida en su lugar.

Aquí hay un hilo similar.

Implementación de RLS

Mejores reagrds

maggie

Anónimo

En respuesta a v-juanli-msft

Hola @ v-juanli-msft

Gracias por el enlace, se ve muy similar y me acerqué un paso más. Ahora tengo una medida que me puede decir si la selección actual me está asignada o no:

CurrentUPN = USERPRINCIPALNAME()


----AND----


IsCurrentUPN = IF(HASONEFILTER(Stations[station]); IF ( CONTAINS (StationUser;StationUser[upn];[CurrentUPN]); TRUE(); FALSE() ))

Pero como es una medida, no puedo usarlo en una rebanadora. Necesito vincularlo a una tabla de alguna manera.

¿Existe alguna solución alternativa?

Atentamente

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *