Latest

Week 29: Connected Scatter Plot on Hover

This Week’s Challenge requires some data modelling, but allows for additional UX features not natively available in the product.

Requirements

  • Dashboard size is 600 x 600
  • The Scatter Plot has Sales by Profit for each Category and Year
  • When a user hovers over any category, all years for the category will be connected by a line
  • The line connects the categories by year in ascending order

Dataset

This week uses the superstor-ish. It  doesn’t matter which one you use, but  you can get 2018.1 here at data.world

Share

After you finish your workout, share on Twitter using the hashtag #WorkoutWednesday and tag @AnnUJackson@LukeStanke, and @RodyZakovich.  (Tag @VizWizBI too – he would REALLY love to see your work!)

Track your progress

Also, don’t forget to track your progress using this Workout Wednesday form

#SPOILERS

Week 28: Order Profit

Workout Wednesday in August

August is community submission month. For all 5 of those weeks we’ll have our favorite submissions as challenges. You can submit here.

 
 

This week’s challenge.

Sometimes we want to look at the spread of our data, but we often end up with one or two groups that much, much higher levels. This often leaves us with many bars that are very small. In these cases – specifically cases where we want to emphasize the smaller values – I like to use a log axis. This week we’ll take a look at log axes by looking at the variability in per-order profits by sub-category.

click to view on Tableau Public

Requirements

  • Dashboard size is 500 x 700; tiled; 4 sheets
  • Use the superstore dataset. Focus on the Sub-category of the “Technology” category.
  • Show profit per order on the columns (x-axis).
  • Use a parameter to round the profit to the nearest $25, $50, $100, $250, $500, or $1000.
  • Show distinct count of orders on the rows (y-axis). Set your axis to run from 0 to 999.
  • Set the axis to be log.
  • Make sure to assign the highlight color to each sub-category.
  • Filter to orders with profits from -1500 through 1500.
  • Create bars and center them on the appropriate value. Set the width of the bar to the rounded value.
  • Add annotations so they only show when $100 is selected on the parameter.
  • Set the height of the Accessories, Copiers, and Office Supplies to 110 pixels. Set Phones to 160 pixels.
  • Match color, tooltips, and formatting. I’ll be paying attention to all parts.

 

Dataset

This week uses the superstore dataset for Tableau 2018.1.  You can get it here at data.world

 

Share

After you finish your workout, share on Twitter using the hashtag #WorkoutWednesday and tag @AnnUJackson, @LukeStanke, and @RodyZakovich.  (Tag @VizWizBI too – he would REALLY love to see your work!)

 

Track your progress

Also, don’t forget to track your progress using this Workout Wednesday form.

 
 
 

#SPOILERS

  • You need to create a parameter and 5 calculated fields.
  • 3 of the calculated fields are just duplicating the sub-category field.
  • One of the calculated fields is equal to the parameter values.
  • Make one sheet first before you do the rest. This way you can just duplicate them.
  • You can use FIXED or INCLUDE level of detail functions to solve this problem. Or you can use a table calculation.
  • ROUND({FIXED [Order ID], [Sub-Category] : SUM([Profit])}/[Round Parameter]) * [Round Parameter]
  • You can always download the workbook for more help.

 

Week 27: How do current year sales compare to previous?

For this week’s workout I’ve decided to keep things simple and focus on creating one powerful alternative visualization for comparison over time.  I think we all tend to get stuck in a bar chart rut and struggle to find ways to spice things up.  I tend to do this a lot, especially when I am comparing large chunks of time.  It is so easy to build out a bar chart with years or months on labels that go in sequential order.  (And let’s be honest, there’s really nothing wrong with that!).  But sometimes the sequential ordering of years prevents us from doing multiple comparisons at the same time.  Bar charts can also get messy when there are tons of dimensions slicing up our view.  Bar charts love vertical space.

So instead of a bar chart, this week we’re building out dot plots!  Dot plots have the advantage of using position instead of length for data comparisons.  They can make it easier when looking at multiple comparative data points to spot trends or patterns.  They become very powerful if what your audience cares about is something like a specific measurement compared to all other recordings of that measurement.  You’ll notice that the visualization forces you to focus on the color representing “current year” but you can’t mentally map a trend of sales by year.

To help make the dot plot shine, I’ve found that adding a horizontal line works really well.  The simple act of the horizontal line makes cognition quicker – grounded by the line scanning left to right becomes automatic.  I’ve also spiced up the labels, colors, and tooltips to ensure that you keep strengthening your skills.

click to view on Tableau Public

 

Requirements

  • Dashboard size: 1250 x 900, 2 sheets, tiled
  • Each dot represents annual sales by subcategory
  • Color of dots:
    • Most recent year below average = pink
    • Most recent year above average = blue
    • Not most recent year = gray
  • Calculation for most recent year should work if data updates and 2018 gets added in (don’t hard code 2017!)
  • Match tooltip language – don’t hard code the number of years, build a calculation!
  • Match formatting: specifically horizontal line, banding, reference line
  • Don’t forget about the legend

I’ve added on a year filter so you can see what the tooltips and colors look like – I will be checking to see what happens if I filter out 2017!

This week uses the superstore dataset.  You can get it here at data.world.

After you finish your workout, share on Twitter using the hashtag #WorkoutWednesday and tag @AnnUJackson, @LukeStanke, and @RodyZakovich.  (Tag @VizWizBI too – he would REALLY love to see your work!)

Also, don’t forget to track your progress using this Workout Wednesday form.

Week 26: Single Sheet Drilldown

It seems lately I have been giving the easy challenges, so I wanted to spice it up with something harder. This week we are going to deal with a new challenge that requires some thinking on Dashboard Actions and Data Modelling. The goal of this challenge is to open up how we think about Tableau from the Data layer, and how we can structure data and actions to create new functionality.

 

Requirements

  • THIS IS A SINGLE SHEET. This is not using the 3 sheets in a container technique
  • The first Level is Year, the Second Month and the Third is Day
    • You drill into whatever you click. If you click on 2015 at the Year Level, you will see all 12 months for 2015
    • Users can control->drag to select multiple years/months and Tableau will drill down with all selected.
  • When a user clicks on a Day at the Third Level, the viz resets back to all Years
  • The Sub Header will let the user know the date range in the viz.
  • If you have no idea where to start, or where to go, see spoilers below.

Dataset

This week uses the superstore dataset for Tableau 2018.1.  You can get it here at data.world

Share

After you finish your workout, share on Twitter using the hashtag #WorkoutWednesday and tag @AnnUJackson@LukeStanke, and @RodyZakovich.  (Tag @VizWizBI too – he would REALLY love to see your work!)

Track your progress

Also, don’t forget to track your progress using this Workout Wednesday form.

Spoilers

  • If you want to try this, but not sure where to start, check out this post by Joshua Milligan
  • If you just want to know how I did this, check out my at the EMEA Tableau Fringe Fest on the Fringe Fest YouTube Channel

Week 25: Segmentation Drift

This week we start using the analytical tools — specifically clustering. Tableau’s built in cluster algorithm can be used to do customer segmentation. But instead of doing this by customer we are going to keep it simple by using sub-category and region.

Intermediate

click to view on Tableau Public

 

Jedi

click to view on Tableau Public

Requirements

  • Dashboard size is 700 x 800; tiled; 2 sheets
  • Create clusters using Profit Ratio (Total Profit/Total Sales) and average discount from only 2015 for sub-category and region. This is the basics of segmentation
  • Show the consistency of each cluster by plotting this over year, as well.
  • Match tooltips.
  • Label the clusters in 2015. Only show the label once. Don’t place many marks of text on top of each other.
  • Match color and formatting. I’ll be paying attention to all parts.
  • JEDI ONLY: Create hub-and-spoke plots that connect the center of each cluster to the value sub-category/region combinations that are part of the 2015 cluster.

 

Dataset

This week uses the superstore dataset for Tableau 2018.1.  You can get it here at data.world

 

Share

After you finish your workout, share on Twitter using the hashtag #WorkoutWednesday and tag @AnnUJackson, @LukeStanke, and @RodyZakovich.  (Tag @VizWizBI too – he would REALLY love to see your work!)

 

Track your progress

Also, don’t forget to track your progress using this Workout Wednesday form.

 
 
 

#SPOILERS

  • Download the data from data.world. It’ll be easier with a .csv or .xlsx
  • You’ll need to union the data to itself.
  • Create some of the calculations to run when the [Table Name] = “Orders$”
  • For the clusters: filter the data to 2015. Build the chart with the measures of average discount and profit ratio and the dimensions of sub-category and region. Save the cluster as a dimension/group.
  • Size of the hub circle is 20x the other values.
  • You can always download the workbook for more help.

 

Week 24: Do customers spend more on their first or second purchase?

This week I’m taking Workout Wednesday to the next level by including Tableau Prep in the equation!  If you don’t have Tableau Prep, go get the 30 day trial from here.

Prep was released just over a month ago, so it’s the perfect opportunity for us to ensure we’re strengthening our visualization skills and including all pieces of the Tableau platform.  Prep adds capability to do aggregations, joining, and cleansing all before data reaches Tableau Desktop – so let’s take advantage of it!

click to download Tableau Prep

This week’s workout starts with the base Superstore set, but focuses a significant portion on developing a custom hyper extract for the final visualization.  If you’re using Tableau Public, you can output the final table from Prep into a CSV instead of a hyper file.

The final visualization this week compares buying habits of Superstore customers between the first purchase date (all orders accumulated on that day) vs. the second purchase date (all orders accumulated on that day).  The main comparison is between the total sales, but I’ve also added in the number of unique categories and unique products for additional effort.

I’ve chosen to use a scatterplot and accompanying strip plots to demonstrate the spread of each individual metric and the two of them in combination.  Strip plots can be effective when you’re trying to look at dense data.  It also helps the end user to quickly see the minimum and maximums of the scatterplot on each axis without having to navigate across the entire view.  A line with a slope of 1 through 0 has also been added to quickly dissect customers into 2 categories (habits): those who purchase more the second time and those who purchased more the first time.

click to view on Tableau Public

Requirements

  • Create a data set in Tableau Prep with the following information
    • Customer ID
    • Date of First Purchase (minimum order date)
    • Date of Second Purchase (next minimum order date)
    • Sum of Sales, Count Distinct of Category, and Count Distinct of Product ID for each date
    • Remember: I’m using all the orders on specific dates and not finding the oldest single order
  • Dashboard size: 800 x 800, 3 sheets – all floating (sorry!)
  • Create a scatterplot with first purchase date sales vs. second purchase date sales
  • Create a line through 0 and match annotations for spend
  • Create strip plots for the sales measures and line them up with the scatterplot
  • Match tooltips
  • Important Exclusions: 2 customers were excluded due to their size, make sure BM-11140 and SM-20320 are filtered out at the data source level

What the data set looks like

  • Fields: Customer ID, 1st Purchase Date, 2nd Purchase Date, 1st Purchase Sum Sales, 2nd Purchase Sum Sales, 1st Purchase # Categories, 2nd Purchase # Categories, 1st Purchase # Products, 2nd Purchase # Products
  • Total Rows: 781, with the visualization having 779 points after the 2 exclusions

Hints

  • Struggling to build it out in Prep or need to check your work?  Make a crosstab in Tableau with the base data
  • If you don’t have access to Prep, you can find the CSV here: bit.ly/WW24CSV
  • Axis labels/titles are on the strip plots, not the scatterplot
  • Make sure all your axes are fixed on the same ranges
  • There is only ONE calculated field in Tableau Desktop!

This week uses the superstore dataset.  You can get it here at data.world  And remember, you can message me on Twitter if you don’t have access to Tableau Prep!

After you finish your workout, share on Twitter using the hashtag #WorkoutWednesday and tag @AnnUJackson, @LukeStanke, and @RodyZakovich.  (Tag @VizWizBI too – he would REALLY love to see your work!)

Also, don’t forget to track your progress using this Workout Wednesday form.

Week 23: How do Sales compare in the Current Period to the Previous

I’m back after a semi-extended leave, but hoping I have a good challenge for everyone.

I love working with Dates, and have come across all sorts of use cases for comparing like-wise periods of time. The challenge below covers a use-case of trying to compare a Custom Date range, to the same number of days previous period.

 

Requirements

  • User can select a Start and End date for the Current Period
  • The “Previous Period” contains the same number of days as the Current Period, and ends the Day before the Start Date
  • Both the “Current” and “Previous” Periods must be on the same Date Axis (No dual Axis!)
  • The Current Period must be distinguishable from the previous period
  • Must show the Current Period Range, as well as, the Prior Period Range

Data

You can superstore data on data.world.

Share

After you finish your workout, share on Twitter using the hashtag #WorkoutWednesday and tag @VizWizBI, @AnnUJackson, @LukeStanke, and @RodyZakovich.  (Tag @VizWizBI too – he would REALLY love to see your work!)

Week 22: Which city contributes the most sales to each state?

He’s back again! Andy Kriebel shares with a problem that you can only use table calculations to solve

click to view on Tableau Public

Requirements

  • Use only table calculations
  • The bar length is the total sales of each state
  • City must be included in the view.
  • Display only one mark per state.
  • Label each bar by the city with the highest sales, sales for that city, and the total sales for that state.
  • No level of detail calculations allowed.

Data

You can superstore data on data.world.

Share

After you finish your workout, share on Twitter using the hashtag #WorkoutWednesday and tag @VizWizBI, @AnnUJackson, @LukeStanke, and @RodyZakovich.  (Tag @VizWizBI too – he would REALLY love to see your work!)

Week 21: Profit and Sales Cat Emoji Map

This week’s Workout Wednesday is an emoji map. The original idea comes from a Dark Sky emoji map of the weather.

click to view on Tableau Public

This worksheet has several major elements you’ll have to work through:

  • Data modeling
  • Percentiles
  • Hex bins of geospatial data
  • Working with emojis
  • Customized “legend”

Requirements

  • Dashboard size: 600 x 600, 2 sheets (floating and tiled)
  • Map latitude and longitude at the city level. Round the values to the nearest two degrees. Then then use hexbins – you’ll need this supplemental data set.
  • Emojis are broken into top/middle/bottom 3rd percentiles for both total profit and total sales. Break out the percentiles by each mark on the hexmap.
  • Show all emojis in “legend”.
  • Match the cat emoji values in the “legend”.
  • Match formatting on the map.

Data

This week uses the superstore dataset plus a supplemental dataset with latitude/longitude of cities.  You can superstore and supplemental data on data.world.

Share

After you finish your workout, share on Twitter using the hashtag #WorkoutWednesday and tag @AnnUJackson, @LukeStanke, and @RodyZakovich.  (Tag @VizWizBI too – he would REALLY love to see your work!)

Also, don’t forget to track your progress using this Workout Wednesday form.

Cat Emojis

  • 🙀
  • 😿
  • 😹
  • 😾
  • 😽
  • 😸
  • 😼
  • 😺
  • 😻

#SPOILERS

  • Join the two data sources at the state and city level.
  • HEXBINX() and HEXBINY() will be used.
  • HEXBINX([lat]/2, [lng]/2)*2 rounds by 2s.
  • Group into 1/3s: INT(LEFT(STR(PERCENTILE_RANK(SUM([???]))*3), 1))
  • FORMAT YOUR MAP!!! REMOVE BORDERS!!!

 

Week 20: All About Distribution

This week I was cleaning up my desk and found some old notes where I had been jotting down ideas around visualizing distributions.  At the time I was working with a data set where data points were concentrated around specific numbers and I was exploring ways to visually capture the concentration.  I love looking at distributions and they are a go-to tool when I do exploratory data analysis or data profiling.  Traditionally the box plot (or box and whisker plot) and the histogram are greats way to deal with this type of data.  Box plots take key statistical components of your data set and summarize them.  Histograms use binning to show the distribution of a numeric value.  Despite their high value, people can be turned off when they read things like IQR or when describing a histogram (they are always a mouthful!).  When that happens I’ve found that using a dot plot of the individual data points and adding jitter (so dots aren’t stacked) can be a more comfortable way to view distributions.

So with that intro, I’m hoping your brain is now stuck on different ways to visualize distributions!  This workout will look at combining box and whisker plots, histograms, and applying jitter to display different types of distributions.  There’s also some fun formatting thrown in for good measure.  As you build out the solution, pay close attention to calculated bins – I think these are secret powerful creatures in Tableau.

Viz inspiration shout outs: Joshua Milligan & Alexander Mou; check out Joshua’s post to see how he approached the topic

click to view on Tableau Public

Primary Question:  What is the distribution of products by quantity sold?  Or as it is named in the title, how many products sold X quantity?
Secondary Question: What is the distribution in average unit price of the products?
Tertiary Question: What is the distribution of how these products were discounted?

Requirements

  • Dashboard size: 1200 x 650, 3 sheets – TILED
  • Dashboard is limited to Furniture subcategories
  • Create a histogram with boxplot combination chart using distribution of products by quantity
  • A product is defined by it’s product name
    • Use this when counting products and building aggregations
  • Average unit price is considered (sum sales per product)/(quantity sold per product)
  • Build in dashboard actions that do the following
    • Clicking on bar(s) in histogram will highlight dots and filter discount histogram
    • Pay attention to the discount histogram – it always takes up the same amount of space, even when filtered
  • Match formatting & tooltips; pay attention to labels and seamless banding

This week uses the superstore dataset.  You can get it here at data.world

After you finish your workout, share on Twitter using the hashtag #WorkoutWednesday and tag @AnnUJackson, @LukeStanke, and @RodyZakovich.  (Tag @VizWizBI too – he would REALLY love to see your work!)

Also, don’t forget to track your progress using this Workout Wednesday form.

Hints & Detail

  • Pink #ff007f; 60%
  • Blue #17becf; 60%
  • Orange #2f28e2b; 60%
  • Boxplot: Very Dark Gray; 20%
  • I used ‘show empty rows’ for the discount histogram
  • I ended up with 2 LODs & 2 bins
  • Jitter uses INDEX() – your jitter may vary