Utilización de imágenes embebidas en una base de datos

Aun cuando en los tiempos de Power Pivot era posible la utilización de imágenes embebidas (con formato binario) en bases de datos, Power BI exige el uso de una URL que apunte a la imagen en cuestión, lo que descarta el uso de estas imágenes embebidas para las que no tenemos una URL.

Afortunadamente es posible crear un campo en el editor de consultas con la URL en cuestión y su uso en Power BI. Para ver cómo se puede conseguir, vamos a utilizar la base de datos Access Adventureworks.accdb de Microsoft, base de datos que puede ser descargada de numerosos sitios web. Una vez nos conectamos a esta fuente de datos y seleccionamos la tabla que nos interesa, DimEmployee, podemos ver en el editor de consultas que incluye un campo, EmployeePhoto, con formato binario, que se supone que contiene la fotografía del trabajador correspondiente:

Campo con formato binario conteniendo la imagen

Ni que decir tiene que si cargamos los datos tal cual, este campo simplemente va a desaparecer de nuestro modelo de datos. Lo que vamos a hacer es:

  1. Convertir este campo a formato de texto
  2. Crear una URL que incluya el texto anterior

Para convertir el campo en cuestión a formato de texto no basta con cambiar su tipo como haríamos con cualquier otro campo, pues es necesario especificar que la codificación sea de tipo "Base 64". Con este objetivo vamos a crear una columna personalizada a la que vamos a llamar, por ejemplo, EmployeePhoto_text, con el siguiente código M:

Binary.ToText([EmployeePhoto], BinaryEncoding.Base64)

Conversión de la imagen a formato de texto

A continuación deberemos asegurarnos de que el nuevo campo tiene formato de texto (pues por defecto se creará sin un formato establecido, como se puede ver en la siguiente imagen):

Campo de imagen convertido a texto

Para crear el campo con la URL -al que podemos llamar Photo, por ejemplo- deberemos crear una nueva columna personalizada con el siguiente código:

"data:image/jpg;base64, " & [EmployeePhoto_text]

Campo con la URL generada

En este caso se trata de imágenes jpg. Si fuesen imágenes png, habría que crear la columna personalizada con el formato en cuestión, es decir:

"data:image/png;base64, " & [EmployeePhoto_text]

Nuevamente deberemos asegurarnos de que este campo recibe formato de texto.

Campo con la URL de cada imagen

Y cerramos y aplicamos...

Ya en la interfaz principal de Power BI deberemos configurar el campo Photo correctamente, para lo que lo seleccionamos (en la columna de campos) y en Modelado > Propiedades > Categoría de datos seleccionamos la categoría "Dirección URL de la imagen":

Categorización del nuevo campo creado

Ahora ya podemos arrastrar el campo hasta el lienzo, en el que se creará por defecto una tabla con las imágenes:

Tabla con las imágenes

Este método tiene, sin embargo, dos problemas principales: no pueden mezclarse imágenes con formato distinto (jpg y png, por ejemplo) y el tamaño máximo del string resultante de convertir la imagen no puede ser mayor de 32.766 caracteres, lo que supone una limitación en el tamaño de las imágenes.

Enviado por admin el Mar, 30/07/2019 - 17:04