Tutorial Power BI: Cómo evitar el error de OLS cuando ocultas campos

Este tutorial ha quedado obsoleto, y hemos creado una solución mejor para los errores de visualización de gráficos con OLS gracias a la nueva funcionalidad de Parámetros de Campo. Podéis consultar el nuevo tutorial en este link.
En una entrada anterior os mostramos Cómo usar OLS en tus informes de Power BI a través de una sesión que hice en el Microsoft 365 Cabo San Lucas 2021. OLS es la Seguridad a Nivel de Objeto en Power BI y os permitirá ocultar tablas enteras o campos según el rol de los usuarios.
El problema que vimos en la demo es que, cuando accedes con el rol restrictivo (que no tiene acceso a ciertos campos o tablas), las visuales que contengan ese campo aparecerán con el siguiente error:

Si pulsamos en el link de “Ver Detalles” nos aparecerá lo siguiente:

En este ejemplo hemos ocultado el campo “Beneficio” para este rol y la medida Margen(%) que se muestra en la visual se calcula a partir de este campo.
Por ello tienes que tener en cuenta al ocultar campos con OLS:
- Para el rol restringido, ese campo o tabla oculto no existe.
- Por lo tanto, afecta a los campos ocultos y a cualquier medida que los utilice.
- Cualquier visual de tu informe que use ese campo o una medida relacionada dará error.
- Incluso si el campo o medida solo esta en los tooltips (Información de herramienta) dará error.
Solución 1: Usar la función DAX IFERROR()
¡Spoiler Alert!: No funciona. Pero es necesario pasar por este paso para entender que la solución no es tan sencilla.
Lo primero que se me ocurrió es usar una medida con la función DAX IFERROR(). Esta función nos permite mostrar un medida y si da error, mostrar otro valor. Podéis ver la documentación oficial de IFERROR en este link.
Por ello, cree la siguiente medida:
Margen (%) 2 = IFERROR([Margen (%)],"-")
De esta manera, si nuestra medida de Margen (%) da error debería devolver el valor “–“.
Si sustituimos la antigua medida de Margen por la nueva y accedemos con el rol restrictivo veremos que aparece el mismo error.
¿Qué ha fallado?
Ha fallado que esta medida no se puede ejecutar porque depende del campo Beneficio que para ese usuario no existe (no está en la tabla). Es uno de los tipos de error que IFERROR no puede manejar. IFERROR puede gestionar una división por cero o problemas similares, pero no puede evaluar si es error o no una fórmula con un campo que no existe.
Solución 2: Seguridad a nivel de Registro y Navegación
Nuestra segunda solución se basa en mostrar el informe de una manera u otra en base al rol que se conecte al mismo. Queremos un informe que cambie según que rol se conecte y para eso haremos los siguientes pasos:
- Crear una pestaña inicial de Portada solo con un botón.
- Crear un duplicado de nuestra pestaña y realizar pequeños cambios en la segunda pestaña.
- Ocultar ambas pestañas.
- Aprovechar los 2 roles creados para OLS para implementar RLS.
- Hacer una navegación dinámica en base a una función.
El informe mostrará una sola página con un botón que dependiendo del rol te llevará a una pestaña con todos los datos o a otra con la información capada.

Paso 1: Pestaña de Portada
Creamos una nueva pestaña y le incluimos un botón central con la opción de menú superior Insertar > Botón:

En las propiedades de Formato del Botón le podemos añadir el texto “Acceder al informe” y cambiar los colores del fondo y borde del botón:

Paso 2: Crear un duplicado de nuestra pestaña con cambios
Para crear un duplicado de una pestaña sólo tienes que pulsar con el botón derecho del ratón sobre la pestaña a copiar y elegir la opción Duplicar página:

A la primera pestaña (original) la llamaremos “1” y a la segunda “2”.
Sobre la segunda pestaña haremos algunos cambios para evitar el mensaje de error en el campo Beneficio oculto para el rol “Sales”:
- Eliminaremos las visuales de Margen y Margen % de los KPIs en la zona superior.
- Eliminaremos el campo Margen (%) de la tabla de Ventas y Margen por Cliente en la zona inferior.
- Eliminaremos el campo Margen (%) de los tooltips (Información sobre herramienta) del mapa.
Con esto hemos corregido/eliminado las visuales con errores para el rol más restringido de “Sales”.
Paso 3: Ocultar ambas pestañas (1 y 2)
El objetivo es que no se pueda acceder al informe (pestañas 1 y 2) directamente sin pasar por la portada con el botón que hemos creado. Por eso las ocultamos y solo se podrá acceder a ellas a través de la navegación del botón “Acceder al informe”.
Para ocultar las dos pestañas el proceso es similar al de Duplicar Página. Pulsamos con el botón derecho del ratón sobre cada pestaña y seleccionamos Ocultar Página:

Paso 4: Implementar RLS en ambos roles
Hemos creado 2 roles para implementar OLS:
- ADMIN: con acceso a toda la información
- SALES: con acceso a todos los datos excepto el campo BENEFICIO y las medidas que dependan de él.
Vamos a crear una tabla manual (opción Inicio > Crear tabla nueva) con el código y nombre de ambos roles:

Ahora iremos al menú de Roles en Modelado > Administrar Roles y pondremos un filtro DAX en cada rol para que sólo pueda ver el registro de esta tabla de su rol:

En el caso de ADMIN filtraremos que sólo vea el Código = “1” de la tabla Roles y en el caso de SALES que sólo vea el Código = “2”.
Paso 5: Implementar al navegación del botón en base al rol
Por último, haremos que el botón te lleve a una pestaña u otra en base a tu ROL.
Para ello en la propiedad de Formato “Acción” seleccionamos el Tipo “Navegación de Página“:

En “Destino” pulsaremos en la opción “Fx” para introducir un destino condicional:

Para configurar el destino condicional pondremos la siguiente opción:

El objetivo es que con el filtro RLS cada Rol solo ve “su” registro en la tabla de roles y, por lo tanto:
- el ROL ADMIN verá como primer código “1” e irá a la pestaña 1
- el ROL SALES verá como primer código “2” e irá a la pestaña 2
Y así conseguimos que cada rol vea el informe con la información capada pero sin mensajes de error.
Recordad que si os suscribís a nuestra newsletter (es gratis) podréis descargar el fichero pbix original de este tutorial.
Info Extra: No funciona con marcadores
Alguno puede pensar que no hace falta crear 2 pestañas y que se podría crear en una sola: con visuales superpuestas y marcadores.
La idea es poner una visual superpuesta a la del error con otra medida. Luego crear marcadores con una visual sobre otra y al revés. Por último, el botón tendrá como tipo de Acción “Marcador” y nos llevará a un marcador o a otro como hicimos en nuestro tutorial de Navegación avanzada en Power BI.
Esta opción es más limpia y es la primera que se me ocurrió, pero el tipo de acción “Marcador” incomprensiblemente aún no admite Destinos condicionales:

Conclusiones
Como veis no es fácil corregir este error. Espero que Microsoft vaya evolucionando OLS para que no haga falta realizar todo este trabajo para no mostrar los mensajes de error y que pueda ocultar las visuales o poner un mensaje distinto.
El problema es que este mensaje que aparece ahora puede confundirse con un error en el diseño del programa y el usuario puede pensar que el informe esta mal diseñado.
¿Vosotros lo habéis probado? ¿Habéis encontrado otra solución? Contádnoslo en comentarios.







Un comentario