Redistribute remaining bonus after a reaching a cap

Mtnfan

New Member
Joined
Oct 29, 2021
Messages
6
Office Version
  1. 365
Platform
  1. Windows
  2. Web
I need to distribute a quarterly bonus based on production.
A bonus pool is created by adding a certain dollar amount for every hour worked. In the case of this example, $12 is added to the pool for every hour worked.
The bonus pool is then distributed based on each worker's relative production in a given quarter.
  1. We first calculate each worker's total widgets produced by multiplying widgets/hour x hours worked in a given quarter. For the bonus calculation, only widgets/hour over a certain threshold are counted. In this example, the threshold is 2 widgets/hour.
  2. Each worker then receives a bonus proportional to the number of "bonus" widgets they produced. For example, if Bob produced 2 widgets beyond the threshold and the total pool of "bonus" widgets is 10, Bob receives 20% of the bonus pool.
  3. The complicating step is there is a cap on the bonus rate. In this case the cap is $15/hour. The primary goal of the cap is to avoid an excessive focus on production and to keep the bonus distribution reasonable between workers. However, applying the cap creates a pool of undistributed bonus dollars remaining. I want to distribute all the dollars in the bonus pool by redistributing the remaining bonus to the uncapped workers. This may take more than one iteration.
I could manually recalculate the distribution for as many iterations as needed until the bonus pool is completely distributed. However, what I would like to do is to automatically redistribute the remaining bonus pool to the uncapped workers. Ideally, the formula would consider the relative contributions of each remaining worker (since each worker's relative contribution changes once a "capped" worker is removed from the pool).

Book3
ABCDEFGH
1Q4 bonus distribution
2Bonus pool$ 27,300.00Widgets/Hour Threshold
32
4NameProduction (widgets/hour)Hours workedTotal Widgets ProducedAdjusted Widgets Produced for bonusBonusBonus per hour$15 Capped Bonus per hour
5Bob550025001500$ 4,636.94$ 9.27$ 9.27
6Mary4.754752256.251306.25$ 4,038.00$ 8.50$ 8.50
7Sally6.545029252025$ 6,259.87$ 13.91$ 13.91
8John5.2540021001300$ 4,018.68$ 10.05$ 10.05
9Linda845036002700$ 8,346.50$ 18.55$ 15.00
10
11Undistributed bonus$ 1,596.50
Sheet1
Cell Formulas
RangeFormula
B2B2=SUM(C5:C9)*12
D5:D9D5=B5*C5
E5:E9E5=(B5-$E$3)*C5
F5:F9F5=(E5/SUM($E$5:$E$9))*$B$2
G5:G9G5=F5/C5
H5:H9H5=IF((((E5/SUM($E$5:$E$9))*$B$2)/C5)>15,15,(((E5/SUM($E$5:$E$9))*$B$2)/C5))
H11H11=B2-SUMPRODUCT(H5:H9,C5:C9)
 

Excel Facts

Copy a format multiple times
Select a formatted range. Double-click the Format Painter (left side of Home tab). You can paste formatting multiple times. Esc to stop
T202110b.xlsm
ABCDEFGHI
1Q4 bonus distribution
2Bonus pool27300Widgets/Hour Threshold
32
4NameProduction (widgets/hour)Hours workedTotal Widgets ProducedAdjusted Widgets Produced for bonusBonusBonus per hour$15 Capped Bonus per hourIncrease
5Bob55002,500.001,500.004,636.949.279.27390.58
6Mary4.754752,256.251,306.254,038.008.508.50340.13
7Sally6.54502,925.002,025.006,259.8713.9113.91527.28
8John5.254002,100.001,300.004,018.6810.0510.05338.50
9Linda84503,600.002,700.008,346.5018.5515.00
10
11Undistributed bonus1596.501,596.50
12Uncapped18,953.50
3a
Cell Formulas
RangeFormula
B2B2=SUM(C5:C9)*12
D5:D9D5=B5*C5
E5:E9E5=(B5-$E$3)*C5
F5:F9F5=E5/SUM($E$5:$E$9)*$B$2
G5:G9G5=F5/C5
H5:H9H5=IF((((E5/SUM($E$5:$E$9))*$B$2)/C5)>15,15,(((E5/SUM($E$5:$E$9))*$B$2)/C5))
I5:I8I5=(C5*G5)/$H$12*$H$11
I11I11=SUM(I5:I9)
H11H11=B2-SUMPRODUCT(H5:H9,C5:C9)
H12H12=SUMPRODUCT(H5:H8,C5:C8)
 
Upvote 0
T202110b.xlsm
ABCDEFGHI
1Q4 bonus distribution
2Bonus pool27300Widgets/Hour Threshold
32
4NameProduction (widgets/hour)Hours workedTotal Widgets ProducedAdjusted Widgets Produced for bonusBonusBonus per hour$15 Capped Bonus per hourIncrease
5Bob55002,500.001,500.004,636.949.279.27390.58
6Mary4.754752,256.251,306.254,038.008.508.50340.13
7Sally6.54502,925.002,025.006,259.8713.9113.91527.28
8John5.254002,100.001,300.004,018.6810.0510.05338.50
9Linda84503,600.002,700.008,346.5018.5515.00
10
11Undistributed bonus1596.501,596.50
12Uncapped18,953.50
3a
Cell Formulas
RangeFormula
B2B2=SUM(C5:C9)*12
D5:D9D5=B5*C5
E5:E9E5=(B5-$E$3)*C5
F5:F9F5=E5/SUM($E$5:$E$9)*$B$2
G5:G9G5=F5/C5
H5:H9H5=IF((((E5/SUM($E$5:$E$9))*$B$2)/C5)>15,15,(((E5/SUM($E$5:$E$9))*$B$2)/C5))
I5:I8I5=(C5*G5)/$H$12*$H$11
I11I11=SUM(I5:I9)
H11H11=B2-SUMPRODUCT(H5:H9,C5:C9)
H12H12=SUMPRODUCT(H5:H8,C5:C8)

Thank you for your thoughtful reply! I may not be understanding your solution but here are two thoughts:

1. The cap still applies when you incorporate the increase, so even after your iteration there is still a small pool of undistributed dollars.
2. Is there a way to automate all subsequent iterations in a single formula? So for example, I would have a single "capped bonus" pool column.


Book1
ABCDEFGHIJ
1Q4 bonus distribution
2Bonus pool27300Widgets/Hour Threshold
32
4NameProduction (widgets/hour)Hours workedTotal Widgets ProducedAdjusted Widgets Produced for bonusBonusBonus per hour$15 Capped Bonus per hourIncrease$15 Capped Bonus per hour v2
5Bob5500250015004636.9439.2738859.273885390.58026$ 10.06
6Mary4.754752256.251306.254038.0048.5010628.501062340.13031$ 9.22
7Sally6.5450292520256259.87313.9108313.91083527.28335$ 15.00
8John5.25400210013004018.68410.0467110.04671338.50289$ 10.89
9Linda8450360027008346.49718.5477715$ 15.00
10
11Undistributed bonus1596.4971596.4968$ 37.16
12Uncapped18953.503
Sheet1
Cell Formulas
RangeFormula
B2B2=SUM(C5:C9)*12
D5:D9D5=B5*C5
E5:E9E5=(B5-$E$3)*C5
F5:F9F5=E5/SUM($E$5:$E$9)*$B$2
G5:G9G5=F5/C5
H5:H9H5=IF((((E5/SUM($E$5:$E$9))*$B$2)/C5)>15,15,(((E5/SUM($E$5:$E$9))*$B$2)/C5))
I5:I8I5=(C5*G5)/$H$12*$H$11
J5:J9J5=IF(H5=15,15,IF((SUM(F5,I5)/C5)>15,15,SUM(F5,I5)/C5))
I11I11=SUM(I5:I9)
J11J11=B2-SUMPRODUCT(J5:J9,C5:C9)
H11H11=B2-SUMPRODUCT(H5:H9,C5:C9)
H12H12=SUMPRODUCT(H5:H8,C5:C8)
 
Upvote 0
H12 can be =SUMPRODUCT(H5:H9,C5:C9,--(H5:H9<15))

You can apply the same logic again.

You could also review Goal Seek, Solver or advanced Add-ins.
 
Upvote 0
Thanks again for your thoughtful solution!

I will look into those add-ins. I remember feeling somewhat flummoxed when I first looked at them some time ago but it's always worth trying again!
 
Upvote 0
I used Goal Seek.

I put a guess rate in H4 0.05

Select H10
Goal Seek
to Value 0
By changing H4

T202110b.xlsm
ABCDEFGHI
1Q4 bonus distribution
2Bonus pool$27,300.00Widgets/Hr Threshold
32
4NameProduction (widgets/hour)Hours workedTotal Widgets ProducedAdjusted Widgets Produced for bonusBonus$15 Capped Bonus per hour0.087159
5Bob55002,500.001,500.004,636.949.2710.082195,041.10
6Mary4.754752,256.251,306.254,038.008.509.2420094,389.95
7Sally6.54502,925.002,025.006,259.8713.91156,750.00
8John5.254002,100.001,300.004,018.6810.0510.922374,368.95
9Linda84503,600.002,700.006,750.0015.00156,750.00
108,831.2525,703.50$0.00
1127,300.0027,300.00
12
3a
Cell Formulas
RangeFormula
B2B2=SUM(C5:C9)*12
D5:D9D5=B5*C5
E5:E9E5=(B5-$E$3)*C5
F5:F9F5=MIN(E5/$E$10*$B$2,C5*15)
G5:G9G5=MIN(F5/C5,15)
I5:I9I5=C5*H5
E10:F10E10=SUM(E5:E9)
H5:H9H5=MIN(G5*(1+$H$4),15)
H10H10=B2-SUMPRODUCT(C5:C9,H5:H9)
H11H11=SUMPRODUCT(C5:C9,H5:H9)
I11I11=SUM(I5:I9)
 
Upvote 0
Put a value in D3 say 0.8
Goal Seek
Select D10
Change value to 27300
By Changing D3

T202110b.xlsm
ABCDE
1Q4 bonus distribution
2Bonus pool$27,300.00Widgets/Hr Threshold
322.36073059
4NameProduction (widgets/hour)Hours workedBonus$15 Capped Bonus per hour
5Bob55005,041.1010.08
6Mary4.754754,389.959.24
7Sally6.54506,750.0015.00
8John5.254004,368.9510.92
9Linda84506,750.0015.00
1027,300.00
11
3aa
Cell Formulas
RangeFormula
E5:E9E5=D5/C5
D5:D9D5=MIN((B5-$C$3)*C5*(1+$D$3),C5*15)
D10D10=SUM(D5:D9)
 
Upvote 0
Interesting.

I understand that the MIN function returns the lowest value of the series and you included a bonus of $15/hour (hours x 15) in the series so it would return no more than that number.

In your example, is D3 is the number that Goal Seek finds to determine an even distribution among the remainder? Does that hold up over multiple iterations? Suppose the group of workers was five times as large and 5 people capped out on the first iteration, and 3 people capped out on the second. I'm imagining I'll need three or four iterations most quarters.
 
Upvote 0
Did you try post #7?
N.B. Copy the post to a clean sheet. Click on the icon below the f(x) in the heading and paste the data into your spreadsheet.
Put a value say say 0 or .001 in D3 sand then try the Goal Seek.


The Goal Seek should yield the results per your specifications.

"Does that hold up over multiple iterations? Suppose the group of workers was five times as large and 5 people capped out on the first iteration, and 3 people capped out on the second. "
Why is there a second iteration?

Goal Seek should work with larger data.

"I'm imagining I'll need three or four iterations most quarters."

I do not know why you would imagine that. Goal Seek iterates to determine the solution.
What do you mean by multiple iterations. Does post #7 not answer your question?
 
Last edited:
Upvote 0
Dave --

Thanks for your input. I finally worked this out. I don't know why I found it confusing. Goal Seek is actually very easy to use and worked well using your examples. Thank you!
 
Upvote 0

Forum statistics

Threads
1,223,909
Messages
6,175,312
Members
452,634
Latest member
cpostell

We've detected that you are using an adblocker.

We have a great community of people providing Excel help here, but the hosting costs are enormous. You can help keep this site running by allowing ads on MrExcel.com.
Allow Ads at MrExcel

Which adblocker are you using?

Disable AdBlock

Follow these easy steps to disable AdBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the icon in the browser’s toolbar.
2)Click on the "Pause on this site" option.
Go back

Disable AdBlock Plus

Follow these easy steps to disable AdBlock Plus

1)Click on the icon in the browser’s toolbar.
2)Click on the toggle to disable it for "mrexcel.com".
Go back

Disable uBlock Origin

Follow these easy steps to disable uBlock Origin

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back

Disable uBlock

Follow these easy steps to disable uBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back
Back
Top