This is a guest post from Aaron Henckler.
Waterfall charts are great, especially for visually showing the contribution of parts to a whole. While there are several tutorials on how to make a waterfall chart online the end products of these tutorials rate low on the visually appealing scale.
The principle problem with these charts is the separation between the elements of the waterfall. They are always either pushed together (Example A) or left apart, without element connectors (Example B):
Example A

Example B

Many users of waterfall charts employ the separated (default) version (example B) opting to add in element connectors manually via Insert>Shapes>Line on the Excel tool bar. The frustration with this approach is that all too often the values of the chart elements will need to be updated or changed forcing user to manually readjust each of their connector lines in turn.
With some simple charting trickery in Excel 2007 one can easily make a waterfall chart with connectors that will update automatically as element values are changed.
A Better Waterfall Chart

Steps to Building a Better Waterfall Chart
List of data series (columns) needed for your chart:
- Horizontal Axis Labels: in the example above North, East, South and West.
- Base Values: What your element values will “sit on.” Essentially this is the white space beneath each charted element shown above.
- Element Values: the meat and potatoes of your chart – the value of your elements as you want them to appear (above these are 40, 30, 20, 10 and 100).
- Label Spaces: This is optional but it allows you to place the value of you data elements on top of their respective bars (this avoids the use of the annoying Label Position options available after one has used Add Data Labels).
- Label Connectors: This is the key item needed to create the chart as shown above. You will need one column (series) for each of the data elements (excluding one for the total). For the chart above, four label connector series are needed.
Step 1: Enter all of the required series in a worksheet:

- Horizontal Axis Labels – self explanatory
- Base Values – A running total of the subsequent Element Values (Column C). Whereas nothing proceeds North in the example above leave its base value blank. Do the same for Total.
- Element Values – These are whatever numbers you want to highlight in your chart. These are represented by the blue column segments in the above chart.
- Label Spaces – Again this is optional. These will eventually hold text labels for the Element Values (Column C). The numbers here should all be the same and be some number about 1/4 to 1/3 the value of your lowest Element Value.
- (to H. ) Connectors – Connectors 1 to 4 correspond to Axis Labels North to West in the example above. In the respective Connector column make the cell at the row corresponding to the related Axis Label equal to the sum of Column B + Column C (Base Value + Element Values). Enter the same value for the cell beneath.
Step 2: Chart data and adjust
1. Select your data, here A2:H6, and go to Insert>Charts>Column>2-D Column>Stacked Column>OK (to exit). Your chart should look like this:

2. Switch column and row data by right-clicking within the chart and going to Select Data…>Switch Row/Column>OK (to exit). Chart should now look something like this:

3. The top colored column element in each column (purple, aqua, orange and baby blue, respectively) is what will become that Element Value’s connector. To convert to these columns to connectors, in turn, right-click on the series (the first one is the purple column element) and go Change Series Chart Type…>Line>Line>OK (to exit). Repeat this process for the other connector column elements (aqua, orange and baby blue). After this step your chart should look like this:

4. Follow this up by formatting each connector in turn. Right-click on the connector and go Format Data Series…. Consider making the Line Color>Solid Line>Color black, Line Style>Width .25 pt and Line Style>Dash Type>Square Dot. Play around with these options as you see fit to get the best look. Again, do this for each connector.
5. Remove grid lines (optional), delete the Legend (necessary). Your chart should now look like this:

6. Go into you Base Values series (blue column element in the chart above) and eliminate the color fill and borders: right-click on a blue column element and go Format Data Series….>Fill>No Fill and Border Color>No Line>Close (to exit).
7. Format your Element Values series (red above, using same process in Step 6 to change the fill color and add a border.
8. Right-click on your Label Spaces series and go Add Data Labels…. Don’t worry about the value on the labels for now, they’ll be changed in the next step. Follow this up by formatting the Label Spaces series just like how the Base Values series was formatted (in Step 6). Make it so there is no fill and there are no borders. This is what you should now have:

9. All that remains is to convert your labels to the values of the Element Values. To do this for each label: click on the specific label twice (so that only the box for that label appears, as below).

Click a third time on the edge of the box that appears and then type the equals sign “=”. Now go back to your data table and click on the cell of the Element Value that you want appear in the label. Then press enter. This links the value of the label to the Element Value (if your Element Value ever changes so too will the text in this label). Repeat this for the other data labels in turn. The result is your Better Waterfall Chart:

Download the Waterfall Chart Template:
Please download the waterfall chart template from here [.zip version here]
Final Thoughts
I hope you will agree that this waterfall chart is more visually appealing that the examples at the start of this tutorial. In addition to a more professional look this waterfall will fully update (step heights, labels, connector positions) automatically whenever you change your Element Values. While the process of implementing this form of waterfall chart may at first seem cumbersome it can be quickly implemented with some practice and is a great item to have in your charting toolkit. Enjoy.
Note from PHD:
- Thank you so much Aaron. You have taught us a very valuable tutorial. I really appreciate your effort in putting this together.
- If you need to make a lot of waterfall charts, I recommend trying Jon Peltier’s Waterfall Chart Utility.
Hello there, Reader: If you like this waterfall chart tutorial, please drop a note of thank you to Aaron through comments.














13 Responses to “Using pivot tables to find out non performing customers”
To avoid the helper column and the macro, I would transpose the data into the format shown above (Name, Year, Sales). Now I can show more than one year, I can summarize - I can do many more things with it. ASAP Utilities (http://www.asap-utilities.com) has a new experimental feature that can easily transpose the table into the correct format. Much easier in my opinion.
David
Of course with alternative data structure, we can easily setup a slicer based solution so that everything works like clockwork with even less work.
David, I was just about to post the same!
In Contextures site, I remember there's a post on how to do that. Clearly, the way data is layed out on the very beginning is critical to get the best results, and even you may thinkg the original layout is the best way, it is clearly not. And that kind of mistakes are the ones I love ! because it teaches and trains you to avoid them, and how to think on the data structure the next time.
Eventually, you get to that place when you "see" the structure on the moment the client tells you the request, and then, you realized you had an ephiphany, that glorious moment when data is no longer a mistery to you!!!
Rgds,
Chandoo,
If the goal is to see the list of customers who have not business from yearX, I would change the helper column formula to :
=IF(selYear="all",sum(C4:M4),sum(offset(C4:M4,,selyear-2002,1,columns(C4:M4)-selyear+2002)))This formula will sum the sales from Selected Year to 2012.
JMarc
If you are already using a helper column and the combox box runs a macro after it changes, why not just adjust the macro and filter the source data?
Regards
I gotta say, it seems like you are giving 10 answers to 10 questions when your client REALLY wants to know is: "What is the last year "this" customer row had a non-zero Sales QTY?... You're missing the forest for the trees...
Change the helper column to:
=IFERROR(INDEX(tblSales[[#Headers],[Customer name]:[Sales 2012]],0,MATCH(9.99999999999999E+307,tblSales[[#This Row],[Customer name]:[Sales 2012]],1)),"NO SALES")
And yes, since I'm matching off of them for value, I would change the headers to straight "2002" instead of "Sales 2002" but you sort the table on the helper column and then and there you can answer all of your questions.
Hi thanks for this. Just can't figure out how you get the combo box to control the pivot table. Can you please advise?
Cheers
@Kevin.. You are welcome. To insert a combo box, go to Developer ribbon > Insert > form controls > combo box.
For more on various form controls and how to use them, please read this: http://chandoo.org/wp/2011/03/30/form-controls/
Thanks Chandoo. But I know how to insert a combobox, I was more referring to how does in control the year in the pivot table? Or is this obvious? I note that if I select the Selected Year from the PivotTable Field List it says "the field has no itens" whereas this would normally allow you to change the year??
Thanks again
worked it out thanks...
when =data!Q2 changes it changes the value in column N:N and then when you do a refreshall the pivottable vlaues get updated
Still not sure why PivotTable Field List says “the field has no itens"?? I created my own pivot table and could not repeat that.
Hi, I put the sales data in range(F5:P19) and added a column D with the title 'Last sales in year'. After that, in column D for each customer, the simple formula
=2000+MATCH(1000000,E5:P5)
will provide the last year in which that particular customer had any sales, which can than easily be managed by autofilter.
Somewhat longer but perhaps a bit more solid (with the column titles in row 4):
=RIGHT(INDEX($F$4:$P$19,1,MATCH(1000000,F5:P5)),4)
[…] Finding non-performing customers using Pivot Tables […]