A few weeks back in the Chandoo.org Forum Melvin asked about Apportioning Sales based on Division and Status to the current sales by store.
Today we will examine how this works and how to develop a solution for the problem.
Apportion/ing
Apportion means to assign or distribute.
In a court the Judge may apportion blame for an accident eg: 50% to the driver, 30% to mechanical failure and 20% to the road conditions, The Judge is assigning or distributing the blame as he deams appropriate.
This is what Melvin wanted to do with his sales. He wanted the sales distributed according to Division and Status based on the current sale by store.
Lets start simple and look at how we can distribute sales on a simple model first.
Let say we have a Distributorship and we buy and sell oranges.
We buy oranges from a supplier and distribute them to 3 stores, Store A, Store B & Store C
We received 1,000 oranges and they were sold as follows
We can see that each store received differing percentages of the original supply:
50% = 500/1000
30% = 300/1000
etc
A week later the supplier give us another 200 oranges and we want to distribute them based on the previous sales
So the new batch of 200 oranges will be distributed according to these previous percentages
100 = 200 x 50%
60 = 200 x 30%
etc
That is as simple and as complicated as apportioning is.
Melvin’s Problem
When we look at Melvin’s problem he has a more complex set of data
You can follow along using a sample file: Download Sample File
We can see that Melvin has 14 stores located in 4 Divisions (N, S, W & C) and each can have a status of Open or Open1
But if we simplify this and look at one set of data we can devise a formula which will adjust to each set of data
Lets develop a formula for cell F11 which is dealing with Store 1 in the N Division and has a Status of Open
We see it has sales of 100 (Cell E11)
Total sales of Division N and status Open are 600 (100+100+100+150+150) highlighted below (Lower table)
Looking at the Upper Table we can see that we need to distribute 200 units based on the Division N and Status Open (Cell C4)
So we need to distribute 200 units across the 5 stores with Total sales of 600
We know that Store 1. had sales of 100 in cell E11
The Total Sales of Stores in Division N and Status Open can be obtained using a Sumifs function
=SUMIFS($E$11:$E$24, C11:$C$24, $C$11, $D$11:$D$24, D11)
=600
So the proportion of Store 1’s sales 100 to Total Sales ( Division N and Status Open ) 600 is 100/600 = 16.66%
This is calculated by
=E11/SUMIFS($E$11:$E$24, $C$11:$C$24, C11, $D$11:$D$24, D11)
=0.1667
=16.67%
Note: We leave the references to C11, D11 & E11 variable, so that when the formula is copied down it will refer to the next row
We can use an index/match formula to get the 200 based on the criteria from row 11
=INDEX($C$4:$D$7, MATCH(D11,$B$4:$B$7,0), MATCH(C11,$C$3:$D$3,0))
What this is doing is doing a 2D Lookup in the Range $C$4:$D$7
It is looking up the Division Row no. MATCH(D11,$B$4:$B$7,0)
and looking in the Status Column No. MATCH(C11,$C$3:$D$3,0)
Note: Once again we leave the references to C11 & D11 variable, so that when the formula is copied down it will refer to the next row
So the proportion of the 200 sales attributable to Store 1 is:
=Distribution Qty * Actual Sales / Total Sales
=INDEX($C$4:$D$7, MATCH(D11, $B$4:$B$7, 0), MATCH(C11, $C$3:$D$3, 0)) * E11 / SUMIFS($E$11:$E$24, $C$11:$C$24, C11, $D$11:$D$24, D11)
= 33.33
We can now copy this down to all the cells matching our criteria of Division N and Status Open
Notice that the total matches the total to be distributed 200 showing that the formula is working
Although we copied the formula down to the cells that had matching criteria each part of the formula was setup to work on the appropriate criteria for the store in the current row
If we now copy F11 down to the other stores you will see that in fact all the stores sales have been apportioned according to the correct criteria.
eg: If we look at Stores 7, 8 & 9 we can see that they are in the W Division and have a Status of Open1
The distributed Proportions are each 16.67, totaling 50, which matches the distribution in the Upper table.
You may also notice that Division C has not been accounted for.
I assume that Melvin has sent us a subset of the data and that is why it is missing.
Download
You can download a copy of the above file and follow along, Download Sample File.
A Challenge
Can you solve the problem another way ?
Post your solutions in the comments below.
Other Posts in this Series
The Formula Forensics Series contains a wealth of useful solutions and information specifically about how Normal Formula and specifically Array Formula work.
You can learn more about how to pull Excel Formulas apart in the following posts: http://chandoo.org/wp/formula-forensics-homepage/
If you have a formula and you want to understand how it works contact Hui and it may be featured in future posts.
























24 Responses
I’d suggest simply using the subtotal function and filtering the data using the Win/Loss column. You get the same results and the formula is more comprehensible.
@John
That is one option.
There are times however when you want to see the whole data table or a filtered subset and still want to produce summary reports against an unfiltered field.
Is there a particular reason why you are using a comma and the unary (–) operator for the second array in the SUMPRODUCT formula? It seems to work the same if you were to string the arrays together using the asterisk (*). The advantage is that SUMPRODUCT treats the entire string of arrays as a single array.
@Mathew
Your correct, There is no difference.
I thought it may have been easier to explain this method.
Is there a way to do this on a large set of data? As in ~100,000 rows? When I try I get an error because the formula becomes too long. It says the max length of a formula is 8,192 characters. Excel 2010.
How do I incorporate a specific text within a cell for the second array. For instance, – -(C7:C13=”Apple”)
when I chose a specific text the formula does not work.
@RB
I am not sure what is the issue as if I use the sample data in the post the following work fine
Count:
=SUMPRODUCT(SUBTOTAL(3,OFFSET(C7:C13,ROW(C7:C13)-MIN(ROW(C7:C13)),,1)), –(C7:C13=”L”))
Sum:
=SUMPRODUCT(SUBTOTAL(3,OFFSET(C7:C13,ROW(C7:C13)-MIN(ROW(C7:C13)),,1)),(C7:C13=”L”)*(D7:D13))
You may want to check that there are no leading or trailing spaces in your list of Apples
I should have given a better explanation. Heres my situation. I have a column with cells filled with names like Column 1, Column 2, Pier 1, Pier 2, etc. If the cell just contained Pier and searched for that it works. But because it has other characters in the cell its not recognizing the pier. So how can I extract specific characters of a string of text in this formula?
Hopefully this was a better explanation
Hello-
This formula works pretty well for me except that it slow down excel and prevents some of my macros from working. I was wondering if there was a way to program this in VBA so that excel isn’t always trying to recalculate it. I would like to use a push of a button to get it to run then paste in a cell.
Thanks!
I am trying to sum filtered data in a column, but would want to ignore the negative values in the column. How to go about doing this?
@Akshay
Why not just add a filter to that column to only show the values greater than zero?
The negative values are required for reporting purposes, but their effect on the total is distorting the required output. Please advise.
@Akshay
I’d suggest making a post in the Chandoo.org Forums
http://forum.chandoo.org/
Attach a sample file to simplify the task
I have this working for counting and summing, however, I have a list and for the second array, I need a criteria. That is, I’m looking for b13:b200=”01.??.??” or =left((a1,2) or something like that. These types of criteria matches do not appear to work as I get a blank as a result.
Thanks!
@Bob
As your formula b13:b200=”01.??.??” looks like you are trying to check the first day of the month of the range
What about trying Day(B13:B200)=1
Hai Experts,
i understood this formula well and working fine in MS Excel 2013
but when the same am trying to place in google Spreadsheet it shows error as
“SUMPRODUCT has mismatched range sizes. Expected row count: 1. column count: 1. Actual row count: 2014, column count: 1.” and as a result #VALUE! Appears in cell.
Can anyone please help me how would i get it done in Google Spread sheet
or is there any other formula as a substitute for this.
Thank you very much.
thanks for providing this.. but why does excel keeps on prompting Circular referencing in cell D3?
@Vivek
I don’t know
I just downloaded the file and it is working fine and not showing that error
Goto the Formulas, Calculation Options Tab and check that Calculation is set to Automatic
What version of Excel and Windows are you using ?
I know that this forum is for MS Excel, but I am trying to help someone who is working in Google Sheets. The below formula works in Excel but Google Sheets returns:
“SUMPRODUCT has mismatched range sizes. Expected row count: 1. column count: 1. Actual row count: 39000, column count: 1.” and as a result #VALUE! Appears in cell.
This is the same problem asked by Srichirin above. Does anyone know if there is a formula for Google Sheets that will replicate what MS Excel does?
=SUMPRODUCT(SUBTOTAL(3,OFFSET($C$6:$C$39500,ROW($C$6:$C$39500)-MIN(ROW($C$6:$C$39500)),,1)),- -($C$6:$C$39500=H1),($D$6:$D$39500))
Trying to find a SUMPRODUCT formula that counts the word Closed by date for the last 7 days in a filtered list.
=COUNTIF(M:M,”>”&TODAY()-7) works ok for unfiltered count Column M contains Closure dates (blank if open) and Column L is Status Open or Closed
@ Terry
Please ask the question at the Chandoo.org Forums
https://chandoo.org/forum/
Please attach a sample file to ensure a quicker more accurate answer
I used this formula and worked like a charm! But, now I’ve been requested to use it but adding not one but two criteria in the same formula. For instance the sum I was doing added negative and positive numbers. I’ve been asked to use the exact same formula but adding that only positive numbers were considered… any idea on how to do this?
How exactly do you do sum filtered cells when two criteria are need not just one?
Thank you so much brother literally I have been struggling since morning to get the sum of the filtered category, however, after reading your blog attentively i got my solution, so thanks a lot once again.