Prioritized Allocation

Occasional Contributor

Prioritized Allocation

Trying to do some allocation by priority. Example. I have Product as a Parent and Customer as its child. I have 100 units of product A and 3 customers. Customer1 has a demand of 50 and is first priority so he gets all 50 he needs, customer 2 has demand of 40 and is second priority. I have 50 units left after customer 1 so customer 2 gets his 40. Customer 3 needs 30 and is 3rd priority. I have 10 units left so customer 3 gets shorted 20 units.  The challenge is subtracting from the total 100 units as it does down through prioritized hierarchy list.

I have an idea of how to do this, but it's turning out to be less than scaleable... wondering if any of you have other ideas.

Occasional Contributor


Probably one of the quickest self-solved forum questions lol.  Just needed to type it out I guess.


With the help of @johndorma, I think we've solved this by calculating the % demand for each customer, then using RANKCUMULATE on that % to then calculate how much demand each customer is allocated.  RANKCUMULATE is limited to 10 million cells, but that should be fine for my model.


Re: Solved


You could also use the optimizer

The variables would be the quatity to assign to each customer (A, B and C)

You could assign to each customer a property wich is the priority: such as priority 1 will get the highest weight

so in this example, a will be assigned the weight of 3, B the weight of 2 and C the weight of 1

the objective function will then be maximize weight * Variable

The constraint is sum of variable <= to the available quatity (100 in this example). we could write A+B+C=100 but it is safer to write <= to avoid any errors

Variable <= Demand (in your example A<= 50,...)

I guess your solution works too, but this one alternative for the ones who are fond of the optimizer

Certified Master Anaplanner

Re: Prioritized Allocation

Hi Cam_Haines,


Please apply DISCO, and create a 'Customer Properties' module to capture the Parent of 'Customer'.


Please try the following.

Screen Shot 2019-03-13 at 4.21.26 PM.pngScreen Shot 2019-03-13 at 4.21.36 PM.pngScreen Shot 2019-03-13 at 4.21.44 PM.png