Dashboard Design

Using images, logos and icons in Data Studio

Images in Data Studio split into two different things, and most of the trouble comes from not noticing. The failures are the interesting part.

Lazarina Stoy·

Images, Logos and Icons in Data Studio: The Complete Guide

Images in Data Studio split into two different things, and most of the trouble comes from not noticing. There’s the picture you place on the canvas: a logo, an icon, a band behind a cover. And there’s the image that comes out of your data, a column of product shots or status icons drawn inside a table. They’re set up in different places, and they fail in different ways.

This tutorial covers both, step by step: placing a logo once, with alt text, on every page; why Google Drive links let you down; building an image field with IMAGE(), including a four-line status column on GA4; the three documented ways image fields break and how to test for them; then icons, backgrounds and a checklist to run before the report goes out.

Putting an image on a Data Studio canvas

Data Studio takes the common image formats, and Google’s documentation names PNG, JPG and SVG. The third is the one to reach for: use SVG for logos wherever you have one: it stays sharp at any size and after any change of canvas, and it’s usually a smaller file than the PNG.

Three settings on the image’s Setup tab are worth using every time:

Setting What it does Set it to
Preserve aspect ratio Keeps the image’s proportions when a viewer’s window resizes the report On, for every logo
Image link URL Makes the image clickable. The address has to start with https. The client’s site, or leave empty
Accessibility › Alt text Gives a screen reader something to say. Added in the 24 July 2025 release. The organisation’s name, for a logo

Preserve aspect ratio covers the viewer’s window, not your own hand: when you resize the image yourself, drag a corner and check it hasn’t stretched, because a squashed client logo is the fastest way to make a report look careless.

  1. Insert it. Insert › Image (or the image icon in the toolbar), then upload the SVG or PNG, or paste its https address.
  2. Lock its shape. In the image’s Setup tab, turn on Preserve aspect ratio.
  3. Name it. Under Accessibility, fill in Alt text with the organisation’s name.
  4. Make it report-level. Right-click the image and choose Make report-level (it’s also under Arrange), so it’s on every page and maintained in one place.
  5. Bring it forward. In Theme and layout › Layout, set Report-level component position to Top, so no page’s background shape hides it.
A logo selected on a Data Studio report canvas, with the Image properties panel highlighted showing the Image File name, a Preserve Aspect Ratio toggle, the Image Link URL field and an Accessibility alt text field reading MLforSEO Logo
Steps 2 and 3: Preserve Aspect Ratio near the top of the Setup tab, alt text at the bottom. View full size

What to write in the alt text depends on the image’s job. A logo wants the organisation’s name and nothing else: “Acme Corp”, not “Acme Corp logo image”. A purely decorative band or shape wants it left empty, so a screen reader skips it rather than announcing the furniture. An image that carries information, such as a legend, a diagram or a screenshot, wants a sentence saying what it shows, because nothing else in the report will.

Place the logo once, not on every page

The quick way to get a logo onto every page is to paste it onto each one. Then the client rebrands, and there’s a copy on every page to find. Harbour & Fern, the homeware retailer in my free ebook, had exactly that: the logo pasted onto each of its ten report pages as a PNG, at three slightly different sizes, and when the logo was redrawn, two pages kept the old one for a month.

The fix is steps 4 and 5 above. One SVG, top left in the header band, aspect ratio preserved, alt text “Harbour & Fern”, made report-level with the position set to Top. Within the report, the next redesign is one replacement, not ten. Do it on the brand’s master report and every report copied from it starts with the logo in place. Copying and reusing a template covers the master-report setup.

The Data Studio right-click menu on a selected component, with Make report-level highlighted between Align vertically and Control visibility
Step 4: the right-click menu is the same for every component. Shown here on a date control; on a logo, Make report-level sits in the same place. View full size
Animation showing a report-level component hidden behind a page background, then brought forward by setting Report-level component position to Top
Step 5: report-level components sit behind page content until you change this one setting. View full size

Google’s documentation says report-level components appear behind everything else on the page by default. If your logo vanishes the moment you add a background shape, that’s why. The layout and grid guide covers the rest of the Arrange menu.

Why Google Drive image links fail in Data Studio

Drive is where most marketers keep a logo, and it’s where many report images quietly fail.

The share link you copy out of Drive, the drive.google.com/file/d/FILE_ID/view kind, is the address of a viewer page, not of an image file, so Data Studio gets a web page where it expected a picture.

Other address forms built from the file’s ID circulate on Google’s forums, with mixed reports of success: drive.google.com/uc?export=view&id=FILE_ID and lh3.googleusercontent.com/d/FILE_ID are the two I see most. Neither is documented by Google, and I haven’t verified either in the product, so I don’t recommend one.

The advice that doesn’t depend on settling that: put report images somewhere with a stable public https address, such as the client’s own site, your site or any static host. It removes a whole category of failure, and the permissions question that comes with it.

Images that come out of your data

The second kind starts as a column of web addresses: product images, video thumbnails, country flags. You want the picture in the table rather than the link.

The route Google documents is the IMAGE() function in a calculated field. It takes a field or expression that gives a web address, plus optional alt text: IMAGE(image_URL, [alt_text]). That gives you two things a bare address can’t, alt text and an address you can build or choose with a formula. Google’s IMAGE page sets the rules:

  • Image fields only work in tables. Change the chart type and the image is ignored, or the address shows as text.
  • The picture’s size follows the column width. Widen the column to enlarge it.
  • A wrong address shows a broken-image icon, and so does an image type Data Studio doesn’t support.
  • To make the image clickable, pass the image field to HYPERLINK() as its image.

Setting a URL field’s type to Image in the data source is a shortcut people use, but Google’s IMAGE page doesn’t describe it, and it leaves you with no alt text. I treat IMAGE() as the method.

Build an image field, step by step

  1. Open the data source that holds the URL column (Resource › Manage added data sources › Edit), and click Add a field.
  2. Name it, for example “Thumbnail”.
  3. Write the formula. Google’s own example builds a YouTube thumbnail from the video ID: IMAGE(CONCAT('https://i.ytimg.com/vi/', External Video Id, '/hqdefault.jpg'), Video Title). For a column that already holds full addresses, it’s IMAGE(Image URL, Product name).
  4. Save, then add the field to a table as a dimension.
  5. Size it by widening the column until the picture reads.

Building a status column with IMAGE() and CASE

The most useful thing IMAGE() does is a status column: a tick, a warning or a cross beside each row, chosen by the data. On a GA4 data source, write the comparison on the conversion-rate metric the connector already provides. There’s nothing to sum, so no SUM(); GA4 sends its metrics already aggregated. (If your rate has to be built from a raw-row source such as a Google Sheet, build it first, then compare.) The field, with your own icon addresses:

CASE
  WHEN Conversion rate >= 0.03
    THEN IMAGE("https://example.com/icons/tick.svg", "On target")
  WHEN Conversion rate >= 0.015
    THEN IMAGE("https://example.com/icons/warn.svg", "Watch")
  ELSE IMAGE("https://example.com/icons/cross.svg", "Below target")
END

The thresholds are decimals, 0.03 for 3%, because a comparison works on the underlying value, not the formatted one. Use your source’s own name for the rate: GA4’s connector has more than one, and the one you compare should be the one the report shows.

Here’s what it renders on Harbour & Fern’s September channel table, from my free ebook’s sample data:

Channel Conversion rate Status (target 3%)
Email 4.20% ✓ On target
Paid search 3.85% ✓ On target
Direct 3.10% ✓ On target
Referral 1.95% ⚠ Watch
Organic search 1.42% ✗ Below target
Paid social 0.90% ✗ Below target
Organic social 0.55% ✗ Below target

Three things make it work in practice:

  • Host the three icons somewhere stable, for the same reasons as a logo: three files, uploaded once, used in every report you build.
  • Always fill the second argument. A column of ticks with no alt text means nothing to a screen reader.
  • Put the threshold in the column header, not in the reader’s head. Rename the field “Status (target 3%)” so nobody has to ask what a tick means.

The table also shows the judgement a status column forces. A cross on organic search and paid social says those channels miss a target that was never theirs: both bring people in earlier in the journey. The fix isn’t a different icon; it’s a target per channel, which the field can hold as one more WHEN line each. Chapter 20 of my ebook, Data Storytelling in Data Studio, makes the same case for conditional formatting: tie the symbol to a threshold the reader can see.

Three documented ways Data Studio image fields break

Three documented ways a Data Studio image field stops working: viewer's credentials, which Google says stop Image fields rendering; a copied data source, which arrives with image fields disabled; and a data control showing another dataset whose images sit on an untrusted domain, where the table shows the address instead
All three look the same to the reader: a picture that isn’t there, or an address where one should be.

These are the ones that cost an afternoon, and all three are in Google’s IMAGE page. Chapter 7 of my free ebook, The Marketer’s Guide to Dashboard Design, on images, logos and icons, sets the three out side by side: when each one happens, what the reader sees, and the fix.

What happens What the reader sees The fix
The data source uses viewer’s credentials No images: Google says Data Studio won’t render Image fields for such a source Switch the data source to owner’s credentials if the report needs pictures
The data source is a copy No images: every Image field arrives disabled in a copied data source Edit the data source and enable each Image field again
A data control switches to another dataset whose images come from a domain Data Studio doesn’t trust The image’s address in place of the picture; clicking it opens a dialog asking them to check the link Serve the images from a domain Data Studio trusts (Google says that includes most Google domains, without listing them), and check every dataset the control offers before the report goes out

1. Viewer’s credentials. Google doesn’t limit this to other viewers, so don’t expect the column to work for you and fail for the client: expect it not to render. The data source guide covers which credential mode to use and why.

2. Copying a data source disables them. If you’re distributing a template with image columns, re-enabling them belongs in your instructions: edit the data source, find each Image field, and choose Enable.

3. The trusted-domain dialog. On the default dataset the images appear. It’s when a data control shows a different dataset that images from an untrusted domain are swapped for their address. On a client report that reads as “something is wrong with this dashboard”, and a stable host alone doesn’t prevent it, so it’s the case the test below is for.

Test an image column the way the client will open it

Two of the three only show up in conditions the builder rarely sees: in someone else’s copy, and on a dataset other than the default. So I check every report with image columns three ways before it goes out:

  1. As a viewer: open it from a second Google account that only has view access.
  2. As a copy: make a copy of the report, as a client copying your template would, and look at the image column there.
  3. With the data control switched: if the page has a data control, pick each dataset it offers.

Icons in a report, and how to stop them looking assembled

Icons do two jobs in a report: marking sections so the eye can find them, and carrying status in a table. Four habits keep them from looking collected from three places:

  • One size. Pick one, 24 × 24 px works, and export every icon at it before you place any.
  • One family. An outline icon next to a filled one reads as a mistake, even to people who couldn’t say why.
  • Status by condition, never by hand. A hand-placed status icon is wrong the moment the data changes, which on a live report is immediately. Use the IMAGE() and CASE field above.
  • Emoji as a shortcut. In a field name or a chart title, an emoji needs no hosting, no address and no permissions. Whether it suits the client’s tone is your call.

Images as report backgrounds, and when to stop

A background image or a coloured band behind a cover page is fine; the cover page guide builds one on a band. A background image behind charts is almost always a mistake. It competes with the data for contrast, and it’s the fastest way to fail the 3:1 and 4.5:1 thresholds (WCAG’s minimums for chart marks and for text), which the colour palette guide works through.

If you want a branded field rather than white, use a flat colour or a very faint texture, then check a chart’s gridlines are still visible on top of it. If they aren’t, the background has won and the data has lost.

An image checklist before a Data Studio report goes out

  • Logo is SVG where possible, aspect ratio preserved, alt text filled in
  • Logo is report-level, not copied onto every page, with Report-level component position set to Top
  • No report images hosted on Google Drive
  • Image columns only on data sources with owner’s credentials, since Data Studio won’t render Image fields under viewer’s credentials
  • Image columns tested as a viewer, in a copy, and with the data control switched
  • If the report is a template, a note about re-enabling image fields after copying
  • Icons all one size and one family; status icons driven by a condition, with the threshold in the header

Frequently asked questions

What image formats does Data Studio support?

Google’s documentation names PNG, JPG and SVG among the common formats it takes. Use SVG for logos wherever you have one, because it stays sharp at any size and after a canvas change.

Why aren’t my Google Drive images showing in Data Studio?

The share link Drive gives you points at a viewer page rather than an image file, so it can’t render. Other address forms circulate on Google’s forums, but none is documented and I haven’t verified them, so the reliable answer is to host report images somewhere with a stable public https address instead.

Why are the images in my Data Studio table not showing?

Check the data source’s credentials first: Google says Data Studio won’t render Image fields when a data source uses viewer’s credentials, so switch it to owner’s credentials. If the data source is a copy, its image fields arrive disabled and need enabling again. If a data control is showing another dataset, images from an untrusted domain show as their address instead.

How do I add alt text to an image in Data Studio?

Select the image, and in its Setup tab fill in Accessibility › Alt text. For an image that comes from data, use the second argument of IMAGE(url, alt_text).

Where to go next on report visuals

Shopping Cart
Scroll to Top