Well, it’s been a while since I fired up my virtual image and played around in the Portfolio Analysis module – specifically since March or so when I released that white paper on the topic. Last week, one of my colleagues was asking me about the mechanics of generic resources within Portfolio Analysis – which reminded me of this post which I’d half written but never gotten around to finishing.
In this post, I’ll talk about how projects may be manually prioritized within the context of the Portfolio Analysis module. This would allow organizations with their own prioritization mechanisms to bypass the entire strategic driver definition process that is in Project Server 2010 and proceed directly to the constraint optimization functionality.
What’s potentially confusing is that the manual prioritization mechanism allows for the use of multiple fields in prioritizing the projects – and it’s somewhat unclear how it all works under the hood…..hence, this post.
Thanks to fellow UMTer Catalin Olteanu for explaining the topic to me and providing the calculations.
To test out the calculations, I have created three projects. I have then created three custom number fields (Prioritization1 through Prioritization3), and more or less randomly assigned values to each project. In theory, if you have an external system providing these numbers, you could use custom code against the PSI or even the Bulk Import solution starter to import these values against existing projects.
I then go create a new portfolio in Portfolio Analysis with these three projects. When creating the portfolio, I select the option to prioritize projects using custom fields.
In the next screen, I select the Modify button from the ribbon and add my three fields.
The Basic Calculations
So, off the bat, we see three parameters for each of the custom fields. (You will note that each of these parameters is editable.)
- Weight – the relative weight of one field against the other fields. This starts out at 100%, but will be recalculated to 33.33% in the above example when I click the option to Normalize Weights. With three custom fields, essentially, I total the weight column to 300%, then divide the value for each field by the total. In the scenario above, that yields a calculation of 100/(100 + 100 + 100).
- Minimum Value – the minimum value allowed for the specific field.
- Maximum Value – the maximum value allowed for the specific field.
Here’s what the scenario looks like after I normalize weights.
Single Value Calculation
Under the hood, here’s what happens….for each field.
Values are adjusted to the minimum and/or maximum values. That means if you set a minimum for a specific field of “2”, and someone has entered a “1”, then the project value will automatically be converted to a “2” for that specific field. Similarly, the same calculation is performed on the maximum column. This yields what I call the adjusted minimum and maximum values.
The adjusted minimum and maximum values are then measured against the interval for each field. For example, if a project is set to “5” on an interval stretching from a minimum of “2” and a maximum of “10”, the value for the field will be (5-2)/(10-2). The formula is (Adjusted Value – Minimum)/(Maximum – Minimum).
Why subtract the minimum value from the adjusted value? If the minimum value is set to “2” and the adjusted value is set to “3”, then we want to adjust the value to account for the fact that the value entered is only one above the minimum, in effect a “1” and not a “3.” This yields our absolute priority.
The value is then normalized to yield the normalized priority for each field. In the example above we do that by calculating .375 / (0 + .375 + 1) to yield 27.27.
Multiple Value Calculation
So if you have a single custom field, that’s pretty much it. If you have multiple custom fields, then you need to combine the scores for each project for each field – which is pretty simple once you identify the order in which the calculations are performed.
First off….take the absolute priority (not the normalized priority) for each of the fields for each of the projects.
Multiply the absolute priority times the weighting for each field. In this case, I am multiplying the values by 33.33, 33.33, and 33.34 respectively.
Sum the results of the weighted prioritization calculation. I sum them into the Weighted Sum column.
Normalize the results to generate the project priority. For example, in Test Project 2, I calculate 43.19 / (47.48 + 43.19 + 92.67) to generate a normalized score of 23.56%.
And that’s pretty much it. Pretty simple actually.