This is a guest post by Hans Romeijn. This is a followup post to my recent post on calculating . Hans shows a practitioner's approach to the calculation with performance in mind. The key is to replace conditionals by multiplications with pre-calculated indicator 1 or Null. This can accelerate the calculations significantly, especially when the data set is big.

The companion workbook courtesy by Hans is available for download.

Good implementation and fast speed do matter greatly for business users. ]

---

Recently a post from Tableau Zen Master Alexander Mou showed up in my timeline on LinkedIn. The post was about Simple calculations for YTD/YoY and other timeframes in Tableau and he ended the post with an invite to comment.

As this is something I work with on a daily basis I got curious and followed the link to his blog. It was a very clear step by step explanation. What I noticed that initially the conditions to calculate the timeframes are in the Sales calculation itself. My comment on Alexander’s post was therefore to separate both and work with a 1/NULL indicator.

There are many ways to work with time period based calculations. The way I always set up these calculations is the following:

1.     First I create condition based period calculations for each time frame the business wants to look at. The output of these calculations is either 1 or NULL

2.     I create a parameter to be able to select the necessary time frame

3.     Create two indicator fields (Current Year & Last Year) based on the parameter

4.     Create the actual sales calculations where sales is multiplied with the indicators

Setting it up like this gives me a couple of advantages, such as:

·       All period based calculations can be re-used for other purposes then Sales, e.g. Quantity, Margin, etc.

·       Any changes or bugs can be fixed in one place: the concerning time indicator

·       As the final (Sales) calculation is based on multiplying, there’s minimum impact on performance.

As all data sources and models I worked with have a calendar table, it is even better to actually calculate these indicators in your backend. When working with very big data sets this is definitely preferred.

Working with 1/NULL indicators is not limited to time only. When you actually get the hang of working with indicators, you can use them for all kinds of purposes. I apply them with different kind off conditional calculations e.g. show results for commodity products or certain customer groups only. This way I can avoid using too many filters and I can also use the indicators in LoD calculations.

For now, I will describe how to set up time indicators calculated in Tableau.

Step 1 Condition based indicators:

For each time frame we’re going to create a separate indicator. Below the list of Timeframes I commonly use, including the calculations:

·       YTD (Year to Date)

oCCY: IF DATEDIFF('year',[Order Date],TODAY())=0 AND [Order Date] <= TODAY() THEN 1 END

oLCY: IF DATEDIFF('year',[Order Date], TODAY())=1 AND [Order Date] <= DATEADD('year',-1, TODAY()) THEN 1 END

·       YTM (Year to Month)

oCCY: IF DATEDIFF('year',[Order Date], TODAY())=0 AND DATEDIFF('month',[Order Date], TODAY())>0 THEN 1 END

oLCY: IF DATEDIFF('year',[Order Date], TODAY())=2 AND DATEDIFF('month',[Order Date], TODAY())>24 THEN 1 END

·       YTQ (Year to Quarter)

oCCY: IF DATEDIFF('year',[Order Date], TODAY())=0 AND DATEDIFF('quarter',[Order Date], TODAY())>0 THEN 1 END

oLCY: IF DATEDIFF('year',[Order Date], TODAY())=1 AND DATEDIFF('quarter',[Order Date], TODAY())>4 THEN 1 END

·       QTD (Quarter to Date)

oCCY: IF DATEDIFF('quarter',[Order Date], TODAY())=0 AND [Order Date] <= TODAY() THEN 1 END

oLCY: IF DATEDIFF('quarter',[Order Date], TODAY())=4 AND [Order Date] <= DATEADD('year',-1 , TODAY()) THEN 1 END

·       QTM (Quarter to Month)

oCCY: IF DATEDIFF('quarter',[Order Date], TODAY())=0 AND DATEDIFF('month',[Order Date], TODAY())>0 THEN 1 END

oLCY: IF DATEDIFF('quarter',[Order Date], TODAY())=4 AND DATEDIFF('month',[Order Date], TODAY())>12 THEN 1 END

·       MTD (Month to Date)

oCCY: IF DATEDIFF('month',[Order Date], TODAY())=0 AND [Order Date] <= TODAY() THEN 1 END

oLCY: IF DATEDIFF('month',[Order Date], TODAY())=12 AND [Order Date] <= DATEADD('year',-1, TODAY()) THEN 1 END

·       L12M (Last 12 Months)

oCCY: IF DATEDIFF('month',[Order Date], TODAY())>=1 AND DATEDIFF('month',[Order Date], TODAY())<=12 THEN 1 END

oLCY: IF DATEDIFF('month',[Order Date], TODAY())>=13 AND DATEDIFF('month',[Order Date], TODAY())<=24 THEN 1 END

·       LQ (Last Quarter)

oCCY: IF DATEDIFF('quarter',[Order Date], TODAY())=1 THEN 1 END

oLCY: IF DATEDIFF('quarter',[Order Date], TODAY())=5 THEN 1 END

·       LM (Last Month)

oCCY: IF DATEDIFF('month',[Order Date], TODAY())=1 THEN 1 END

oLCY: IF DATEDIFF('month',[Order Date], TODAY())=13 THEN 1 END

Important! Make sure to convert all indicator calculations to Dimension.

I use the following abbreviations:

·       CCY: Current Calendar Year

·       LCY: Last Calendar Year

·       PCY: Prior Calendar year

·       CFY: Current Fiscal Year

·       LFY: Last Fiscal Year

·       PFY: Prior Fiscal Year

Step 2 Create a parameter

For this example I’ve created a string based parameter with all the possible timeframes:

Step 3 Create the parameter based indicator fields

All the options from the parameter need to be brought back to 1 calculation for each year. This calculation looks like this:

 Ind Period CCY: 

CASE [Period Selection]

WHEN 'YTD'  THEN [Ind YTD CCY]

WHEN 'YTM'  THEN [Ind YTM CCY]

WHEN 'YTQ'  THEN [Ind YTQ CCY]

WHEN 'QTD'  THEN [Ind QTD CCY]

WHEN 'QTM'  THEN [Ind QTM CCY]

WHEN 'MTD'  THEN [Ind MTD CCY]

WHEN 'L12M' THEN [Ind L12M CCY]

WHEN 'LQ'   THEN [Ind LQ CCY]

WHEN 'LM'   THEN [Ind LM CCY]

END

 Ind Period LCY:

CASE [Period Selection]

WHEN 'YTD'  THEN [Ind YTD LCY]

WHEN 'YTM'  THEN [Ind YTM LCY]

WHEN 'YTQ'  THEN [Ind YTQ LCY]

WHEN 'QTD'  THEN [Ind QTD LCY]

WHEN 'QTM'  THEN [Ind QTM LCY]

WHEN 'MTD'  THEN [Ind MTD LCY]

WHEN 'L12M' THEN [Ind L12M LCY]

WHEN 'LQ'   THEN [Ind LQ LCY]

WHEN 'LM'   THEN [Ind LM LCY]

END

Important! Also these calculations should be converted to Dimension.

Step 4 Create the Sales calculations

The final Sales calculations will look like this

·       Sales Period CCY:  SUM([Sales] * [Ind Period CCY])

·       Sales Period LCY:  SUM([Sales] * [Ind Period LCY])

To make this all properly work when applying with e.g. months, it’s best you create at least two additional calculations:

1.     For sorting purpose:
Date Sort Month: DATEDIFF('month',[Order Date],TODAY())

2.     For Filtering purpose, that only the concerning Months are shown:
Ind Period Filter: ZN([Ind Period CCY])+ ZN([Ind Period LCY])

A basic Year over Year comparison could look like this:

With the Period Parameter you can now easily change the timeframe and evaluate results.

Feel free to leave comments. You can contact Hans Romejin for questions.

Click the image to download the companion workbook and the table of indicators that you may use in your workbook.



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.

(Addendum: Jonathan Drummey has a much better Tableau-only solution that I missed from his presentation. I only caught later part of the presentation.

[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.

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.

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.

[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.

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.

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.

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.

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.

Just came across a report by Reuters on USA-China gap widens between respective internet giants. The report includes a text table. The caption says the table columns can be sorted. But it is a static image. (They retracted the table after I reported the issue.)

It picked my interest.

1

In the process of creating a dashboard on the US Travel Advisory 2023, I found some mismatches in a few regions in two countries.

Gaza Strip

One is Gaza Strip in Palestinian Territories. In the latter, there are two regions: Gaza Strip and West Bank.

This is a follow up post to Fiscal Calendar Calculations Cheatsheet for Tableau.

Excel is a very important tool for data analysis and calculations. It's also an important data repository for Tableau.

Week-based calendars are used in many companies as their fiscal calendars. The total weeks in a fiscal year is 52 weeks, that is, 364 days. Each quarter has 13 weeks. There are 3 varieties of 13 weeks: 5-4-4, 4-5-4 and 4-4-5 weeks per quarter. In leap years, there are 53 weeks or 371 days.

Christine suggested me to have a look at Simpson's Paradox, following my recent posts on Anscrombe's Quartet and Datasaurus Dozen. They are all about learning to look at statistics in an impartial way.

#TweakThursday: From time to time I tweak someone else's public viz and try to make it better to my subjective view.

This post is about 13 data sets, known as Datasaurus Dozen, that have the same stats and different distributions. Stats can be deceiving while data visualization can makes a big difference.

Francis Anscombe, a British statistician and a professor at Princeton and Yale, constructed 4 different sets of data which all have the same stats, known as Anscombe's quartet. However the quartet's data distributions are quite different. 

Stats alone can be deceiving.

In a single day, I am asked twice the same question: how to install database drivers for Tableau in Mac? The question of the day is regarding the drivers for Presto and PostgreSQL databases. The docs online may not answer the question exactly.

There are always more than one ways to skin a cat. In Tableau, there is always one more way to design the same chart. Mastering them will give us more options to satisfy the various requirements we may be asked for.

Line chart is one of the most basic ones.

I almost named the post as Charting "Top N and Others" via Post-filtering. Read on to understand why.

Visualizing "Top N and Others" is an often required business use case. A popular solution is by creating a top N set. That's the one I have been using through the years.

Angel works in Finance. She often asks me questions on calculations in a table. Today I got this question: How to calculate Year over Year (YoY) change ratios for both quarterly and yearly sums, in a single sheet?

Here is the solution we got. First there are two parts for the YoY calculation.

Just came back from Tableau Conference 2022 at Las Vegas. What an exciting event! The most exciting thing is reuniting with old friends and meeting with the datafam people known online for years.

Attended first time the Tableau Visionary summit.

A little enhancement in the formula editor can make a big difference for whose who create formula all the time in Tableau. Here are my wishes for a future editor. 

Highlighting Syntax Words

Currently a formula in Tableau can look plain and a bit uninspiring.

For the sake of uniformity in a bar chart, we may need to filter out dates in the latest partial week, month, quarter or year. That is what Parinita asked me about a filter to do just that.

Before Belinda asked me about making phone calls from Tableau dashboard, she had some issues in creating an email template in Tableau. Many people might have known how to do the basics.

Belinda needs to call business partners in foreign countries regularly. She has a dashboard showing various deadlines that she has to monitor. If a deadline is overdue, she may need to talk to the partner in question. She has already integrated email in the dashboard via URL action.

This post is about labeling a trellis chart that's already in dual axis.

In earlier posts on labeling trellis chart, we use one axis for the labeling function. Many times, the chart is already in dual axis (both axis are taken).

In online Tableau literature, I noticed that most people referred to Zen Master Chris Love's formula in a 2014 post about the size of a trellis chart.

Sharon left a message in my last post on Labeling Trellis Chart Anywhere asking whether we can have one label on the left and another on the right per trellis chart cell in Tableau. Yes we can. Below we will show how to place multiple labels within a trellis cell.

Catherine came to my office asking if we can create a compact version from a sparse table in Tableau, so that the table would look a lot more compact. This allows a succinct view of the table content. It saves screen real estate and makes it easy to read for business audience.

In my previous post on labeling trellis chart, I only showed how to label at the top left corner. People like Chipo Chirewa may want to label elsewhere.

Here I would show how to label anywhere in a trellis cell, like places other than the top left corner.

3

[Sequel to this post: Labeling Trellis Chart Anywhere]

To many people, the most difficult part of creating a trellis chart is to label it. Especially labeling it in the same sheet and with sparse data is even harder.

1

Many times, Tableau is used beyond data visualization. Often we need to perform all sorts of functions. Actually, Tableau is a powerful calculator. Instead of using another tool, such as Python or Excel, we can do it in Tableau proper.

Here is a use case at work where the grand total of a table needs to be accumulated horizontally to the right.

In the table, daily sales are shown by categories. The expected result is as follows:

We will use customized grand total technique to calculate it.

The term Fill Down is from Excel where we may need to fill all the empty cells below a non-null cell with the same cell value. Excel has a Fill Down button in the menu bar for a single cell fill down. We may also have to fill down between multiple non-null cells in the same column.

In data analysis, we need to use filters here and there. In general, we would classify them as pre-filters or post-filters for better understanding of their respective mechanisms.

A pre-filter works on the data set. It only keeps the data we need for the analysis.A post-filter works on the results.

2

Note first that here I loosely define data densification as what includes both interpolation and extrapolation of data marks as well as their associated values.

[ This is a guest post by Hans Romeijn. This is a followup post to my recent post on calculating YTD/YoY, QTD/QoQ, MTD/MoM and WTD/WoW. Hans shows a practitioner's approach to the calculation with performance in mind.

I was asked a question: How to find out the IDs that showed up consecutively 5 times during the last 14 days?

How would you solve it?

Here I came up with 2 solutions. The 2nd one is a little simpler.

1

In corporate finance, bridge chart is often used to visualize itemized sales/revenue performance during a particular period, such as a quarter or a year.

Bridge chart can be designed using waterfall chart. But we will use a different approach.

A colleague posted this: "Hi Team, may I ask if you have any good idea to show the % difference of two randomly selected data points on a line chart?"

I found a solution to it, which is as follows.

The show/hide buttons in containers and also in sheets allow us to create drill down functionalities in Tableau dashboards. Actually they make it simple to drill down in more ways than before.

Drill down with fixed sized containers

Here is an example. Given a simple bar chart by category.

Subtitle: Sunburst Chart with Labels Inside and Categorical Sequential Colors

Here I am presenting how to design Sunburst Chart with practical considerations, such as:

Labels insideCategorical sequential colors with dynamic data.The design will be based on map layers, a new feature since Tableau d

[ Followup guest post by Hans Romeijn: Calculating Period-To-Date/PoP with Indicators for Better Performance ]

Year to Date (YTD) and Year over Year (YoY) calculations are very important in business dashboards. Jim Dehner recently wrote a great post on the topic.

9
Blog Archive
Loading
Dynamic Views theme. Powered by Blogger. Report Abuse.