(+351) 21 24 10006  ·  info@bconcepts.pt
Carnaxide, Lisbon

How to create a dynamic image chart in Power BI: step by step

João Barros 15 de October de 2026 4 min read

This tutorial shows how to create a visual that displays dynamic images in Power BI (per record or per measure) — useful for catalogs, product reports or dashboards with conditional pictograms. I explain the reasons for the options (URL, Base64, column/measure) and a practical step-by-step to avoid common access and formatting errors.

Prerequisites

  • Power BI Desktop (recent version).
  • Data with at least one item identifier column and one column with image URL or file name.
  • Basic knowledge of Power Query and DAX.

Step 1: Choose between public URL, protected server or Base64

First, decide how the images will be delivered to the report: via public URL (e.g.: CDN), via protected server (e.g.: SharePoint, Azure Blob) or inline (Base64). The choice affects security, performance and whether you use a column or a measure in Power BI.

Step 2: Prepare the data in Power Query

In Power Query, normalize the image paths/URLs and create a final column that Power BI can read. If you only have file names, concatenate the base path; for SharePoint or Blob you can build the URL with token, if necessary.

// Example: add column with full URL in Power Query (M)
= Table.AddColumn(#"Tabela Inicial", "ImageURL", each "https://cdn.exemplo.com/images/" & [FileName])

If you prefer Base64 (embed the image), convert the file content to Base64 in Power Query and return a column like "data:image/png;base64,{string}". Be mindful of model size.

Step 3: Load the table and set data category

Load the data into the model and, in the Model tab or Data view, select the ImageURL column. Under "Data Category" choose "Image URL" (or "Image" in some versions). This tells Power BI to treat the values as images.

Step 4: Create an image visual per row (table with images)

To show images per record, add a Table or Matrix and place the ImageURL column in the desired field. Power BI will render the image if the column is marked as Image URL.

// DAX example: measure to choose URL by condition
SelectedImageURL =
IF(
  MAX(Produtos[Stock]) <= 0,
  "https://cdn.exemplo.com/images/outofstock.png",
  MAX(Produtos[ImageURL])
)

If you want to use a measure (e.g.: conditional images), create the measure as a text string with the URL and use it in a visual compatible with measures that return Image URL (not all visuals accept measures as images).

Step 5: Use a custom visual for more flexibility

Native visuals have limitations (e.g.: measures as Image URL do not always work). Install a visual from the marketplace such as "Image by CloudScope" or "Card with States" to support images via measure or Base64. Import the visual and drag the measure/column into the image field.

Step 6: Handle common errors

Frequent errors: images not appearing (CORS/security), incorrect URLs, images too large, or bloated models with Base64. Quick fixes:

  • Check the URL directly in the browser to confirm public access.
  • If the server requires authentication, use a connector (SharePoint/Azure) or a secure public proxy.
  • Prefer public URLs or CDN for performance; use Base64 only for a few small images.
  • Mark the column as Image URL and refresh the visual.

Verify the result

Confirm that images appear in the expected rows, that conditionals (measures) change the image when you modify filters and that there are no large memory impacts. Test with different users (if RLS or protected content exists) and open the report in the Power BI Service to validate publishing and possible blocking due to CORS.

Conclusion

After this process you will have a report with dynamic images per record or per measure, useful for catalogs, visual indicators or states. Next steps: experiment with Base64 for small icons, use a custom visual for animations or optimize images on the CDN. Tip: if images fail in the Service, check permissions and CORS on the origin server.