My Tableau Resume and a Case for More Flexible Web Page Objects

My Tableau Resume and a Case for More Flexible Web Page Objects

This project has been on my to-do list for a long time!

Disclaimer:  If you’re my current employer, I’m not actively looking.  If you’re a prospective employer, I’m all ears!

I’ve wanted to create a visual resume for quite some time, but when you actually sit down and start working on it, you find out there aren’t a lot of good ways to do it.  I’ve seen some examples around the community and I wanted to do something a little different.

Here were my objectives:

  • Create URL actions to connect through various channels (i.e., email, twitter, linkedin, etc.)
  • Visually display experience on a timeline (i.e., job, dataviz, speaking, and blogging)
  • Calculate time in a position updated every day using today()
  • Include an interactive gallery of public work
  • Include links to various publications (i.e., articles, speaking videos, etc.)
  • Retain some resemblance of a traditional resume
  • Minimal interactions
  • Mobile-friendly

Seems simple right?  Want to skip the ‘how’ and see the resume, click here, you can always come back.

The data source and the timeline

I obviously had to create the data for this and I had a challenge right off the bat.  I wanted to show total time at a specific organization (including promotions) linked together, but I also had individual events (i.e, speaking and publications) that I wanted to plot.

I decided to use Google Sheets so that the viz will automatically update if I change the source.  I created five Google sheets in total.  The timeline source was comprised of three Google Sheets.

I structured the data in a way that would allow me to use the path shelf to link career experience together and plot events individually.

I created a timeline colored by type.  Props to Bridget Cogley who fielded my questions on color.  Usually, I pick colors and go with it, but this time nothing was speaking to me.  Bridget shared this palette tool from with me.  Trust me, go ahead and bookmark this now.  Thanks Bridget!

This view is not without some tricks.

  • The headers and organization icons are on a separate sheet using custom shapes.  I changed everything to grayscale in Photoshop to mute the logo colors.
  • The bracket was created in PowerPoint.
  • I edited the axis tick origin and set the ticks to show every two years.
  • I used custom shapes based on the Status field shown above.  If the status is current, I replaced the null date with today().  This allowed me to calculate the number of days between start and end dates at an organization.  My current job will always show the exact number of days in the tooltip as of today().
  • The upcoming reference line is also based on today().
  • I used several tooltip tricks that I posted about here, here and here.  Dynamic lines, Multiple line tooltip calcs, and two different tooltips for events vs. jobs in the same view.
  • I used the random function to jitter the individual events on the Y axis so they could be seen better.

Then, I ran into a major issue with my URL actions.  I will come back to this in a second.

Major duties

The Description sheet was Left-joined to Jobs as shown above.  I didn’t want to duplicate the rows on the Jobs tab or add a bunch of columns and pivot the data.  Joining seemed simpler to me.

The duties view is a simple trellis.  There is an action filter to update the view if you click on a different organization.  The trellis is sorted on the bullet order.  I added the unicode bullets right in the description field.  Creating your own data is a blessing in some ways!  If you know how you are going to use it, structure it to suit your view.

The Featured Gallery

I wanted to create an animated gallery of my work to feature in the resume.  I created six galleries so that when filtering by different organizations you will see a different set of content specific to that experience. Below is an example of public work I’ve done in my current job.

Props to Jonni Walker, the king of all images!  He recently helped Pooja Gandhi and I use different techniques for embedding interactive images in our #VizForSocialGood contributions.  This one is stolen from the technique used in Pooja’s work where she had a rotating gallery of images.

Basically, you create a gallery at  This took a little time to do.  I had to find the content I wanted to feature, upload to Cincopa, pick a gallery template (I tried several), format the gallery, setup any links and then publish it.  You can even tweak the gallery CSS, which I did so the navigation arrows are the same green as in the data duo logo on my shirt.  Yeah, I’m a nerd, so what?

I also spent a little time in Photoshop to make sure all the images were the same size so it would look perfect on the dashboard.

Here is the trick to embedding it in Tableau.  Copy the URL below.

When you are done creating your gallery at Cincopa, you will be given an embed code.  Replace the ‘AIOA93tEXTQc'with the ID from your embed code.  It is shown highlighted below.

These Gallery URLs were Left-joined to the Jobs sheet as shown above.

So back to my problem with the URL actions

I wanted to do several things with URLs.

  • I wanted to embed the gallery you saw above with links to the public visualizations being displayed
  • I wanted to create contact buttons that would do things like launch your email client to contact me, redirect a reader to my blog, follow me on Twitter or LinkedIn, etc.
  • I wanted URL menu actions in the timeline that would launch specific links to articles, visualizations, videos, etc.

So what’s the problem?  A few things.

  • Not all of my content was hosted on https sites.  Some of the articles and videos of me speaking are on http sites.  This means that the URLs need to be opened in a new browser window and not within the Tableau dashboard.
  • If you have worked with URL actions and embedded web page objects in tableau, then you know any URL action will update the embedded web page object.  Tableau please give us more flexible web page objects.  Let us decided which URL action should update which web page object.

Why is this a problem?

My dashboard is 700px wide and not all all the sites I want to link to are mobile friendly.  Also, if any of those http links are hit the web page will just be a huge white space.  I was stuck for a little bit.

Warning: Hackery in Progress

So my featured gallery is a web page object.  I only want this web page to display the Gallery URLs and nothing else.

The first hack was on the Contact Sheet.  I had loaded a separate Google Sheet with URLs.

I used some Pooja-style icons over circles.  Instead of using Dashboard Actions to launch the URLs, I floated five empty PNGs (also a Pooja trick) over the icons, because you can set a URL on an image.  Image URLs do not change an embedded web page object, they launch a new webpage.  This exactly what I wanted to happen.

Ok, that was easy.  Now, I needed to solve the menu actions on the timeline.  I wanted to provide URLs in the tooltip to articles/dataviz, when applicable, to some http sites and not have these change the web age object.  This is not possible in one dashboard.  If that timeline is on this dashboard it will affect the embedded web page.  BUT, this doesn’t mean it can’t be on it’s own dashboard….

Hack number two was to create a separate dashboard for the timeline and type filter.

I setup this sheet just like the original and created menu dashboard actions to these URLs.  This dashboard has no embedded web page, so the menu actions will open a new browser window.

I published this two dashboard workbook to public.  I copied the Share URL to this tab and added ‘&showVizHome=no’ to the end of the URL (this drops the Public wrapper).

Then, I went back to my original dashboard and inserted another web page object pointed it to the 2nd dashboard.

Notice the box highlighted above is a web page, not a sheet.  Notice how far down it goes.  That is because it is a dashboard from Tableau Public and the footer extends below the dashboard.  It is floated behind the other sheets carefully to align the row borders with the icon to it’s left.

Now, republish the workbook to Tableau Public.  Then, edit the details to not show sheets as tabs.  This 2nd dashboard will be hidden and embedded on the first.  Cool huh?

Ok, so let’s review.

  • Clicking on a contact button is really clicking on an empty image that launches a new web page.
  • Clicking on an Organization Name/Icon will filter the major duties sheet and will redirect the embedded web page to the appropriate Cincopa Gallery.  All of these Sheets and Web Page are on this dashboard.
  • Clicking on an image in the featured gallery will launch the interactive content in a new browser.  This was done using the Cincopa Related link functionality in the gallery itself.
  • Clicking on a menu URL from the timeline Tooltip will open a new browser window.  This is an embedded web page and the URL action is on dashboard two.
  • Clicking on the Color Legend will filter the timeline.  Both sheets are on dashboard two and are embedded as a web page object.

Note – one additional trick was needed.  I had to show empty rows on the timeline so when filtered, it would keep the original number of rows and line up with the org icons.

Notice the Speaking marks remain in the row they should be in instead of taking up the entire view.

Wow, that was way more work than I thought it would be!

This was pretty complicated to build, but I think it results in a pretty intuitive user experience. If nothing else, it shows attention to detail was paid.

If you are still here, please vote on these ideas for more flexible web page objects in Tableau:

One last thank you to Josh Tapley and Shawn Levin for reviewing the resume before I published.

Thank you for reading! I hope this was helpful, leave me some comments either way.

Here is my Tableau Resume:

One thought on “My Tableau Resume and a Case for More Flexible Web Page Objects

  1. Ashu


Leave a Reply