Ya utilizas powerBI de costumbre para analizar tu negocio y te gustaría ir un paso más allá y compartir con los usuarios de negocio el mismo informe.
La gente cae en el error de generar un IFrame qué es PÚBLICO en una página web qué es privada de la empresa. Esto es un error porque pulsando el F12 puedes obtener la URL del Iframe y además, todos los usuarios ven toda la información.
Negocio siempre quiere lo siguiente:
POWERBI TIENE SOLUCIÓN A ESTO y es POWERBI EMBEDDED
El objetivo de este manual es unificar y simplificar la creación de una aplicación de powerBI y su uso mediante la API Rest que ofrece Azure y powerBI Embedded.
Antes de empezar, hay que cumplir con los siguientes requisitos:
Si eres un usuario nuevo que no está registrado en Azure deberías registrarte, para ello hazlo en este formulario.
Se necesita crear un Workspace obligatoriamente para poder utilizar el servicio de powerBI Embeded. No se puede utilizar “Mi área de trabajo”.
Desde dentro de la plataforma de powerBI hay que crear una nueva área de trabajo. Para este ejemplo he creado “PBI_Embed”.
Después de crear el área de trabajo, crear con powerBI Desktop un informe simple, sin datos que solo contenga un texto o título y publicarlo al área de trabajo creada.
Una vez se tiene el área de trabajo y los informes con los datos que se quieren compartir, ahora hay que dar permisos a la API de powerBI en azure para poder usar PowerBI Embedded.
El resumen del formulario es el siguiente:
Ya está disponible, ahora a crear una aplicación de ejemplo.
Primero de todo hay que instalar Postman (facilita mucho el desarrollo y pruebas) y un editor de texto como puede ser NotePad++. Lo usaremos para probar la obtención del token de acceso etc…
La autenticación con azure es el primer paso para realizar. Con la autenticación de azure recibiremos un token con el que luego se usará para interactuar con la API Rest de PowerBI.
Los datos necesarios son:
Es el Id. De aplicación (cliente) que se encuentra dentro de la aplicación creada
Es la clave que hay que generar para poder hacer la autenticación con Azure. El valo lo muestra cuando generas el secreto y luego te lo oculta por lo que hay que anotárselo o crear uno nuevo cuando se pierda el valor antiguo.
Después de la autenticación con azure y obtención del token ya podemos hacer uso de la API Rest de powerBI.
Para empezar, necesitamos los datos del workspace y del report
Después de obtener el token de azure y el ID del workspace y del reportID, se debe hacer una petición GET autenticándose con el token de azure y enviando en la URL los ID de workspace y de report
Con la clase que he desarrollado, he implementado 2 métodos propios, uno para obtener el token y otro para obtener la URL para embeber. El objetivo es automatizar lo que se ha hecho con Postman. Se puede ver que los datos necesarios son:
El método Connect se autentica con la API de Azure para obtener el token.
El método GetEmbedURL obtiene la URL para embeber el informe en HTML con el SDK de powerBI para Javascript
Como resultado de lo anterior ya se tiene todos los datos necesarios para obtener el informe e incrustarlo.
<script type="text/javascript" language="javascript" src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script type="text/javascript" language="javascript" src="https://rawgit.com/Microsoft/PowerBI-JavaScript/master/dist/powerbi.min.js"></script> </script>
Ahora que ya tengo toda la información, hay que programar el front con javascript.
He desarrollado algo muy simple con el objetivo de poder interactuar con la librería de powerBI en jasvascript y aplicar filtros etc…
El código Javascript para hacer uso de la API de powerBI e incrustar en el HTML es el siguiente.
Con este código después de haber obtenido con C# los datos:
Podemos usar la API con jasvascript y también con el enlace porque ya tenemos los 3 datos que solicitan:
La función cargarDashboardSimple() carga en un div HTML el Dashboard
Muy importante tener en cuenta que el tipo de Token es Aad y no Embed. Este tipo de Token lo que hace es utilizar el token obtenido con la autenticación de Azure.
Al importar el cuadro de mandos veremos todos los datos.
Esta función elimina el panel de filtros del lado derecho del informe de powerBI
Esta función aplica un filtro en el informe pero este filtro se puede modificar desde el navegador web.
El problema de incrustar un informe con todos los datos y luego filtrar los datos a través del SDK de powerBI es que cualquier “listillo” que tenga algo de conocimientos de javascript puede modificar la función del filtrado.
Ejemplo
Ejecutando la función “aplicarFiltro()” lo que hace es filtrar todo el informe por el usuario con el ID = 1. Esto es lo que quería. BIEN.
Luego, si redefino la función y modifico el ID del usuario podré ver otro usuario
Después de redefinir la función y ejecutar la función, ahora estoy visualizando los datos de los usuarios 3 y 4. ESTO NO PUEDE SER ASÍ
La solución pasa por obtener un Token de powerBI embebido.
La URL a utilizar es esta:
Y se tiene que enviar el token de azure con la autenticación en el Header.
Después hay que construir un objeto JSON para enviar en el BODY
El Token que es obtiene es un token del tipo Embed y no del tipo Aad. Para utilizarlo con el SDK Javascript de powerBI es importante tener esto en cuenta.
Para usar esta autenticación, el informe que se construya en el Dashboard hay que crear un nuevo ROL
Y una vez hecho lo anterior, con el token obtenido del tipo “Embed token” ya se puede consultar el report.
De esta forma no hay manera de violar la seguridad del reporte.
Primero de todo hay que definir las clases para poder construir el siguiente objeto
Y esto lo hacemos con el siguiente código
Con las clases anteriores al construir un objeto de la clase PBI_Body se puede serializar y obtener un objeto JSON como el que hay en la imagen de Postman.
Con el siguiente método que se ejecuta a través del controlador y es llamado con los parámetros:
El código del controlador es el siguiente.
Y el código de la vista es el siguiente. La vista necesita esta información:
Ahora cuando ejecutamos el proyecto podemos observar lo siguiente:
Como se puede apreciar, solo se visualizan los datos del usuario 2 y ninguno más, ya no tenemos la posibilidad de filtrar por otro usuario ni modificando el javascript de la web y esto es gracias a que:
He diseñado un único informe con todos los datos de todos los usuarios, he creado un rol para poder filtrar por usuario autenticado y para cada usuario que hace login en la web solo visualiza sus datos
Si se quiere desarrollar un configurador para que powerBI funcione en Producto los datos a guardar en BBDD para cada usuario debería ser los siguientes:
Profesional con experiencia en el desarrollo de software, proyectos web y proyectos de business Intelligence y big data. Fundador y autor en DataManagement.es donde he escrito artículos como: - El modelo de estrella. El pilar fundamental del Business Intelligence - Automatización de procesos con Pentaho - Proceso ETL con python desde cero y paso a paso - web scraping de empresas con python y powerbi Deportista de alto nivel desde los 15 años, hago atletismo y mi especialidad es el medio fondo con marcas: - 1000: 2.42 - 1500: 4.10 - 3000: 8.58 - 5000: 15.44 - 10000: 32.53 Del deporte he aprendido que con esfuerzo se puede conseguir grandes cosas. Si mi perfil te es interesante, no dudes en contactar conmigo. fran@datamanagement.es
Lo siento, debes estar conectado para publicar un comentario.
Virgen del pilar nº4, ático H
03330 Crevillente (Alicante)
Francisco Rodriguez Alfaro