A Likert Scale is often utilised in surveys and questionnaires as a method to understanding the amount of negative and positive responses. Although it accepts qualitative responses it can be easily turned to a numerical scale:

e.g. Strongly Disagree = 1, Disagree = 2, …, Strongly Agree = 5

Here are some typical methods used to visualise the Likert Scale in Tableau (Source: How to Visualise Sentiment and Inclination)

Both methods have a lot of visual clutter and make it hard to directly compare the negative and positive sentiments. Comparing it with the following visualisation:

We can see it’s a lot easier to which questions have overall positive and overall negative sentiments and the amount for each sentiment. Now, let’s learn how to build it!


Step 1 – Transforming the Data

We will come to know that all survey data need some sort of transformation. This is because the way surveys are set-up is to be readable for humans, while we need it to be readable for machines. This means we will be pivoting it like so:

Source: Prepare Survey Data Three Easy Steps

We also probably need to assign a numerical value to each response value in the Likert Scale.


Step 2 – Crosstab

This is an example of the final crosstab that you need. I will now go over each calculation step by step

Count of Responses: Count(Responses)

Number of responses for each question for each choice

Negative Values: If [Response Value] < 3 then 1 ELSEIF [Response Value] = 3 then 0.5 ELSE 0 END

The negative sentiment responses. If the choice was neutral, you put half as negative and half as positive

Total Negative Values: TOTAL(SUM([Negative Values]))

The total amount of negative values (Compute using response text)

Total Response: TOTAL(COUNT([Responses]))

The total amount of responses (Compute using response text)

Gantt Start: -[Total Negative Values]/[Total Response]

This will help decide where the lowest  value of Gantt Chart will start

Percentage of Total Sizing – COUNT([Responses])/([Total Response])

Decide the size of each response text

Gantt Percent – PREVIOUS_VALUE([Gantt Start])+ZN(LOOKUP([Percent of Total Sizing],-1))

Using the size, give a value based on how far away from the start it is


Step 3 – Chart and Formatting

Gantt Percent is still computed on response text. We need to change the order of the Response text to strongly disagree at the top and strongly agree at the bottom. Next, we can change to a Gantt bar and then add Percent of Gantt to size. It should come to something like this:

Next comes to personal preference. I like to fix the axis from -100% to 100% and also replace the axis with a constant line on 0. Next I add a secondary axis for the average of each question and also format the colour and tooltips.

Sean Gu
Author: Sean Gu