Cómo crear un gráfico de imagen dinámica en Power BI: paso a paso
Este tutorial muestra cómo crear un visual que presenta imágenes dinámicas en Power BI (por registro o por medida) —útil para catálogos, informes de producto o paneles con pictogramas condicionales. Explico por qué de las opciones (URL, Base64, columna/medida) y un paso a paso práctico para evitar errores comunes de acceso y formato.
Requisitos previos
- Power BI Desktop (versión reciente).
- Datos con al menos una columna de identificador del ítem y una columna con URL de imagen o nombre de archivo.
- Conocimientos básicos de Power Query y DAX.
Paso 1: Elegir entre URL pública, servidor protegido o Base64
Antes que nada, decida cómo llegarán las imágenes al informe: vía URL pública (p. ej.: CDN), vía servidor protegido (p. ej.: SharePoint, Azure Blob) o inline (Base64). La elección afecta la seguridad, el rendimiento y si utiliza columna o medida en Power BI.
Paso 2: Preparar los datos en Power Query
En Power Query, normalice las rutas/URLs de las imágenes y cree una columna final que Power BI pueda leer. Si solo tiene nombres de archivo, concatene la ruta base; para SharePoint o Blob puede construir la URL con token, si es necesario.
// Exemplo: adicionar coluna com URL completo no Power Query (M)
= Table.AddColumn(#"Tabela Inicial", "ImageURL", each "https://cdn.exemplo.com/images/" & [FileName])
Si prefiere Base64 (incrustar la imagen), convierta el contenido del archivo a Base64 en Power Query y devuelva una columna como "data:image/png;base64,{string}". Tenga en cuenta el tamaño del modelo.
Paso 3: Cargar la tabla y definir categoría de datos
Cargue los datos al modelo y, en la pestaña Model o en la vista de Datos, seleccione la columna ImageURL. En "Categoria de datos" elija "Image URL" (o "Image" en algunas versiones). Esto indica a Power BI que trate los valores como imágenes.
Paso 4: Crear un visual de imagen por fila (tabla con imágenes)
Para mostrar imágenes por registro, añada una Tabla o Matriz y coloque la columna ImageURL en el campo deseado. Power BI renderiza la imagen si la columna está marcada como Image URL.
// Exemplo DAX: medida para escolher URL por condição
SelectedImageURL =
IF(
MAX(Produtos[Stock]) <= 0,
"https://cdn.exemplo.com/images/outofstock.png",
MAX(Produtos[ImageURL])
)
Si desea usar una medida (p. ej.: imágenes condicionales), cree la medida como cadena de texto con la URL y utilícela en un visual compatible con medidas que retornan Image URL (no todos los visuales aceptan medidas como imágenes).
Paso 5: Usar un visual personalizado para más flexibilidad
Los visuales nativos tienen limitaciones (p. ej.: medidas como Image URL no siempre funcionan). Instale un visual del marketplace como "Image by CloudScope" o "Card with States" para soportar imágenes vía medida o Base64. Importe el visual y arrastre la medida/columna al campo de imagen.
Paso 6: Tratar errores comunes
Errores frecuentes: las imágenes no aparecen (CORS/seguridad), URLs incorrectas, imágenes demasiado grandes, o modelos hinchados con Base64. Soluciones rápidas:
- Verifique la URL directamente en el navegador para confirmar el acceso público.
- Si el servidor exige autenticación, use un conector (SharePoint/Azure) o un proxy público seguro.
- Prefiera URLs públicas o CDN para rendimiento; utilice Base64 solo para pocas imágenes pequeñas.
- Marque la columna como Image URL y actualice el visual.
Verificar el resultado
Confirme que las imágenes aparecen en las filas esperadas, que las condicionales (medidas) cambian la imagen cuando modifica filtros y que no hay grandes impactos en la memoria. Pruebe con distintos usuarios (si existe RLS o contenido protegido) y abra el informe en Power BI Service para validar publicaciones y posible bloqueo por CORS.
Conclusión
Tras este proceso tiene un informe con imágenes dinámicas por registro o por medida, útil para catálogos, indicadores visuales o estados. Próximos pasos: probar Base64 para iconos pequeños, usar un visual personalizado para animaciones u optimizar imágenes en el CDN. Consejo: si las imágenes fallan en el Service, verifique permisos y CORS en el servidor de origen.