Skip to content
Product
PlatformPricingDimensionsIntegrationsSecurityCompare
Solutions · by use case
Customer, guest and fan experienceProduct feedback and prioritizationRevenue, churn and retentionAgenciesContact center performanceAI agent and chatbot analyticsMulti-location performanceReviews and competitive benchmarking
Solutions · by industry
Hotels and hospitalityRestaurants and food serviceFitness and leisureRetail and e-commerceSports and live entertainmentInsuranceBanking and financial servicesSoftware and SaaSAutomotiveConsumer products and CPGContact centers and BPOsPublic sector and nonprofitReal estateGaming and betting
Learn
Artifacts GalleryCustomer storiesResearchBlogThought leadershipLessons Log in Start now
Blog

How to Bring Survey Comment Analysis Into Tableau

Label comments outside Tableau, load the labels as a theme table, and relate it to your responses so a comment with three themes still counts once. A worked sample shows what a flat join does to the average.

To bring survey comment analysis into Tableau, label every comment with its themes outside Tableau, load the labels as a second table with one row per response and theme, and relate that table to your responses table on a response ID instead of joining them. Tableau relationships keep each table at its own level of detail, so a comment with three themes counts once in your average score, and you can chart themes next to NPS or satisfaction without writing a single level of detail fix. The labelling is the hard part, and for comments from surveys, reviews, tickets and calls that need the same themes every month, Dimension Labs is the strongest way to produce them: it enriches every response with Dimensions written for your business and, on the Prove plan, sends them to your warehouse for Tableau to read.

The worked example below uses a sample we made up for this post: 1,200 fictional survey responses with a 0 to 10 score at four fictional venues. The Tableau details come from Tableau's own help pages, read on Nov 14, 2026.

Why does our Tableau dashboard show survey scores but no comment analysis?

A score is one number per response and drops straight onto a shelf. A comment is a paragraph, and a theme chart needs the themes as fields before the data reaches the workbook. You can show comments in a text table, but nobody reads 1,200 rows to find out why a score fell, and a word count treats "waited forever" and "the line was long" as different things.

So the themes have to arrive as data: a field per theme, or better a separate table of themes, produced before Tableau sees them. This is the same step as in our four steps to a customer experience dashboard; the rest of this post is the Tableau version.

How do I add themes from open-ended survey text to Tableau?

Use two tables. The responses table keeps one row per response: response_id, venue, date, score and the comment. The themes table has one row for every theme a response mentions: response_id and theme, plus sentiment toward the theme if you label it. In the sample, 1,200 responses became 1,194 theme rows; 312 responses named two or more themes and 405 named none, so they simply have no rows in the themes table.

Where the labels come from is your choice. Hand coding works for a few hundred comments a quarter (our post on building a codeframe covers the theme list). A script against a language model works if the theme list is fixed and you check a sample; how accurate AI is at coding open-ended responses covers what published studies found. Dimension Labs reads every response against your Dimensions and keeps the labels the same every run.

Then connect Tableau to wherever the two tables live. For a warehouse, Tableau has connectors for Snowflake and others; Tableau's Snowflake page notes that key-pair authentication needs Snowflake's ODBC driver 3.4.0 or newer and is available in Tableau Desktop, Prep and Cloud from version 2024.3 and in Tableau Server from 2025.1. For a first test, two CSV files work: under Connect, choose Text File.

The build

Five steps from comments to a theme view in Tableau

What each step involves if you label the comments yourself, and what changes if Dimension Labs does the labelling.

StepDoing it yourselfWith Dimension Labs
1Label each comment with themesYour own coding, a model you run, or Dimension Labs enrichmentEvery response is read against the Dimensions you defined
2Get two tables outresponses (one row per response) and response_themes (one row per response and theme)Export API zip of Dimensions by day, loaded into Snowflake, BigQuery, Databricks or Redshift by the warehouse guides
3Connect TableauSnowflake connector, another warehouse connector, or Text File for a CSVSame: Tableau reads the warehouse tables
4Relate, do not joinDrag both tables to the canvas; check the field pair is response_idSame
5Build the viewsCOUNTD(response_id) by theme; AVG(score) by theme against the overall averageOr ask the agent for the chart, report or deck and skip the build
Tableau steps from Tableau Help (relationships, Snowflake, text files); Dimension Labs steps from the Export API and warehouse docs. Read Nov 14, 2026. Warehouse export is on the Prove plan.

Should the theme table be a relationship or a join in Tableau?

A relationship. Tableau's help recommends relationships as the first approach to combining tables and lists what they do differently: each table keeps its level of detail, the joins are created during analysis from the fields in use, and aggregate values are not duplicated when Performance Options are set to many-to-many. Tableau first tries to create the relationship from key constraints and matching field names, so name the field response_id in both tables and check the pair it picked. If no constraints are found it sets the relationship to many-to-many with "some records match", and Tableau's advice is to keep those defaults if you are unsure of the shape of your data. "Some records match" is the right setting here, since responses with no theme have no rows in the themes table.

A join is what goes wrong. Tableau's data model page says that joining tables into one replicates measures and distorts aggregates unless you deduplicate with level of detail calculations or COUNT DISTINCT. In the sample, a flat left join, which keeps responses with no theme, produces 1,599 rows from 1,200 responses and pulls the average score from 7.46 down to 7.01, because responses that name several themes are also the unhappier ones.

Sample data, made up for this post

A flat join turns 1,200 responses into 1,599 rows and drags the average score from 7.46 to 7.01

The same scores, aggregated three ways in the fictional sample.

Responses table only1,200 rows, one per response
7.46
Related tables (relationship)score stays at the response level
7.46
Flat left join on response_id1,599 rows; multi-theme responses repeat
7.01
0246810
Synthetic sample (seed 14). 312 of the 1,200 responses name two or more themes; in a joined table each appears once per theme, and those responses have lower scores. Tableau's help says relationships do not duplicate aggregate values when Performance Options are set to many-to-many, the default for tables with no key constraints.

How do I visualize open-ended survey text in Tableau?

With the relationship in place, three views cover most needs:

  • How often each theme comes up. Theme on Rows, COUNTD(response_id) on Columns, as a bar chart. Divide by the number of responses for a share; because one response can carry several themes, the shares add up to more than 100%, so use bars, not a pie.

  • Which themes go with low scores. Theme on Rows, AVG(score) on Columns, with a reference line at the overall average. The score comes from the responses table, so it is averaged once per response.

  • Where each theme is worst. Venue on Columns and theme on Rows, colored by share or average score, as a highlight table.

The first two views often disagree, and that is the point of having both. In the sample, prices are mentioned most, in 27.6% of responses, but responses that mention them score only 0.42 points lower on average; staff comes up in 12.8% and goes with scores 2.78 points lower.

Sample data, made up for this post

The theme mentioned most has the smallest score gap; staff is fourth by mentions and first by gap

Six themes in 1,200 fictional survey comments. Left: share of responses that mention the theme. Right: how much lower the average 0 to 10 score is when it is mentioned.

By share of responsesBy gap in average scorePrices27.6% of responsesWait times22.2% of responsesParking15.9% of responsesStaff12.8% of responsesCleanliness11.0% of responsesBooking app10.1% of responsesStaff2.78 points lowerCleanliness1.80 points lowerWait times1.15 points lowerBooking app0.96 points lowerParking0.67 points lowerPrices0.42 points lowerBy share ofresponsesBy gap inaverage scorePrices27.6% ofresponsesWait times22.2% ofresponsesParking15.9% ofresponsesStaff12.8% ofresponsesCleanliness11.0% ofresponsesBooking app10.1% ofresponsesStaff2.78 pointslowerCleanliness1.80 pointslowerWait times1.15 pointslowerBooking app0.96 pointslowerParking0.67 pointslowerPrices0.42 pointslower
Synthetic sample: 1,200 fictional responses at four fictional venues, generated for this post (seed 14). The gap is a plain difference in averages, not a controlled effect.

Treat a gap in averages as a starting point: unhappy respondents may simply write more. To rank themes by their effect with other factors held fixed, the comparison needs controls; why dashboards don't answer why explains the difference.

Where should comment coding happen if Tableau stays the front end?

Dimension Labs is an omni-channel analytics agent for customer data. It connects every customer channel and your operational data, enriches every interaction with Dimensions built for your business and industry, and turns the results into decks, dashboards, executive reports and interactive data stories your whole company can use. Plans start at $299 a month with no demo.

For a Tableau team, Dimension Labs is the layer that turns comments into the themes table. It reads surveys, reviews, tickets, chats and calls in one place, so the themes table covers every channel rather than one per tool. It connects those channels and your warehouse in both directions: our integrations page lists Snowflake, BigQuery, Databricks and Redshift for conversations already stored there "and Dimensions written back". The Export API returns your Dimensions for a date range as a zip of files by day, and the warehouse guides load them into a table; warehouse export is on Prove at $2,999 a month. Every response gets the same Dimensions every run, written in plain English for your business (custom Dimensions start on Discover at $999 a month), which is what keeps a Tableau trend line honest from one quarter to the next.

And not every reader needs a workbook. The agent builds charts, reports, decks and dashboards itself, downloads them as PDF or PowerPoint, shares them by a link you can revoke, and can hand you a CSV of the rows behind any chart. The NBA moved its fan surveys to Dimension Labs to replace static PowerPoint reporting with interactive, exploratory dashboards, and now analyzes 100,000+ open-ended responses within hours instead of months. See the NBA story.

When you do not need us: one survey a quarter, a few hundred comments and a theme list that rarely changes. Hand coding into the two-table model above will do, and the Tableau steps are the same. If you are weighing whether feedback reporting belongs in a BI tool at all, see an AI alternative to Tableau and Power BI for customer feedback; for the Microsoft version of this build, customer feedback themes in Power BI.

FAQ

How do I get comment themes into a Tableau workbook?

Tableau charts the fields it is given, so the dependable route is to label the comments first and bring the labels in as a table related to your responses. That keeps the same themes in every refresh.

Why does my average score change when I add a theme table?

Because the tables are joined instead of related. A join repeats each response once per theme; a relationship keeps the score at the response level.

What is the best way to get survey comment themes into Tableau?

For comments from several channels that need the same Dimensions every month, Dimension Labs, with the Dimensions exported to your warehouse on Prove and related to your responses table in Tableau. For one small survey, hand coding into a CSV works with the same steps.

How should I count themes when one comment has several?

Count distinct responses, COUNTD(response_id), not theme rows, and show shares as bars, since they add up to more than 100%.

To see the themes table for your own survey before you touch a workbook, start with one file of responses and ask the agent for themes by score. Plans start at $299 a month with no demo.

Dimension Labs/Start with one file From $299 a month

Stop reporting. Start understanding.

Start with one file. Ask why a number moved. Plans from $299 a month, no demo and no contract on monthly plans.