Nuestro siguiente caso surge de un requerimiento del todo comprensible ¿cómo hacemos para que el usuario solo vea ciertos datos de MSDyn365FO del informe? ¿es posible agregar seguridad a PowerBI?
La respuesta es que sí, pero tiene sus limitaciones.
Principalmente existen dos formas de hacerlo: usando roles que filtran información o usando el usuario de forma dinámica.
El primer método es muy práctico cuando directamente queremos restringir información o el acceso a ciertos usuarios (o tienen acceso o no lo tienen), o incluso cuando queremos filtrar información por grupos de usuarios muy definidos (imaginemos por países). En este caso desde PBI podemos crear un rol por país y asignarle un filtrado a la tabla que tenga los países.
Dentro de la pestaña Modelado > Administrar Roles > Crear:
Haciendo esto, cuando publiquemos este cuadro de mandos con un usuario, podremos indicarle el ROL en la pestaña de seguridad y así cuando el usuario acceda, esté filtrará por el valor indicado (País de nacionalidad=España).
Dentro de Desktop existe una funcionalidad muy útil que se llama “Ver como roles” para poder simular el acceso con un rol específico.
Como comentábamos esta funcionalidad tiene sentido cuando el dato no es demasiado dinámico, pero ¿qué tendríamos que hacer si quiero filtrar por ejemplo por el empleado, o aún más complejo, si quiero ver todos los datos del centro de coste o departamento al que pertenece el empleado?
Si es solo el primer caso, solo los datos de un empleado, y disponemos de esa información en las tablas transaccionales (por ejemplo, pedidos de compra creados por mí) tendremos que hacer lo siguiente:
Crearemos un rol genérico denominado Empleado, y en él filtraremos la tabla de usuarios por el mail del usuario que se obtiene automáticamente usando la función USERPRINCIPALNAME(), si queremos obtener el id del usuario podremos utilizar USERNAME()
Esto hará que la tabla de usuarios filtre por el usuario del que accede y si hemos relacionado el resto de las tablas de forma adecuada solo nos mostrará los datos de ese usuario. (Existe un check en las relaciones “Aplicar filtro de seguridad en ambos sentidos” que se debe marcar).
Este ejemplo es sencillo, pero si lo que necesitamos es obtener un dato del usuario y filtrar con él el resto de las tablas (ej. Departamento) deberemos añadir bastante más tablas.
En la pantalla adjunta podéis ver las tablas necesarias para mostrar todos los pedidos de compra y acuerdos de compra de todos los empleados que trabajan en el departamento del usuario que accede al informe:
Y os dejo el detalle de relaciones:
El truco en este informe es que tuvimos que duplicar las entidades de compras para añadir el campo que las relaciona con los acuerdos comerciales ya que por defecto no vienen.
Además, y dado que los id pueden repetirse por entidad legal, siempre creamos una columna compuesta con la entidad legal + el id correspondiente. Así mismo, y dado que las dimensiones financieras se incluyen en una sola columna, extraemos cada parte a columnas independientes de forma que podamos relacionarlas con las tablas maestras.
Con todo esto, conseguimos añadir seguridad a nuestros informes de PBI.