Introducción
¡Hola Comunidad! Me presento. Mi nombre es Agustin Palacios. Trabajo hace casi 2 años en la empresa Pi Data Strategy & Consulting en el área de Business Intelligence y me especializo en el uso de Power BI.
Hace ya un tiempo que investigo y aprendo sobre pequeños detalles dentro de Power BI que nos permiten explotar la herramienta y sacarle el máximo provecho posible y ahora me gustaría empezar a compartir ese conocimiento. Y que mejor forma de empezar a hacerlo que con una funcionalidad que es muy deseada y que hasta hace muy poco no era posible de aplicar.
Este es el primer post de una miniserie de post donde tratamos sobre el acceso a las páginas de nuestro reporte.
Seguridad a nivel de páginas.
Con la actualización de mayo del 2020 se introdujo una nueva característica, el formato condicional en el menú Acción de los objetos visuales. A primera vista no parece un cambio muy importante, pero con un poco de imaginación y DAX podemos usar esta opción para simular una nueva funcionalidad en Power BI: seguridad a nivel de página.
La idea es bastante simple, limitar el acceso de distintos usuarios a determinadas páginas del informe. Para eso necesitamos ser nosotros los dueños de la navegación entre páginas y evitar la que viene por defecto en Power Bi. Vamos a crear 2 páginas, una página de Inicio que contendrá los botones para acceder a las distintas páginas y otra página de Usuario No Autorizado. Todas las páginas excepto la de inicio deben estar ocultas.
Necesitamos saber cuáles son los nombres de las cuentas de Power BI de todas las personas que accederán a nuestro reporte y las páginas que verán. Con esa información crearemos una tabla de la siguiente forma:

La columna Usuario tiene los mails de los usuarios.
La columna Id Pagina nos dice que usuario puede acceder a que página.
Lo siguiente que debemos hacer es crear una medida por cada pagina que nos interese controlar que contendrá sólo el nombre de la página. Para esto, creamos una tabla Páginas Informe.

Pagina Ventas = "Ventas"
Pagina Compras = "Compras"
Es muy importante que el nombre dentro de cada medida sea exactamente igual al nombre de la página, de lo contrario no funcionara.
A continuación, vamos a crear el siguiente grupo de medidas:
Control Usuario Ventas =
VAR __tablaAux = FILTER( Usuarios; Usuarios[Usuario] = USERNAME() )
VAR __bandera = CONTAINS(__tablaAux; Usuarios[Id Pagina]; 1)
Return
IF( __bandera ; [Pagina Ventas]; "Usuario No Autorizado" )
Control Usuario Compras =
VAR __tablaAux = FILTER( Usuarios; Usuarios[Usuario] = USERNAME() )
VAR __bandera = CONTAINS(__tablaAux; Usuarios[Id Pagina]; 2)
Return
IF( __bandera ; [Pagina Compras]; "Usuario No Autorizado" )
Aclaración: esto podría realizarse de otras formas con otras funciones, pero será trabajo del lector investigar y probar otras alternativas.
Estas son las medidas que controlaran que usuario accede a que página del reporte.
Para eso, primero creamos una tabla auxiliar que filtra
nuestra tabla de Usuarios por el usuario que esta logueado en ese momento.
Luego, creamos una variable bandera que devolverá TRUE si el usuario
activo tiene permiso para ver la página.
Finalmente, si se el usuario tiene acceso, la medida va a retornar el nombre de
la página. Caso contrario retornará el nombre de nuestra página de usuario no
autorizado.
Por ejemplo, para la medida Control Usuario Compras
- Si el usuario activo es ventas@mail.com, la variable bandera será FALSE porque no existe el valor 2 dentro de la tabla de Usuarios para el usuario de ventas.
- Si el usuario activo es compras@mail.com, la variable bandera será TRUE porque si existe el valor 2 dentro de la tabla de Usuarios para el usuario de compras.
- Para cualquier otro usuario, la variable bandera devuelve FALSE.
Ahora creamos 2 botones. Seleccionamos el primero y, en el menú de opciones de visualización, activamos la opción Acción.

Seleccionamos la opción Navegación de páginas. Luego en la opción Destino seleccionamos el botón de formato condicional.

Se abrirá una ventana donde seleccionaremos la medida Control Usuario Ventas.

Repetimos el proceso para el otro botón, utilizando la otra medida de control.
Por último, agregamos en todas las páginas ocultas un botón Home que nos permita volver a la página de Inicio cuando estemos navegando.

Para probar que todo esté funcionando seleccionamos la opción Modelado > Ver Como

Se abrirá una ventana que nos permitirá ver el reporte de la forma en que lo vería el usuario que pongamos en el campo Otro usuario.

Ahora nos paramos sobre el botón de ventas y navegamos usando Ctrl + Click.

Al hacer click el botón nos redireccionará a la página de Ventas.

Al estar viendo el tablero como el usuario de ventas@mail.com, si hiciéramos click en el botón de compras seremos redirigidos a la pagina de usuario no autorizado.
En el caso del usuario compras@mail.com, este podrá acceder a ambas paginas ya que lo definimos de esa forma en nuestra tabla de Usuarios.
¡Listo!, con esto los usuarios que intenten acceder a las páginas del reporte tendrán que hacerlo desde la página de Inicio y si no están registrados en nuestra tabla de usuarios, no podrán acceder a los datos. Dejo el ejemplo de pbix en este enlace.