Pages

Tuesday 16 July 2013

Interactive Pivot Table Calendar & Chart in Excel!



Can we make a calendar using Pivot Tables?!?
Of course we can. Today let us learn a simple technique to create calendar style reports using Pivot tables.

Thanks to Rob for inspiration

Before making any progress, let me thank Rob from PowerPivotPro for the inspiration. Recently he wrote an article explaining how to use PowerPivot & DAX formulas to create calendar charts in Excel. I applied similar technique to Pivot tables.

Demo of Pivot Calendar

See a quick demo of pivot calendar chart before learning how to do this.
Excel Pivot Table Calender - Demo & Explanation

Creating a Pivot Table Calendar

Step 1: Set up an entire year of dates in a list

Lets assume, we want to make the calendar for year 2012. So write that in a cell (G3). Now, in a range of 366 cells, generate all the dates for the year (2012) using simple formulas.
  • First date will be =DATE(G3,1,1)
  • Next 365 dates will be previous date + 1
Pivot calendar - Data & formulas to generate a pivot calendar

Step 2: Calculate Day, Month, Year and Weekday

Using DAY(), MONTH(), YEAR(), WEEKDAY() calculate the day, month, year and weekday for each of the 366 days.

Step 3: Determine the week number in a month

Now comes the tricky part. We need to find out which row each date should be displayed. First take a look at this illustration.
Pivot Calendar row number calculation explained
The logic for calculating row numbers is very simple:
  • First day of a month is always in row number 1.
  • If a day is not Sunday, we just use previous row number
  • On Sundays, we just increment the previous row number and use it.
All of this can be expressed in a simple IF formula =IF(D7=D6,IF(F7=1,G6+1,G6),1)
  • D7 contains this month, D6 is previous day’s month
  • F7 contains weekday, will be 1 for Sunday and 7 for Saturday
  • G6 contains previous row number (weeknum)

Step 4: Dealing with Leap years

So far we are good, except for a minor glitch. Certain years have 366 days (for example 2012) while others dont. That means, depending the year, we need to either use 365 rows or 366 rows of our data while generating the pivot report. To do this, we create a named range tblDates that refers to below formula:
=IF(Calcs!$D$3,Calcs!$B$5:$G$371,Calcs!$B$5:$G$370)
Note: D3 is TRUE when an year is leap year.

Step 5: Create pivot table that shows calendar

Now, we need to create a pivot table from the range tblDates.
Set up your pivot table like this:
Setup Pivot Table Calendar - steps

Step 6: Add a slicer

To enable users to select a particular month interactively, just add a slicer on months. For this,
  1. Select any cell in the pivot table and go to Options Ribbon > Insert Slicer
  2. Select Month as field to insert a slicer.
  3. Adjust slicer properties to show items in 6 columns (Slicer Options Ribbon > Columns)
  4. Done!
At this point, you can interactively select a month & see the corresponding calendar.