Wednesday 9 April 2014

Waterfall Table


The waterfall table is one of the best tools I use and I include it with every campaign list I ever submit to marketing.  This is a separate table that breaks down all of the criteria I that was used to create the campaign list.  It is a fantastic way of answering most of the questions the marketing department will have when you submit the list to them.  The marketing department will typically know that you have a certain number of customers but they won’t know how many customers are lost every time you apply each criteria.  From a marketing standpoint they will know how many customers were available for a campaign but they will have a lot of questions when the final list has only one quarter of the original amount.  A water fall table will answer their questions very quickly.  This table accomplishes two things, it answers what criteria was used and how many customers were lost with each criteria.   A typical water fall table will look like the following:

Criteria
# Removed
# Remaining
01 Starting number of customers
                   -  
            50,000
02 Do Not Call customers
         12,000
            38,000
03 Customers from previous campaign
         10,000
            28,000
04 Customers that do not qualify
            1,500
            26,500
05 Customers with a bad credit history
            1,100
            25,400
06 Customers that do not live in appropriate geography
            8,000
            17,400
07 Customers with a bad address
            1,200
            16,200
08 Customers in the control group
            1,500
            14,700
Total Available customers

            14,700

The best way I know how to create a water fall table is to create many versions of them as you apply your criteria.  For example, create the first water fall table with a count query including a field describing the reason for the number of records.  The first query should look similar to the following:

proc sql;
      Create table Waterfall01
      select  count(*) as count
                  , '01 Starting number of customers' as Reason
      from Table01
      order by Reason;
quit ;

The above code will create a table called “Waterfall01” with one record and two fields.  Field 1 will be called “count” and will have the number of records from your original table.  Field 2 will be called “Reason” and will have the descriptive text you entered to describe the number of records.

As you move forward use the union query to cumulatively add your criteria as you select it.
Using the example of the waterfall table above we would then remove customers who are on the “Do Not Call” list.  We can apply the following code   (Please note, the logic of removing the customers for each criteria is beyond the scope of this article).

proc sql;
      create table Waterfall02 as
      select *
      from WaterFall01

      union

      select  count(*) as count
                  , '02 Do Not Call customers' as Reason
      from Table02
      order by Reason;
quit ;

This code selects the one record from your “waterfall01” table and appends the one record that counts the number of records from your second criteria and creates a second water fall table.  You can now repeat this code for every criteria you apply.  The next set of code for the third criteria would be;

proc sql;
      create table Waterfall03 as
      select *
      from WaterFall02

      union

      select  count(*) as count
                  , '03 Customers from previous campaign' as Reason
      from Table03
      order by Reason;
quit ;

The only code I change in the third set is the highlighted text.  I created a third waterfall table from the two rows in the waterfall02 table and the one record I created from the table03 summary query.
 
Your new table should look like the following;
Count
Reason
50000
01 Starting number of customers
38000
02 Do Not Call customers
28000
03 Customers from previous campaign

Continue applying the code from waterfall03 every time you remove customers due to new criteria.  A fast way to apply this code is to create a macro abbreviation that quickly writes the required text with blanks for you to fill in.  Once you have your final table of customers you will have a Waterfall table that accompanies how many you lost at each criteria.
Some of you may have noticed one aspect of this code that I did not mention but is very important.  I prefixed each reason field with a two digit number that reflects the order the criteria was applied and I ordered the table by the Reason field in ascending order.  This is important so that the table reflects the order each criteria was applied.  A two digit field is important because the number of criteria may go beyond nine.  If you did not use a two digit prefix number and the volume of criteria goes beyond nine then your sorting will look like this.
1
10
11
12
2
3
4
5
6
7
8
9

It is important to view your waterfall table in the correct criteria order so that the volume of customers decrease and it makes sense to the audience.  The order of criteria is important because your criteria may not be mutually exclusive and if you apply the same criteria in different order you will get different results.
Once your final waterfall table is saved in a folder, I suggest you export it to excel and put in some calculations so that it looks like the first table I presented in this article.

In conclusion, create a waterfall table as you select your customers and present both to the marketing department.  The table will not answer all of their questions but it will answer the obvious ones and save you and them a lot of time in the future.

If you have any suggestions on how to make a better waterfall table I would love to hear it.  Please describe how you do it in the comments section.

Patrick