(Addendum: Jonathan Drummey has a much better Tableau-only solution that I missed from his presentation. I only caught later part of the presentation. You might ask him about it if you know him.)

In a recent presentation, Tableau visionary HOF Jonathan Drummey talked about a solution for a variable row heights in a text table. The question apparently came from a perfectionist tableau designer. Tableau is not really made for text processing. But for someone visually sensitive, he or we may wish to design a text table beautifully.

Here is what it is about. 

Problem Statement

We assumed that the text has been properly line-broked to accommodate a certain width.

In Tableau we usually have a text table like this:

Note that, when the row heights are equal, it leaves a lot of white spaces. What we want is actually like this:

The row height is variable, removing unnecessary blank spaces.

The Tableau Solution

Jonathan got a solution using Python to preprocess the data. I tried using Tableau only and found a solution that doesn't need extra tools. 

1) First, we can calculate the number of new rows per each Row ID, by counting the number of line breaks. (per Jonathan's courtesy)

2) Secondly, let's perform the self-union of the data source. Note that the data source is in the 'breaks' sheet of an Excel file. In the Tableau data source editor, drag the break sheet to the editor canvas first. Then drag it again to the lower side of the first sheet, an orange rectangle of Drag table to union will appear. Drop the sheet there and we will have a self-unioned data source.
3) After self union of the data source, we rename the data source as "Text table with linebreaks SU". Now we create a new field "Row Index" as follows.
This will help create Index of rows per Row Id, that is, the index for the new rows as inserting line breaks. 

4) Right click "Row Index" and create bins named as "Row Index (bin)"
Using this field "Row Index (bin)", we create a new table with indexes within each Row Id. In the Text String field, the string is the same one per Row Id with multiple line breaks. Note that there are three dots "..." at the end of each string.
5) For technical reasons, we can't use "Row Index (bin)" in our calculations, neither with Index() function based on the bins. (For the curious ones, Tableau's string functions don't accept aggregated fields)

So, to keep the indexes which are absolutely necessary, let's export the data to a .csv file to create a new data source. The new one has a new index field. Note that we are using Tableau to do some data processing and reshaping.

Go to the menu Analysis>View Data which will open the view below. Download the table into a new .csv file. And our data preparation is finally done.
6) Import the new .csv file into Tableau. Rename "Row Index (bin)" as "Row Index". Create a new field "Text Row" as follows.
This formula will extract each of the new rows by line breaks per Row Id. See the table below.
By hiding the Row Index column, we obtain the table with variable row height. We leave it unhide for your understanding.

Voila we just turned a table of equal row height into one of variable row height in Tableau.

Download the above workbook here.

This is one approach to handle text wrapping in a text field. I have written another post before. Tableau doesn't do it well. That's why we have to go through some acrobatics to achieve it.  



0

Add a comment

(Refresh the page if you want to view the gif image multiple times. Or go to Tableau Public and click the button at the top-right corner.)

Jake and I collaborated on a dashboard. He told me that he learnt a way to create an in-place help page in Tableau. He first saw it at a conference somewhere and couldn't recall who the speaker was. So I am blogging here about it but the credit goes to somebody else. If anyone knows who the original creator is, leave a comment below.

The key idea is to float a semi transparent worksheet on top of the dashboard, where a help text box is strategically placed on top of each chart. This way, we can explain how to view each chart and what data points are important, etc. This worksheet is collapsible by a show/hide button.

(Addendum: Jonathan Drummey has a much better Tableau-only solution that I missed from his presentation. I only caught later part of the presentation. You might ask him about it if you know him.)

In a recent presentation, Tableau visionary HOF Jonathan Drummey talked about a solution for a variable row heights in a text table. The question apparently came from a perfectionist tableau designer. Tableau is not really made for text processing.

[Forward: I asked ChatGPT o1-mini who then wrote this. Hope it helps. All the credit and the blame go to ChatGPT.

I went over the plan and it looked decent. Whether it can be done in 30 days or not, it depends on the person and the time he spends on it. By the way, ChatGPT can be a really good study buddy. Ask it questions whenever you have any.]

This comprehensive 30-day plan is designed to take you from a Tableau beginner to an advanced user.

Mundane charts are those basic ones that all data visualization beginners can create, possibly with Show Me in Tableau. They are the boring ones at times because many people tend to create fancier ones just to show off. 

I actually like the mundane ones a lot because they are not only easy to create but also easy to be read by the stakeholders.

Pareto chart is a very powerful tool, providing great insights into the data set and into the business at stake.

A while ago, Sharon came to me asking a question regarding Pareto Chart Multiples. That is, per each category, there is a Pareto chart. And we need to create Pareto charts for all the categories. This chart allows us to quickly view the few most important factors that matter to the majority of output in each category. 

Vilfredo Pareto (1848-1923) is the father of the 80/20 rule: 80% of output are produced by 20% of input. It works magically well through all the years.

[Update: The product manager Wilson Po alerted me that the Viz Extension is still a work in progress. It will not be part of the incoming version 2024.1. Instead, it will be released later in 2024. Just be patient]

Tableau 2024.1 is coming. I got a chance to test drive it. As I wrote a bunch of posts on Sankey chart tutorials in the past, I am most excited by the new Sankey chart type. Here I would like to share what I learnt. This is a quick preview. Your comments are welcome.

Buzzfeed recently asked Midjourney to draw images of people in 50 US states.  So the AI drawing tool created 50 images of couples that represent its perception of the people in each state.

I just put the images into a tiled map in Tableau. Each image is added as a background in each tile.

And also I added Viz-in-tooltips to enlarge an image to look at more details.

Feel free to download the workbook and explore it.
1

The folks at Business Expert had a brilliant idea. They asked AI's perception on UK banks as a dog. I am inspired to do the same on US banks.

ChatGPT is asked to confess its perceptions on top US banks as a dog. Then Midjourney is tasked to generate the images. Check out what dog is matched to your favorite bank.

All are put together into a single-sheet Tableau dashboard. Feel free to check it out.

Through my previous post on the new Sankey chart type, I got in touch with Wilson, the product manager leading the development of this new chart type. I made some comments on creating multi-level Sankey via cascading of single Sankey's. He told me it can be done already by dropping more dimensions into the Level card.

As an enthusiastic user of Sankey charts, I am excited to learn that a Sankey chart type is being piloted in Tableau Public (Web Edit only). I wrote about Sankey chart design in multiple posts. Sankey chart may appear in different forms depending on applications. 

I played a little with it just to evaluate it. Here are my initial findings and comments.

1. The basic Sankey

I can quickly create a Sankey with 2 dimensions and 1 measure.
Blog Archive
Loading
Dynamic Views theme. Powered by Blogger. Report Abuse.