Como criar um gráfico de imagem dinâmica em Power BI: passo a passo
Este tutorial mostra como criar um visual que apresenta imagens dinâmicas em Power BI (por registo ou por medida) — útil para catálogos, relatórios de produto ou painéis com pictogramas condicionais. Explico o porquê das opções (URL, Base64, coluna/medida) e um passo a passo prático para evitar erros comuns de acesso e formatação.
Pré-requisitos
- Power BI Desktop (versão recente).
- Dados com pelo menos uma coluna de identificador do item e uma coluna com URL de imagem ou nome de ficheiro.
- Conhecimentos básicos de Power Query e DAX.
Passo 1: Escolher entre URL pública, servidor protegido ou Base64
Antes de mais, decida como as imagens vão chegar ao relatório: via URL pública (ex.: CDN), via servidor protegido (ex.: SharePoint, Azure Blob) ou inline (Base64). A escolha afeta a segurança, o desempenho e se utiliza coluna ou medida em Power BI.
Passo 2: Preparar os dados no Power Query
No Power Query, normalize os caminhos/URLs das imagens e crie uma coluna final que o Power BI possa ler. Se tiver apenas nomes de ficheiro, concatene o caminho base; para SharePoint ou Blob pode construir o URL com token, se necessário.
// Exemplo: adicionar coluna com URL completo no Power Query (M)
= Table.AddColumn(#"Tabela Inicial", "ImageURL", each "https://cdn.exemplo.com/images/" & [FileName])
Se preferir Base64 (incorporar a imagem), converta o conteúdo do ficheiro para Base64 em Power Query e devolva uma coluna como "data:image/png;base64,{string}". Tenha em atenção o tamanho do modelo.
Passo 3: Carregar a tabela e definir categoria de dados
Carregue os dados para o modelo e, no separador Model ou na vista de Dados, seleccione a coluna ImageURL. Em "Categoria de Dados" escolha "Image URL" (ou "Image" em algumas versões). Isto indica ao Power BI para tratar os valores como imagens.
Passo 4: Criar um visual de imagem por linha (tabela com imagens)
Para mostrar imagens por registo, adicione uma Tabela ou Matriz e coloque a coluna ImageURL no campo desejado. O Power BI renderiza a imagem se a coluna estiver 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])
)
Se pretender usar uma medida (ex.: imagens condicionais), crie a medida como cadeia de texto com o URL e utilize-a num visual compatível com medidas que retornam Image URL (nem todos os visuais aceitam medidas como imagens).
Passo 5: Usar um visual personalizado para mais flexibilidade
Os visuais nativos têm limitações (ex.: medidas como Image URL nem sempre funcionam). Instale um visual do marketplace como "Image by CloudScope" ou "Card with States" para suportar imagens via medida ou Base64. Importe o visual e arraste a medida/coluna para o campo de imagem.
Passo 6: Tratar erros comuns
Erros frequentes: imagens não aparecem (CORS/segurança), URLs incorretos, imagens demasiado grandes, ou modelos inchados com Base64. Soluções rápidas:
- Verifique a URL diretamente no browser para confirmar o acesso público.
- Se o servidor exigir autenticação, use um conector (SharePoint/Azure) ou um proxy público seguro.
- Prefira URLs públicas ou CDN para desempenho; utilize Base64 apenas para poucas imagens pequenas.
- Marque a coluna como Image URL e atualize o visual.
Verificar o resultado
Confirme que as imagens aparecem nas linhas esperadas, que as condicionais (medidas) alteram a imagem quando modifica filtros e que não há grandes impactos na memória. Teste com diferentes utilizadores (se existir RLS ou conteúdo protegido) e abra o relatório no Power BI Service para validar publicações e eventual bloqueio por CORS.
Conclusão
Após este processo tem um relatório com imagens dinâmicas por registo ou por medida, útil para catálogos, indicadores visuais ou estados. Próximos passos: experimentar Base64 para ícones pequenos, usar um visual personalizado para animações ou otimizar imagens no CDN. Dica: se as imagens falharem no Service, verifique permissões e CORS no servidor de origem.