Tuesday, January 24, 2012

Quick and dirty "Portfolio Gantt" report

We all like Project Centre, with its lists of projects and useful fields, but sometimes you just want it to do a little more.  For example:
- what if you could display some key milestones on the gantt
- what if you could easily display colour-coded gantt bar by phases.

The second point above (or variant of)  has been requested so many times and as of yet I have not seen anyone deliver such a report or view, so I decided to give it a go.

Now, before we go ahead, the following is done with no coding and no complex Reporting Services reports.  I am sure (and have seen) some amazing report views in SRS similar to this requirement, but this is a Proof of Concept solution.  Go work out your own way :P

So, a Portfolio Report:

Ingredients:
- Excel
- SP2010 Farm with Excel Services configured
- an ODC
- Some formulas
- Some conditional formatting

Step 1:  Define
This PoC is done working on the following:
- There are 5 Phases for each project
- The Gantt should include coloured bars by each of the 6 phases for the project
- This should update automagically based on current planned dates
- The date periods should be weeks across the columns

Note:  In this scenario I haven't added any other Project Categories into the Table view, or report filters.  I may get onto this later when defining the ODC connection

Step 2:  mockup in excel
- Create a new file
- Create a table to include the following columns.  This will be the basis for the data connection data later:
  1. Project Name (COL B)
  2. Phase 1 Start (COL C)
  3. Phase 1 finish
  4. Phase 2 Start
  5. Phase 2 Finish
  6. ......
  7. Phase 6 Finish (COL N)

Now in adjoining colums to the above table, create the same number of columns (two for each phase), using data formatting of Number, and reference the first set of colums, so:
  1. IF([COL C] = "","",[COL C]
  2. IF([COL D] = "","",[COL D]
  3. etc
  4. IF([COL N] = "","",[COL N]
So now we have

Now we want to set up our timephased column headers.  Initially we will do this manually so:

- on your first available column, enter the date you wish to start from:
- then on the next column, same row, create a formula to add 7d to the previous date
- copy this formula field to the right as far as you wish the report to go.
- once done, create a formula in the cell row above the dates entered (ive done this in Row 2), and convert each date to a number field (as we did before)


Now then.  How do we colour scheme our table by phase?  we are going to write a nested IF Statement that compares the Date Value fields for each phase (created in the second image above) to the column date value created in the step previous to identify whether the formula will result in:
"1" = Phase 1
etc
"5" = Phase 5
or 
NO PHASE

Note: In this example, one phase can only happen in one week.

The formula:
=IF($P7=AB$2,1,IF($P7=AB$2,1,IF($R7=AB$2,2,IF($R7=AB$2,2,IF($T7=AB$2,3,IF($T7=AB$2,3,IF($V7=AB$2,4,IF($V7=AB$2,4,IF($X7=AB$2,5,IF($X7=AB$2,5,IF($Z7=AB$2,6,IF($Z7=AB$2,6))))))))))))))))))

where:  
$P7 = Project Phase 1 Start
$Q7 = Project Phase 1 End
etc
$AA7 = Phase 6 End
and
AB$2 = the timephased period in column AB2 (the first date period)

Now copy this formula down the column to the bottom of the table, and across to the end of the timephased period defined 


Now we will do the conditional formatting on the timephased periods:

Now once this report is published to a SP2010 report library it looks like this:


Next Steps:

- Add a Current Date marker
- Make this a live report by connecting the Excel file to a SP2010 Data Connection and Project Server 2010 Reporting Database
- Improve on formatting