Design Tips for Functional and Beautiful Dashboards

before after portrait

Over on the Tableau blog, we published a post on how easy it is to quickly format a key metrics dashboard. We then redesigned it in response to some valid criticisms of the original (click here). The changes made are subtle but effective. In this post I wanted to describe them to show how to maintain functionality when going minimal with their dashboards.

Example 1: the line charts

before and after line charts

What was wrong with the original? The lack of labels make things clean, but stop you learning anything about the values:

why label

I changed the following:

  • Added the x-axis headers. I’m all for hiding headers (see “How to design an axis for maximum impact”), but I think it’s wrong to hide the x-axis.
  • Dual axes provide better design control in Tableau:
    • The Sales chart is an area/line chart. This gives more definition to the top of the area.
    • The profit chart is a line/circle chart. I find this gives more definition to the points than just choosing the “All markers” on the Colour shelf:
      Dual or all Markers
  • I wanted to avoid showing a y-axis but there still needs to be some way of seeing the magnitude of the measure. For this I added a maximum reference line, with the text aligned to the right. If a user filters the dashboard, the max will always be accurate
  • All titles were changed to be left-aligned and single line. This creates better consistency across the dashboard. I aligned the Titles to the left and the Maximums to the right in order to prevent visual clutter and confusion. If they were closer together, it’s harder to tell which is which:
  • Note also that the zero line on the profit chart above is a Constant Reference Line, rather than an actual axis. I did this because it’s easier to control the formatting on a minimal chart.

Example 2: the Profit Charts

donuts

I don’t object to donut charts in all circumstances, but they are simply a bad choice when you make a donut for each Year (see p11 of Stephen Few’s classic, “Save the pies for dessert”). It’s nigh on impossible to see changes over time. I switched to a stacked area chart instead. This took up less space and allowed me to label the marks, too (removing the need for a y-axis).

Notice how the colour for Furniture is a really light salmon pink. That can be a problem against a white background, but I added borders to the marks to make them more obvious:
borders

BTW, I didn’t address a key risk with this kind of chart: what happens if there is negative profit?

Example 3: the highlight table

highlight table

I love highlight tables. However, I didn’t think this one worked for 2 reasons. First, the lack of labels creates a real problem here. Without them, it’s just a mosaic. I also was not convinced that you’d ever really want to see Sales by Week and Weekday. I changed it to Month and Day. The increase in sales towards the end of each year is now clear.

Example 4: General changes

  • Colour changes
    • I used extensive use of grey in the text in order to soften the labelling and accentuate the data marks.
    • I used more distinct colour palettes to differentiate Sales and Categories.
    • I switched from a floating layout to a grid layout. This way, Tableau controls the size of the grey borders between the charts.
    • I have to say, changing the colour was the single hardest thing on this. All the other decisions were kind of straightforward but every time I changed the colour, I felt like I’d made one thing better but something else worse. Also – the image on the Tableau blog is from before I added the borders around the marks. 
  • Layout
    • I changed the layout so that Sales-related charts are on the left, and Profits ones are on the right.

Conclusion

Would you have done something different? The dashboard is still not perfect. For example, the blue highlight table and the blue map are problematic. However, I hope this exercise has shown that it is possible to have both beauty and functionality in a Tableau dashboard.

The key lesson for me is that it’s not hard in Tableau to acknowledge feedback and then iterate fast to fix the problems.

Feel free to download the workbook and share your ideas.

Before and after...
Before and after…

Dual axes: nice formatting

You’ve built a nice chart using synchronised dual axes (maybe it’s a lollipop chart – as described in my previous posts!). It looks great, but you’re just left with a niggling little design flaw: those dual axis sure take up a lot of space, at the top and the bottom of your viz:

What can we do about this? The first thing I thought of was to format all the Tick Marks and Titles away from the top axis:

That’s no good – there’s a huge useless white banner of dead space at the top of the chart now.

Instead, why not just format each axis to show one of the important parts: one to show the title and one to show the tick marks? This is the end result:

Now I have the best of both worlds – the user’s not aware of any dead space, and nothing gets repeated. To format the axis, right-click anywhere on the axis on the worksheet and choose Edit axis…

On the top axis, leave the Title as it is, and show just the Minor tick marks, making sure they are the same interval as the Major tick marks on the bottom axis:

:

On the bottom axis, leave the tick marks, and delete the Title:

Job done! You’ve maximised your available space and made your users’ lives a bit easier.

Lollipop charts: the search for the perfect mark (part one)

Here’s the problem: I am visualising satisfaction rates over multiple dimensions. In almost all cases, satisfaction rates are high (between 70% and 100%). I want a visualisation that allows comparison over multiple dimensions that is also nice on the eye. Below is the result: a lollipop chart. Although I stumbled across this design by trial and error in Tableau, it is a chart type found elsewhere, eg on Chandoo’s excellent Excel blog. What I thought I would do in this post is explain why I think it’s a great chart in this situation and how to do it in Tableau. Note: in this post, I’m using the Superstore data, not my real dataset. In my next post, I’ll explain how to build a lollipop in Tableau. If you can’t wait that long, you could try it yourself as your homework 🙂


To me, it’s a great way to reduce the data-ink ratio while retaining readability. What do you think? Here’s how I arrived at this design.

Tableau’s default visualisation is the bar. What’s the problem with this? Well, when the bars are all very long (as is the case with my data), there’s just too much ink, and it creates an unpleasant Moire effect:

How can we solve this? Well, we can reduce the bars to wafer thin ones, but this looks, well, flakey:

Maybe we should push the size slider to the max (and add a border). This is what I would normally do in this situation. It removes the Moire effect, and isn’t too bad, but boy, there’s now a lot of ink being used:

Given there’s too much ink, maybe the bar itself is the problem. So how does a circle work? Well, the problem is that the circle is a long long way away from the label. When we try and foist this kind of thing on our users, they tell us it’s too hard to relate the circle to the name, even using shaded lines:

We can get round this distance problem in a couple of ways. One is to fix the axis so that it’s range is only as wide as the min/max values:

But we all know that an axis that doesn’t start at zero is a bad thing, right? Well, sometimes it isn’t a bad thing, but it sure makes the states at the bottom of the list look like poor performers, even though they’re actually only 0.6% lower than the top of the list. Best in this case to keep the axis starting at zero. Maybe we could label the circle directly instead:

This still isn’t right: all that white space at the left of the chart seems wrong.

And this was when I had my brainwave. Thick bars are no good and lonely circles are no good. How about making a combination of them both? And that’s how I came up with a lollipop.I think it has the following benefits:

  1. Can be used when all dimension members have high values (i.e. long/tall bars in a bar chart)
  2. Greatly reduces the data-ink ratio while maintaining a clear link to axis labels
  3. All the users I’ve shown it to so far have really engaged with it – they think it’s both pretty and easy to read

I also like the fact that it works if you add more dimensions to make small multiples:

Next time we’ll look at how to build it in Tableau. In the meantime, let me know your thoughts.