Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Register now to learn Fabric in free live sessions led by the best Microsoft experts. From Apr 16 to May 9, in English and Spanish.

Reply
Syndicate_Admin
Administrator
Administrator

RLS / Accesos múltiples por usuario

Estimados todos,

Intentando resolver el siguiente problema.

1- En mi tabla de acceso de usuario tengo más o menos 2 cloumns "EMAIL" / "INTEREST"

2- En mi tabla de hechos tengo una concatenación de todas las columnas múltiples llamada "RLS" ( Ejemplo: una fila contendrá: "24532-France-Acessories-Products"

3- Lo que quiero intentar lograr es que RLS buscará esa columna "RLS" en mi tabla de hechos filtrando así los elementos de nessecery.

4- Cada usuario puede tener acceso a múltiples áreas (por ejemplo, países, grupos de productos, etc.)

Este fue uno de mis mejores intentos y funcionó hasta que un usuario tiene múltiples valores (dará un error)

VAR USER_Object = 
calculatetable(
Values('55_Subscription'[Interest]),
'55_Subscription'[Email] = USERPRINCIPALNAME()
)

VAR RLS= 
Switch(TRUE(),
USER_Object = "ALL", TRUE(),
[RLS] = USER_Object, True(),
False()
)
Return
RLS

Este simplemente no devolvió nada.

[RLS]
    IN CALCULATETABLE (
        VALUES ('55_Subscription'[Interest]),
        FILTER (
            ALL ('55_Subscription'),
            [Email] = USERPRINCIPALNAME()
        )
    )

¿Alguien tiene alguna idea de cómo puedo resolverlo?

Gracias

6 REPLIES 6
Syndicate_Admin
Administrator
Administrator

Aquí es donde estoy, pero estoy un poco atascado. Cuando corro me da el error de:

"Se proporcionó una tabla de valores múltiples donde se esperaba un solo valor"

CONTAINSSTRING([RLS],
CALCULATETABLE (
        VALUES ('55_Subscription'[Interest]),
        FILTER (
            ALL ('55_Subscription'),
           CONTAINSSTRING( [Email], USERPRINCIPALNAME())
        )
    )
)

Actualizar:

CONTAINSSTRING([RLS],
CALCULATETABLE (
        FIRSTNONBLANK ('55_Subscription'[Interest],1),
        FILTER (
            ALL ('55_Subscription'),
           CONTAINSSTRING( [Email], USERPRINCIPALNAME())
        )
    )
)

Ok Aquí está mi progreso, pude hacer que funcionara usando CONTAINSSTRING usando FIRSTNONBLANK, pero debido a esto solo puedo ver el primer filtro en RLS solo así que, por ejemplo: Si debería ver 2 países eorth de datos, solo veo uno. ¿Alguien sabe cómo superar esto?

Gracias y Saludos

@Oceans88 ,

Si hay varias condciones en su modelo de datos, le sugiero que las combine en una columna como columna clave.

Por ejemplo, el formato debe verse como "Id de usuario - País - Acessories - Productos".

Mi muestra:

55_Subscription:

RicoZhou_0-1656915391680.png

Datos:

RicoZhou_1-1656915398750.png

Relación:

RicoZhou_2-1656915430191.png

Código en Administrar roles:

[Email] = USERPRINCIPALNAME()

RicoZhou_3-1656915477522.png

[Combine Key] =
SWITCH (
    TRUE (),
    [Combine Key]
        IN CALCULATETABLE (
            VALUES ( '55_Subscription'[INTEREST] ),
            FILTER ( '55_Subscription', '55_Subscription'[Email] = USERPRINCIPALNAME () )
        ), [Combine Key],
    BLANK ()
)

RicoZhou_4-1656915486575.png

El resultado es el siguiente.

Ver como usuario A:

RicoZhou_5-1656915514480.png

Ver como Usuario B:

RicoZhou_6-1656915538625.png

Saludos
Rico Zhou

Si esta publicación ayuda, considere Aceptarla como la solución para ayudar a los otros miembros a encontrarla más rápidamente.

Hi Rico,

Millones de gracias por su tiempo y esfuerzo para investigar esto. Información muy útil. Appologize por el retraso. Semana de trabajo de toba. Esto realmente funciona. Pero, ¿qué pasa si quisiera hacer una búsqueda dentro de esa columna "Combinar clave" que ha creado para una cadena específica?

Imagine que esta es mi tabla de suscripción a continuación y simplemente liberaría los datos al encontrar esa palabra clave de interés dentro de "Combinar clave".

Oceans88_0-1657292250088.png

Te haces y saludos

Syndicate_Admin
Administrator
Administrator

Solo una actualización, el siguiente código en realidad está funcionando para eliminar el problema de "múltiples valores cuando se expetó un solo valor.

[Region] //I changed this to a region filter (Non-concatenated) and it worked. 
    IN CALCULATETABLE (
        VALUES ('55_Subscription'[Interest]),
        FILTER (
            ALL ('55_Subscription'),
            [Email] = USERPRINCIPALNAME()
        )
    )

Ahora necesito agregar una función de búsqueda y usar la columna [RLS] en la tabla de hechos (que contiene valores concatenados). ¿Tal vez pueda agregar una función Containsstring en algún lugar allí?

¿Alguna idea?

Kr

¿Alguna idea sobre lo que podría hacer para resolver?

Helpful resources

Announcements
Microsoft Fabric Learn Together

Microsoft Fabric Learn Together

Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City

PBI_APRIL_CAROUSEL1

Power BI Monthly Update - April 2024

Check out the April 2024 Power BI update to learn about new features.

April Fabric Community Update

Fabric Community Update - April 2024

Find out what's new and trending in the Fabric Community.