VizWiz

Launch, grow, and unlock your career in data
Showing posts with label Workout Wednesday. Show all posts

May 25, 2026

The Big Beautiful Bar Chart: Build It in Tableau with Map Layers

No comments
In this video, I show you how to build what I call the Big Beautiful Bar Chart in Tableau. It combines colored bars, a budget reference line, donut charts, and clean labels all in one view using Map Layers. It looks stunning and it tells a complete story.

Here's what you'll learn:

- How Map Layers work and why they unlock chart types Tableau can't build any other way
- How to set up your data with a five-point scaffold to draw filled rectangles as bars
- How to use LOD expressions instead of table calculations (and why it matters for Map Layers)
- How to add a dotted budget line, sales labels, region labels, and a percentage label as separate layers
- How to control mark interactivity, opacity, and alignment across multiple layers

By the end, you'll have a chart that looks like it took hours but follows a repeatable process you can apply to any dataset.

If you can build this, you're already operating at a high level. Next Level Tableau is where analysts like you go to push further, work alongside the best in the datafam, and get direct access to live training with me every week.


December 13, 2022

#MakeoverMonday Week 50 - Which Countries Get the Most Vacation Days?

No comments
This week's data set focused on the vacation time and paid public holidays (or lack thereof) of countries around the World.

I remember when I started working at Coca-Cola. I got 10 days of vacation time for my first 2 years. Then I got 1 additional day for each year thereafter. It was terrible, but unfortunately the norm in the US.

I started by trying to create a tile map of the World, but it was going to take too much manual renaming of the countries than it was worth. So I got the idea that I wanted to show rankings, which led me back to Workout Wednesday Week 31. The view was pretty simple to create; follow along in WatchMeViz below.

My final viz is below the video, or you can view it here.


August 26, 2022

Workout Wednesday - New York City Tableau User Group Recap

No comments

Talk about pressure! I was given a 30 minute slot to see how many Workout Wednesday's I could complete. I was pretty confident I could finish 4, given I had already pre-selected the challenges I thought were easiest. 

But...those pesky tooltips!

And the heckler in the audience (ahem Ann Jackson).

So how'd I do? I got the WOW2020 Week 32 100% complete, week 28 about 95% complete (the tooltips), and week 21 about 95% complete. It love trying to solve problems and build vizzes live.

If you missed it, here's the recording from the TUG. My part starts at 38:55. Farther down, you'll find each of the workouts in their completed state.










June 20, 2022

#WatchMeViz - Workout Wednesday 2022 Week 1

No comments
Below is the livestream and link to the workbook I created as I took on Workout Wednesday 2022 week 1 - FAA Wildlife Strikes. Enjoy!


December 8, 2021

#WOW2021 Week 45: Customer Purchasing Habits (RFM Analysis)

No comments
We were extremely fortunate to have Ann Jackson join us on the weekly Wise Up Wednesday at The Data School. Originally she was going to take us through how she completed week 45. However, I thought it would be interesting for Ann to see how we approach the challenges. Ann pitched in a couple times with some hints to keep us from heading down the wrong path. We were able to build the chart in one sheet, including the headers whereas Ann used a text box for the headers.

Personally, I felt a lot of pressure not to mess up with Ann watching. As Erica Hughes of DS20 pointed out, this is how I make them feel during training. I promise it's done with love! 🙂

Here's the video of our session. We nearly finished in the allocated hour. After we dropped off, I cleaned up the tooltips and put together the dashboard, so that's not included in the video. 

Click on the image below to view the viz on Tableau Public.






July 7, 2021

#WOW2021 Week 26 - Profitability With a Dual Axis Chart

No comments
Typically our Wise Up Wednesday crew do these together but today, I was on my own In this video, I take you through how I completed Workout Wednesday 2021 week 26. It's a bit of a ramble since I started from scratch, but I got there.

Video and solution below...


July 1, 2021

#WOW2021 Week 22 - Can You Structure the Unstructured?

No comments
Week 22 was quite the tricky challenge. The idea itself is quite simple, but you had to (1) use REGEX to get the number of bedrooms (thanks to Sylvie Imbert at The Data School for her help!) and (2) know how to create bins without using the BIN function. 

Unless you've done it before, you likely will get quite stuck figuring out how to create the bins because it requires a hidden function...SYS_NUMBIN. I won't go into detail here; you can read more on Jeffrey Shaffer's blog here.

Check out how we did it by clicking on the image below.

June 23, 2021

Power BI - #WorkoutWednesday 2020 Week 53 - Executive Sales Dashboard

No comments
Today I've been teaching DS23 a bit of PBI. We teach PBI as more of awareness than expertise. I need them to understand how it work in the event it comes up while on their placements.

After creating some charts with Superstore and showing them how easy it is to download data from the web, I gave them (and myself) the task of completing Workout Wednesday 2020 Week 53. We had established the basics of building the charts so it was pretty simple, notwithstanding the inevitable formatting time (this is a lot of work in Tableau too). 

Overall, I found this particular WW pretty simple with PBI. Give it a shot!

May 19, 2021

#WOW2021 Week 20: Can you compare Same Day to a Selected Date?

No comments

Wow! This workout will really test your knowledge of table calcs. The challenge comes from Lorna; view the requirements here.

The main purpose of this challenge is to get familiar with dates and parameters. Fortunately, every Wednesday I host what we call "Wise Up Wednesday" during lunch for my colleagues at The Information Lab and The Data School. We needed all of our brain power for this one. For us, the toughest part wasn't writing the calculations themselves. Rather, it was the logic required for the calculations.

From Lorna:

What if you want to compare a date you choose to the same DAY. For example, Tuesday 18th May 2021, would compare to Tuesday 19th May 2020 for the previous year, and Tuesday 20th April for the previous month. The reason you would want to do this is to compare the Tuesday to Tuesday.

This is where the logic gets tricky. We approached the solution by taking one version at a time, meaning we started by creating the calcs for the same day last year before we went onto the other two scenarios.

We got the in the end. I'd recommend building everything as a table, then change it into a chart later. It's much easier to follow what you calcs are doing.

Good luck! Here's our solution:


April 30, 2021

#WOW2021 Week 15 - Workout Wednesday Website Analytics

No comments

The requirements for week 15 are here. This is another super useful challenge as it helps you develop a dashboard you could easily use in your own organization.

My go-to blog post for working with and formatting time is this one from Jonathan Drummey. I'd say it's critical for solving this challenge. Also, think about the calcs for the reference lines and the BANs. As a hint, they're not just simple reference lines based on the measure on the rows. You WILL need to calculate the overall average separately.

Click on the image to interact with the dashboard and/or download the workbook here.

April 29, 2021

#WOW2021 Week 16 - How Do Sub-Category Sales Compare to the Sub-Category Average for Each Category?

No comments
Lorna was being very kind with Workout Wednesday Week 16. The chart was pretty simple to build and the LOD required would have been easy enough to write (though I would have used a table calc). However, Lorna wanted us to get familiar with the Quick LOD feature that came out in Tableau 2021.1. Quick LODs are a super fast way to create FIXED level of detail expressions.

This workout required creating two quick LODs. So you have to think through the aggregations and adjust the default aggregation BEFORE creating the quick LOD. Here are my steps:

  1. Create a Quick LOD of Sales by Sub-Category by dropping Sales on top of Sub-Category (hold Command on a Mac while dropping). Since I left the default aggregation of Sales as SUM, this results in this LOD:

    { FIXED [Sub-Category]: SUM([Sales]) }

  2. Change the default aggregation of this new field to average. You have to do this so that at the Category level, you're getting the average of the sales across the sub-categories in each Category.

  3. Again, create the Quick LOD by holding Command (Control on a PC) and dropping the calc created in step 1 on top of the Category field. This is the resulting calculation:

    { FIXED [Category]: AVG([Sales (Sub-Category)]) }

I'll leave the rest of the calcs to you. Good luck!



March 26, 2021

#WOW2021 Week 5 - Predicting HBCU Future Enrollment

No comments

Workout Wednesday 2021 week 5 required you to become familiar with the statistical functions in Tableau as well as being able to create predictions based on those stats. I hadn't done either of these before, so I knew it would be a good learning opportunity.

View the dashboard here

Building the chart itself was simple. I chose to NOT truncate the axis as Candra did because it's not best practice to truncate the axis of an area chart as it skews the magnitude of change across time.

To create the Gaussian process regression, I found information on Tableau's website about the calculation and how to configure it. For Gaussian regression, the help says to use this formula:

MODEL_PERCENTILE(
"model=gp",
AVG([Days to Ship Actual]),
ATTR(DATETRUNC('month',([Order Date])))
)

However, when I did so, the chart and values were not the same as Candra's. So I used the MODEL_QUANTILE function instead. As always, the help within the calculation window was immensely useful.


Great, I now had the line chart. But I couldn't figure out how to get the prediction to extends another five years. A Google search for "predicting the future Tableau" sent me to this link.

Step 4: Extend the date range and densify the data was exactly what I needed. There's an Extend Date Range option in the dropdown for the Year dimension that I'd never seen before.



Sweet! Once in the Custom window, the configuration is very intuitive.


Some formatting, a few calcs to get the tooltips and title correct, and a sheet to trigger the change of the measure with a parameter action and done! Check out my solution here.

View the dashboard here

March 22, 2021

#WorkoutWednesday 2021 Week 11 - Gapminder: Income vs. Life Expectancy

No comments

As Lorna mentions in the week 11 challenge, the key is in the data prep. Once you have that, the visualization is really simple.

I did not use the new relationships model; I stuck with the traditional method of unions and a join as that's the most straightforward way to ensure you get the data in the correct shape.

First, you want to union together the three CSV files: life expectancy, population, and income. When you do that, you'll get this strange looking view that is super wide and doesn't have headers that mean anything. 


What you should see, though, is that the headers are in the first row. To fix that, click on the drop down triangle next to the unioned data sources and choose Field names are in first row.


The years are nicely in the headers now. The next step is to select all of the columns with the years and pivot the data. Be sure to ONLY select the years.

I then renamed Pivot Field Names to "Year" and changed the data type to Number (whole) and also renamed Pivot Field Values to "Values".

Next, add the data source with the list of countries and drag it into the data prep area to create a join. You want to join "country" to "name". And now everything should look good. That's it for the data prep.


Now that the data is pivoted, in order to build the view, you need to create a calculated field for each measure: life expectancy, population, and income



All three calculations are the same. All you need to do is swap out the name of the csv. Lastly, build the view.


Note that the x-axis is a logarithmic scale and both axes have the option to start at 0 turned off.  That's it! I hope you found this helpful.

March 19, 2021

#WorkoutWednesday 2021 - Week 2: Customer Lifetime Value (CLTV) Matrix

No comments

If you like a table calc challenge, this Workout Wednesday is for you. Get Ann's requirements here. On the surface it seems pretty simple:

  1. Get the first order date for each customer.
  2. Determine the number of quarters that elapsed since then.
  3. Calculate the cumulative value of each cohort.

Steps 1 & 2 are pretty simple with an LOD and a calculated field. Step 3 is an aggregate calculation that Ann gives a big hint for and then it's cumulative across the view.

The tricky part comes when you try to get rid of any future quarters. The cumulative calc forces each cell to be filled in. The requirements say that you can't show any quarters after the cohort's latest quarter.

This is where the table calc magic happens. When I create complex calculations, I nearly always split them into multiple calcs because (1) they're easier to debug and (2) I can see my progress along the way and see where I am going wrong.

First, calculate the average lifetime value.




Next, calculate each cohort's cumulative lifetime value.


You should now have a view like this with the marks are filled in across the whole table




We need to figure out how to get rid of the marks when they start to repeat after each cohort's last quarter since birth. This is where the complex table calc comes into play.



Add this calculation to the Filters shelf, choose true and you're done! Click on the image below to view my version on Tableau Public.

November 19, 2020

Workout Wednesday 2020 Week 47 Solution Guide - Clustered Histogram

No comments
First off, please don't follow this guide if you haven't already given the challenge your best effort. It won't benefit your learning to simply follow these steps without learning what you did right and wrong.

The ultimate goal from #WOW2020 Week 47, was to create this clustered histogram:

The toughest parts of this challenge is creating the x-axis. You can't use traditional bins because:

  1. You can't lump together the $2,000+ orders (bins are fixed sizes).
  2. You can't use bins in calculations, thus you can't lump them together this way either.

So how do you mimic what bins do without using bins? You could write some crazy long case statement with 20 options in it (from 100-2000 for each $100 bin), or you could simply use the FLOOR function. The FLOOR function rounds to the nearest integer of equal or less value. Think of it like a round down to the nearest integer.

Ok, so what does that have to do with bins? With a bit of math, the floor function allows us to mimic bins. For example, this calculation will create bins of 1,000:

FLOOR([Sales]/1000)*1000) 

This obviously means, then, that to create bins of 100, we simple remove a zero:

FLOOR([Sales]/100)*100)

And now we're really close. The problem remaining is that it's looking at the row level, but we want each bins to be at the Order ID level. We don't have Order ID in the view, therefore we need to create a level of detail expression, I called it SALE AMOUNT:

FLOOR({ FIXED [Order ID] : SUM([Sales]) }/100)*100)

Calculations work inside out in Tableau. To turn this into a sentence, I would say:

  1. For each Order ID, return the sum of sales.
  2. Divided each Order ID sales by 100 and round down to the nearest integer.
  3. Multiply that result by 100 to get it back up to bins of 100.

Great, but what about lumping together all of those above $2,000? A couple of simple IF statements do the trick. I started by building the view like this:


We need to unstack the bars:



Uh oh! We need to do something to make the bars next to each other instead of on top of each other. Let's create a calc that offsets the bars:


This will put the bars that are in the 0-100 bin at 25, 50, and 75. Then those in the 100-200 bin will be 125, 150, and 175. And so on.

We then need to go back to our SALE AMOUNT calculation and account for both the offset and lumping together above $2,000.


Ta da! Magic! Now that we have the correct calculations, it's a matter of building the view.


On the Size shelf, change it to Manual sizing and drag it around until the bars are split up a bit. The tooltip requirement involved a couple more calculations, but none of them are complicated. You can get them from my viz, but only do that if you're REALLY stuck. Give it your best effort first.

Click here or the image below for the interactive version and to download my solution.


October 13, 2020

#WorkoutWednesday 2020 Week 42: Can you build a Strava Workout Calendar?

No comments

Introduction 

When Lorna asked me to be a Community contributor for Workout Wednesday, honestly, I was hesitant since I don’t participate every week. I typically only take on the challenges that I think are most beneficial to me as a teacher. I want to share work that I know the Data Schoolers are likely to use on their placements. Lorna talked me into it (she’s my favorite after all) and I have something pretty straightforward to share with you this week. 

I’m a keen triathlete and track all of my activities on Strava. There are some great dashboards and visualizations that help you understand your performance. One of my favorite is the Training Calendar. It gives you an overview of an entire year at once. And that’s what you’ll build for this workout. 
 
 

Requirements

  • Dashboard size: 1680 x 1020 
  • Max 3 sheets 
  • Max 1 text box 
  • Joins are not permitted 
  • Data model is not permitted 
  • They MUST be separate data sources. 
  • No annotations 
  • No text boxes on the main chart 
  • No floating objects 
  • No Level of Detail expressions 
  • Remove highlighting from anything you can click 
  • Match formatting and tooltips 
  • The blue hex code is #0070A0. 
  • The blue bars on the upper right are the weekly number of hours spent exercising. 
  • The black bars in the main chart are the daily hours spent exercising. 
  • Any days when I did not exercise should have zero hours displayed. 
  • Allow scrolling through the years 

Dataset

The two files you need can be downloaded here. REMEMBER: No joins or data modeling! 

Attribution

When you publish your solution on Tableau Public make sure to take the time and include a link to the original inspiration. Also include the hashtag #WOW2020 in your description to make it searchable! 



Share

After you finish your workout, share on Twitter using the hashtag #WOW2020 and tag @VizWizBI, @AnnUJackson, @LukeStanke, and @_L    orna_Brown.

Solution