Forum Discussion

Syndicate_Admin's avatar
Syndicate_Admin
Administrator
3 years ago

UseRelationship() y RLS restringidos

Hola a todos

Estoy atascado con el siguiente error

Las funciones UseRelationship() y CrossFilter() no se pueden utilizar al consultar 'TableA' porque está limitada por la seguridad de nivel de fila definida en 'TableA' o tablas relacionadas.

Todo lo que hice fue crear una medida en alguna tabla (TableX) que tiene relación inactiva (1:*) con TableA, ya que la relación está inactiva utilicé la función Userelationship dentro del calcuate. Funcionó para mí, pero cuando lo publico, ¿otros usos obtienen el error anterior? Entiendo que tanto la tabla A como la tabla X tienen una relación activa con la tabla Proyecto donde se está aplicando el filtro RLS. Necesito que ambas relaciones existan con el proyecto. ¿Cómo puedo resolver esto?

Gracias por la ayuda.

7 Replies

  • ¿Puede comprobar qué tabla de dimensiones se utiliza para configurar RLS? Si se utiliza la tabla A para configurar el filtro RLS (como sugiere el mensaje erro), eso sería realmente arriesgado.

    Como solución alternativa, tal vez pueda crear RLS usando lookupvalue, para evitar crear cualquier relación. Eso podría resolver el problema.

    https://www.youtube.com/watch?v=9wN33rTaiB4&t=498s

  • @Jeanxyz ,

    Gracias por su respuesta. Revisaré el video y veré si ayudará. como mencioné en mi primer post hay una tabla de proyecto a la que tanto A como X están conectadas y esa tabla de proyecto es la que tiene el RLS. No es tan sencillo, sino solo para simplificarlo porque la tabla del proyecto está conectada indirectamente a través de otra tabla de dimensiones que está conectada a la tabla A y necesito que esta relación se quede.

  • @alisaleh también puede utilizar la técnica definida en esta entrada de blog Resolviendo RLS Gotchas – Prologika

    Síguenos en LinkedIn (en inglés) y a nuestro YouTube (en inglés) canal

    Yo lo haría Elogios si mi solución ayudó. 👉 Si puede dedicar tiempo a publicar la pregunta, también puede hacer un esfuerzo para felicitar a quien ayudó a resolver su problema. ¡Es una muestra de agradecimiento!

    Visítenos en https://perytus.com, su ventanilla única para proyectos/formación/consultoría relacionados con Power BI.

    • Syndicate_Admin's avatar
      Syndicate_Admin
      Administrator

      @parry2k ,

      Vi esa publicación, y no entendí cómo se puede usar la intersección en lugar de userelationship. La userelationship es la función utilizada en Calcular. ¿Puede proporcionar un ejemplo?

      • Syndicate_Admin's avatar
        Syndicate_Admin
        Administrator

        Resulta que puede usar la intersección en el cálculo de la función semilar a USERELATIONSHIP()

  • @alisaleh exactamente, me alegro de que tenga una solución. ¡¡Bien!!

    Síguenos en LinkedIn (en inglés) y a nuestro YouTube (en inglés) canal

    Yo lo haría Elogios si mi solución ayudó. 👉 Si puede dedicar tiempo a publicar la pregunta, también puede hacer un esfuerzo para felicitar a quien ayudó a resolver su problema. ¡Es una muestra de agradecimiento!

    Visítenos en https://perytus.com, su ventanilla única para proyectos/formación/consultoría relacionados con Power BI.

  • A quien corresponda,

    Tuve el mismo problema al usar USERELATIONSHIP() y RLS.

    En mi caso, el uso de INTERSECT() no me proporcionó los resultados correctos.

    Esto es (una parte) de mi modelo de datos:

    Básicamente, necesito lograr la suma de horas rastreadas en la tabla de seguimiento de tiempo por orden de trabajo (ID únicos).

    PD: TimeTracking se puede hacer en diferentes niveles (no necesariamente en una orden de trabajo, por eso no hay una relación activa)

    Mi DAX original era el siguiente:

    Horas de OT =
    CALCULAR(
    SUM('Seguimiento del tiempo'[Cantidad]),
    USERELATIONSHIP(
    Órdenes de trabajo[WO],
    'Seguimiento del tiempo'[Workorder_No]
    )
    )

    Así que lo he cambiado al siguiente cálculo, donde funcionó bien:

    Horas de OT =
    DÓNDE xWO = SELECTEDVALUE(Órdenes de trabajo[DONDE],FALSO())
    DEVOLUCIÓN
    SI( xWO=FALSO,
    SUMA('Seguimiento del tiempo'[Cantidad]),
    CALCULAR(
    SUMA('Seguimiento del tiempo'[Cantidad]),
    'Seguimiento del tiempo'[Workorder_No] = xWO
    )
    )

    Aunque la medida requiere mucha más capacidad (tarda más en cargarse), ahora el modelo funciona bien 🙂