Forum Discussion

mjfulke's avatar
mjfulke
Microsoft Employee
8 years ago
Solved

How to use Images Stored in a SQL Server Table with Power BI

 Power BI has several options to display images in a report or dashboard but they mostly require that the image is a url to a publicly accessible website.    What I'll show you in this post is a way to take images stored in a database and bind them to a table visualization.   This will work with lots of visuals that display images.   My use case was to display chart images generated from R using SQL Server's Machine Learning Server


@Meagan Longoria recently introduced me a great article from @SQLJason Embedding Images in Power BI using Base64.   This gave me all the information I needed to look at solution to bind image data stored in a SQL Server table.   

Definitely read SqlJason's article, paying close attention to limitations etc.  This solution is meant for relatively small images you would show in a report.  If you use it for large images it will likely fail.  Reduce the resolution in those cases.

 

Getting images into SQL Server

 Go to your favorite SQL Server and create a table and insert some images.  Here's my sample code to give you one way you can get images into a database table

 

--CREATE Table Logo
--(
--    LogoId int,
--    LogoName varchar(255),
--    LogoImage image
--)

INSERT INTO dbo.Logo
( 
  LogoId,
  LogoName,
  LogoImage
)  
SELECT  1,'Power BI',  
      * FROM OPENROWSET  
      ( BULK 'C:\Users\me\Desktop\LogoDemo\powerbi.png',SINGLE_CLOB)  as ImageFile

INSERT INTO dbo.Logo
( 
  LogoId,
  LogoName,
  LogoImage
)  
SELECT  2,'Azure',  
      * FROM OPENROWSET  
      ( BULK 'C:\Users\me\Desktop\LogoDemo\azure.png',SINGLE_CLOB)  as ImageFile

INSERT INTO dbo.Logo
( 
  LogoId,
  LogoName,
  LogoImage
)  
SELECT  3,'Microsoft',  
      * FROM OPENROWSET  
      ( BULK 'C:\Users\me\Desktop\LogoDemo\microsoft.png',SINGLE_CLOB)  as ImageFile

 

Get the image data using Power BI Desktop

Now that you have some images in a SQL table, switch over to Power BI Desktop and get the data.
(In Desktop:  Get Data, SQL Server, Login to your SQL Server, and pick your table that stores images. 



Change the binary column to Text

 

 

 

Now create a custom column and append a URI to tell Power BI these are png images.   If using jpeg use jpeg instead of png.

 

 

Close & Apply the data.


This is an important step. In the Modeling tab, change the image column ([Logo]) to a  Data Category of Image URL.

 

 

Now you can use a visuals, like a table, and display your images that came from a SQL Server vs. having to find a way to store images on a public internet site.   

 

 

 

I hope this works for you like it did for me.  


 

18 Replies

  • Tried all the steps laid out here, but it didn't work. All I see are either the URLs or the "broken image" symbols. Figuring it might be an image size issue, I reduced the images to less than 100K and still no joy. I checked the Ideas forum and this one was first introduced over THREE YEARS ago with no response from Microsoft. Why do we have to take in-house images sitting in tables and export them to a file server, then link to them in order to display them in an in-house report? It's beyond ridiculous.
    • andy_scott42's avatar
      andy_scott42
      Helper II

      I've found that the maximum length a string can have to be processed by Power BI is 32766 characters.

      So once you've converted your image to a Base64 string, if the length of the string is greater than this then it will crop the image.

       

      • lunds007's avatar
        lunds007
        New Member

        I ran into the same issue!  Cropped photos :smileymad: Anybody come up with a genius solution to this yet?

  • Anonymous's avatar
    Anonymous
    Not applicable

    Is there a size limit for the png?

    • mjfulke's avatar
      mjfulke
      Microsoft Employee

      There is a limit.  Nothing documented but they have to be "smaller".  I tested with a jpg that was 3MB and it failed to render.

      • andy_scott42's avatar
        andy_scott42
        Helper II

        I'm using this method to display images in a table and some of the images are being cropped. Is this because the image size is too big? 

  • Is it possible to use images stored as binary data  - varbinary(max) - stored in SQL Server?

    • mjfulke's avatar
      mjfulke
      Microsoft Employee

      The length of the encoded data needs to be less than 32766 characters.

  • Hi guys,

     

    Does anyone ever try or know how to do it with Direct Query ?

     

    I tried with import and it's works, but when it is comes to Direct Query since it needs change data type on the column, it is not allowed unless I changed it to Import.

     

    Anyone know how ?

     

    Thanks

     

    • MNeish's avatar
      MNeish
      New Member

      admin_xlsior I am not sure if you are still having this problem but what I found is I just created a Veiw within my SQL DB and used Json to convert the images from bianary to Base64Jpeg. The you would just pull the images from the view you created, but I am having a problem with the images being to large for Power BI to render them. 

       

      CREATE VIEW TNIPIC_VIEW AS
      SELECT BACK
      FROM OPENJSON(
      (
      SELECT CUSTOMER_ID, BACK, CHECKED_IN
      FROM (SELECT DBO.YOUR DATABASE AS BACK) T
      FOR JSON AUTO
      )
      )WITH (BACK VARCHAR(MAX))

  • Hi all!

     

    I followed all the steps.

    But I have issues with the images I upload (from PowerApps to SQL) with the cell phone, as a photo.

     

    I uploaded some as png from the PC and those look.

    JPEG images are not fully loaded.