How to share a Tableau dashboard

Tableau's sharing options sit at two extremes: publish to the entire internet, or license every reader. There is very little in between, which is why the question comes up so often.

The options, honestly

Tableau Public. Free, easy, and a public gallery. Workbooks published there are on the open web and, by default, downloadable along with their data. It is a superb place to put a portfolio piece or a civic-data visualization. It is not a private sharing mechanism, and treating it as one is how internal figures end up indexed.

Tableau Server / Tableau Cloud. The real answer for internal work: live dashboards, row-level security, subscriptions, alerts. Viewing requires a licensed site role — Viewer at minimum — so every reader is a seat. For an analytics org that is fine. For "the client needs to see this," it is not.

Send a packaged workbook. A .twbx bundles the workbook with its extract. The recipient needs Tableau Desktop or the free Tableau Reader, and you have handed them the entire extract, which is usually more than the question required.

Export the view. PDF, PNG, or crosstab to Excel. Cheap, universal, and lands as an attachment with nowhere for the conversation to attach.

Embed with a connected app. Correct for a customer portal. A project.

The gap

The most common real requirement is narrow: a named group of people, at least some of them unlicensed or outside the company, needs this month's figures at a link they can open, with the ability to ask about one specific number, and a way to find that answer again next quarter.

Server does the first half and not the second. Export does neither half well.

The exported-digest pattern

Pull the numbers, render one self-contained HTML page, publish it at a stable URL, and put anchored comments on top of it.

Getting the numbers out is straightforward. Tableau's REST API exports a view as PDF, image, or data — and the data route is the one worth taking, because it gives you rows rather than pixels:

curl -fsS -H "X-Tableau-Auth: $TOKEN" \
  "$TABLEAU_HOST/api/3.21/sites/$SITE_ID/views/$VIEW_ID/data" > view.csv

Turn that CSV into a real HTML table, inline the styles, add the two or three charts that carry meaning, and keep the file self-contained — no runtime fetches, so it renders identically for every reader forever. Then publish, and keep publishing to the same id:

python3 scripts/tableau_digest.py view.csv > digest.html

curl -fsS -X PATCH "https://commareports.com/api/v1/reports/$REPORT_ID" \
  -H "Authorization: Bearer $COMMA_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d "$(jq -n --rawfile html digest.html \
        --arg title "Campaign performance — $(date +%B\ %Y)" '{title: $title, html: $html}')"

Real text over an image, again for the boring reason: clients copy numbers into their own spreadsheets, and a picture of a table makes them retype it.

What changes for the reader

A browser, a URL, nothing installed. Access is a property of the report — private, team, domain-gated or link — so "anyone at client-co.com" works without provisioning a single seat.

And the discussion lands on the figure. Someone highlights the conversion row and pins "this is the pre-attribution number, the model change ships in March." That thread persists across every monthly revision, which is the part no export format has ever offered.

When to just use Tableau

If your readers are licensed and the value is in interaction — filtering, drilling, changing the parameter — send the Server link. Live wins whenever the reader can get in. The digest is for the readers who cannot, and for building a dated, commentable record that outlives the dashboard's current state.

Try it

Comma is free — unlimited reports, unlimited commenters, unlimited revision history.

Create your first report →

Related