This guide shows you how to build a functional SaaS metrics dashboard in Tableau Public using exported CSV data from your product analytics tools. You will finish with a shareable, auto-refreshable dashboard that tracks MRR, churn, activation rate, and feature adoption. Budget around two to three hours for your first build.

What You'll Build

  • A connected Tableau Public dashboard pulling from Google Sheets as a live data source
  • Calculated fields for MRR growth, net churn rate, and cohort activation rate
  • Four interactive chart views: MRR trend, churn by plan tier, activation funnel, and feature adoption heatmap
  • A shareable public URL you can embed in Notion, Confluence, or a client-facing report

Prerequisites

  • Tableau Public desktop app installed (version 2024.3 or later, free download at public.tableau.com)
  • A Google account with Google Sheets access
  • CSV exports from your analytics tool (Mixpanel, Amplitude, PostHog, or Stripe are all compatible)
  • Basic spreadsheet literacy (no SQL or coding required)

Step 1: Prepare Your Data in Google Sheets

Tableau Public works best when your data is clean before it enters the tool. Open a new Google Sheet and create four tabs: mrr_data, churn_data, activation_funnel, and feature_adoption.

What columns does each tab need?

For mrr_data, include: date, plan_tier, new_mrr, expansion_mrr, contraction_mrr, churned_mrr. For churn_data, include: month, plan_tier, churned_accounts, starting_accounts. For activation_funnel, include: cohort_month, stage, user_count. For feature_adoption, include: feature_name, week, active_users, total_users.

Paste your CSV exports into the corresponding tabs. Make sure date columns are formatted as YYYY-MM-DD. Tableau reads this format reliably across all operating systems.

Why use Google Sheets instead of a local CSV?

Google Sheets gives Tableau Public a live connection. When you update the sheet, the published dashboard refreshes automatically. A local CSV requires you to republish manually every time your data changes.

Common pitfall: Do not merge cells or leave blank header rows. Tableau treats the first row as column names. Any blank cell in the header row creates an unnamed dimension that causes import errors.

Step 2: Connect Tableau Public to Google Sheets

Open Tableau Public on your desktop. On the start screen, click Google Sheets under the Connect panel on the left.

Authenticate with your Google account. Select the spreadsheet you created in Step 1. Tableau will show a data source canvas listing all four tabs as available sheets.

How do you join multiple tabs into one data model?

Drag the mrr_data sheet onto the canvas first. Tableau will prompt you to add more sheets. Drag churn_data next to it. A join dialog will appear. Set the join type to Left and match on month (churn_data) to date (mrr_data). Leave activation_funnel and feature_adoption as separate data sources. You will connect them later when building individual sheets.

Pro tip: Rename your data source connections in the top-left field. Call them MRR + Churn, Activation, and Feature Adoption. Clear names save time when switching between views.

Step 3: Create Calculated Fields for Key SaaS Metrics

Raw data from your CSV exports will not include net MRR growth or churn rate. You need to build these as calculated fields inside Tableau.

How do you create a calculated field in Tableau Public?

In the Data pane on the left, right-click any dimension and select Create Calculated Field. A formula editor opens.

Create the following four fields:


// Net MRR Growth
[new_mrr] + [expansion_mrr] - [contraction_mrr] - [churned_mrr]

// Net MRR Growth Rate %
([Net MRR Growth] / ZN(LOOKUP([new_mrr] + [expansion_mrr], -1))) * 100

// Net Churn Rate %
([churned_accounts] / [starting_accounts]) * 100

// Activation Rate %
IF [stage] = 'activated' THEN
  ([user_count] / FIXED [cohort_month] : MAX([user_count])) * 100
END

The ZN() function prevents division-by-zero errors when a prior month has null MRR. The FIXED level-of-detail expression in the activation rate field calculates the denominator across the entire cohort, not just the current row partition.

Common pitfall: If Tableau flags a red error on the LOOKUP formula, check that your date field is set to a continuous dimension. Right-click date in the Data pane, select Change Data Type, and set it to Date.

Step 4: Build the Four Chart Views

Each view lives on its own sheet in Tableau. Click the New Sheet button at the bottom of the screen to add a sheet.

View 1: MRR Trend Line

Drag date to Columns. Drag Net MRR Growth Rate % to Rows. Set the date aggregation to Month. Add plan_tier to the Colour shelf to break the line by tier. Right-click the y-axis and select Add Reference Line to add a zero baseline. Name this sheet MRR Trend.

View 2: Churn by Plan Tier

Switch your active data source to MRR + Churn. Drag plan_tier to Columns. Drag Net Churn Rate % to Rows. Change the mark type to Bar. Sort bars descending by churn rate. This instantly shows which tier loses customers fastest. Name the sheet Churn by Tier.

View 3: Activation Funnel

Switch to the Activation data source. Drag stage to Rows. Drag user_count to Columns. Set the mark type to Bar. Drag cohort_month to the Filters shelf and set it to show the last three months. Name the sheet Activation Funnel.

View 4: Feature Adoption Heatmap

Switch to the Feature Adoption data source. Drag week to Columns and feature_name to Rows. Drag Activation Rate % (or create a quick table calculation: [active_users] / [total_users] * 100) to the Colour shelf. Set the colour palette to Sequential Blue. High adoption appears dark. Low adoption appears light. Name the sheet Feature Adoption.

Step 5: Assemble the Dashboard

Click the New Dashboard button at the bottom. Set the dashboard size to Automatic so it scales for both desktop and embedded views.

Drag your four sheets from the left panel onto the canvas. Arrange them in a two-by-two grid. Place MRR Trend top-left, Churn by Tier top-right, Activation Funnel bottom-left, and Feature Adoption bottom-right.

How do you add cross-sheet filters?

Click the Churn by Tier chart on your dashboard. In the top-right of the chart, click the funnel icon and select Use as Filter. Now when a viewer clicks a plan tier bar, all other charts filter to that tier automatically. Repeat this for the MRR Trend chart.

Add a date range filter by dragging date from the Data pane onto the Filters shelf while the dashboard canvas is active. Set it to show a Relative Date filter for the last 12 months as the default.

Pro tip: Add a text object at the top of the dashboard with your company name and the date the data was last refreshed. Use a formula: "Last updated: " + STR(TODAY()). This builds trust when sharing the dashboard externally.

Step 6: Publish and Share

Go to File > Save to Tableau Public. You will need a free Tableau Public account. Once saved, Tableau generates a public URL for your dashboard.

Copy the embed code from the share menu and paste it into your internal Notion wiki, a Confluence page, or a client-facing report. The dashboard will reflect the latest Google Sheets data within 24 hours automatically. For teams that need sub-hourly refresh, Tableau Public supports a manual refresh trigger via the web interface.

If your business tracks brand performance alongside product metrics, it is worth running a quick check on your overall brand health alongside this dashboard setup. The free brand health score assessment from Lenka Studio takes about five minutes and gives you a starting point for connecting SaaS metrics to broader brand performance conversations.

Frequently Asked Questions

Can I use Tableau Public with sensitive business data?

No. Dashboards published to Tableau Public are visible to anyone with the URL. Use anonymised or aggregated data only. For dashboards with private data, you need Tableau Cloud or Tableau Server, both of which are paid products.

Does Tableau Public work on Windows and Mac?

Yes. The Tableau Public desktop app runs on Windows 10 or later and macOS 12 (Monterey) or later. The formulas and steps in this guide work identically on both operating systems.

What if my Google Sheets connection shows a permission error?

Re-authenticate inside Tableau by going to Data > Edit Connection and clicking the Google sign-in prompt again. Make sure the Google account you use owns the sheet or has Editor access. Viewer-only access blocks Tableau from reading the data.

How is this different from building a dashboard in Looker Studio?

Looker Studio is browser-based and easier for simple bar and line charts. Tableau Public handles more complex calculated fields, level-of-detail expressions, and cohort analysis with less manual formula work. For a SaaS metrics use case with activation funnels and heatmaps, Tableau gives you more flexibility without requiring SQL.

Can I schedule automatic data refreshes more than once a day?

Tableau Public limits automatic refreshes to once every 24 hours. If you need more frequent updates, connect directly to a Google Sheets URL that pulls live data from your product database via a service like Coefficient or Sheetgo, which can sync your source data on an hourly schedule before Tableau reads it.

Next Steps

Once your dashboard is live, the next useful step is adding a customer cohort retention table. Pull a monthly cohort export from Mixpanel or Amplitude, add a fifth tab to your Google Sheet, and build a text table view in Tableau using the same calculated field approach from Step 3.

If you want to take your metrics reporting further, the team at Lenka Studio helps SaaS teams and SMBs build data workflows that connect product analytics, marketing performance, and revenue reporting into a single source of truth. Get in touch to talk through what your current reporting stack is missing.