The Earned Value Management Macros |
data softin; input Project $10. Activity $11. Description $22. Duration Succesr1 $9. Succesr2 $9.; datalines; SWPROJ Software project . DEBUG RECODE Recoding 5 DOCEDREV QATEST DOC DOCEDREV Doc. Edit and Revise 10 PROD DOC PRELDOC Prel. Documentation 15 DOCEDREV QATEST MISC MEETMKT Meet Marketing 0 RECODE MISC PROD Production 1 SWPROJ DEBUG Debug & Code Fixes . SWPROJ DOC Doc. Subproject . SWPROJ MISC Miscellaneous . SWPROJ TEST Test Subproject . TEST QATEST QA Test Approve 10 PROD TEST TESTING Initial Testing 20 RECODE ;
The project network diagram showing the precedence relationships can be generated with the following code, using the NETDRAW procedure (see SAS/OR User's Guide: Project Management, Chapter 5, for additional information). The resulting diagram is shown in Figure 9.7. (Note that the first DATA step removes the root task to simplify the diagram.)
data softabridged; set softin; if activity ne 'SWPROJ' and project ne 'SWPROJ' then output; run; proc netdraw data=softabridged out=ndout graphics; actnet/act=activity font=swiss id=(description) nodefid nolabel succ=(succesr1 succesr2) lwidth=2 coutline=black ctext=black carcs=black cnodefill=ltgray zone=project zonespace htext=3 pcompress centerid; run;
Figure 9.7: Project Network Diagram Using PROC NETDRAW
The project hierarchy, or Work Breakdown Structure (WBS), can be visualized with the following code. The graphical output is shown in Figure 9.8. The details for the use of the %EVG_WBS_CHART macro are given in the section "Syntax".
%evg_wbs_chart( structure=softin, activity=activity, project=project );
Figure 9.8: Work Breakdown Structure Using %EVG_WBS_CHART
The CPM procedure can be used as follows to generate a schedule based on the precedence and hierarchical constraints (see SAS/OR User's Guide: Project Management, Chapter 2, for more details).
proc cpm data=softin out=software interval=day date='01mar04'd; id description; project project / addwbs; activity activity; duration duration; successor succesr1 succesr2; run;
The resulting schedule data set is manipulated to produce a data set containing the early and late schedules, shown in Figure 9.9. The WBS_CODE variable gives the project hierarchy. The E_START and E_FINISH variables represent the early schedule, and the L_START and L_FINISH variables give the late schedule.
proc sort data=software; by wbs_code; run; proc print data=software; title 'Planned Schedule'; var activity wbs_code e_start e_finish l_start l_finish; run;
|
A Gantt chart of this schedule can be produced with the GANTT procedure using the following code. (See SAS/OR User's Guide: Project Management, Chapter 4, for more details.)
title f=swiss h=4pct 'Project Master Schedule'; title2 f=swiss h=3pct; proc gantt data=software; chart / mininterval=week pcompress top cframe=ltgray font=swiss height=1 skip=2 activity=activity nojobnum successor=(succesr1 succesr2) scale=10 duration=duration; id description wbs_code; run;
Figure 9.10 shows the output from this call to PROC GANTT.
Figure 9.10: Initial Schedule Using PROC GANTT
Now suppose the early schedule is designated as the baseline. For the sake of clarity, the E_START and E_FINISH variables have been renamed to START and FINISH, respectively. Also, the variables required for performing the earned value analysis are retained. The modified data set is shown in Figure 9.11.
data software; set software; keep project activity duration description e_start e_finish wbs_code succesr1 succesr2; rename e_start = Start e_finish = Finish; label wbs_code = 'WBS Code' e_start = 'Start' e_finish = 'Finish'; if duration eq . then duration = proj_dur; run;
|
Assume also that each of the activities is budgeted to incur costs continuously at the rates shown in the RATES data set in Figure 9.12.
data rates; format Activity $11. Rate 8.; Activity='SWPROJ ';Rate=5 ;output; Activity='RECODE ';Rate=6 ;output; Activity='PRELDOC ';Rate=4 ;output; Activity='DOCEDREV ';Rate=4 ;output; Activity='MEETMKT ';Rate=. ;output; Activity='PROD ';Rate=2 ;output; Activity='TEST ';Rate=1 ;output; Activity='DOC ';Rate=1 ;output; Activity='MISC ';Rate=1 ;output; Activity='DEBUG ';Rate=1 ;output; Activity='TESTING ';Rate=3 ;output; Activity='QATEST ';Rate=4 ;output; run;
To determine the periodic budgeted costs, invoke the %EVA_PLANNED_VALUE macro as follows:
%eva_planned_value( plansched=software, /* schedule data */ activity=activity, start=start, finish=finish, duration=duration, budgetcost=rates, /* cost data */ rate=rate );
The parameters used in this call to %EVA_PLANNED_VALUE are described in the following list. More details are given in the section "Syntax".
|
Note that the "PV Rate" column shows the daily Planned Value (or Budgeted Cost of Work Scheduled). This is the cost incurred each day according to the plan or budget.
In general, once a project is in progress it is subject to uncertainties, the impact of which can often only be approximated in the original plan. Such uncertainties can affect the project schedule, project cost, or both. From a schedule standpoint an activity may be delayed due to a multitude of factors---a required resource being unavailable, a worker becoming sick, a machine breaking down, adverse weather conditions, etc. From a cost standpoint a contractor may revise his/her original estimate, the cost of raw materials may increase due to external factors, a sick or disabled worker might necessitate the use of a more costly contractor to minimize schedule slippage, etc.
Figure 9.14 lists the status of completed activities, and those in progress, as of March 25, 2004.
data softact; format Activity $11. Percent 8.; format Start Finish date7.; Activity='MEETMKT';Start='01MAR04'd;Finish='01MAR04'd;Percent=100;output; Activity='PRELDOC';Start='01MAR04'd;Finish='14MAR04'd;Percent=100;output; Activity='TESTING';Start='01MAR04'd;Finish=.;Percent=80;output; run;
Integrating this new information with the original schedule input data set gives the updated data set shown in Figure 9.15.
proc sql; create table softupd as select project, softin.activity, duration, start, finish, percent, succesr1, succesr2, description from softin left join softact on softin.activity = softact.activity order by 1, 2 ; quit;
|
Using this updated data set, PROC CPM is then invoked to create a new schedule.
proc cpm data=softupd out=software25 interval=day date='01mar04'd; id description percent; project project / addwbs; activity activity; duration duration; actual / as=start af=finish pctcomp=percent timenow='25MAR04'd; successor succesr1 succesr2; run;
data software25; set software25; keep project activity e_start e_finish percent wbs_code duration; rename e_start = Start e_finish = Finish; label wbs_code = 'WBS Code' e_start = 'Start' e_finish = 'Finish'; run;
The resulting schedule is shown alongside the planned schedule in Figure 9.16.
|
Notice that the activity PRELDOC has completed one day ahead of schedule. Despite this encouraging bit of news, the project is showing signs of slipping. Only one other activity has completed as of the status date. The original plan called for three activities to have completed, with two additional activities completing at the end of the day. Instead, five activities are in progress. The finish date for the root parent activity, SWPROJ, shows the magnitude of the project slippage so far.
The updated cost rate information is given in Figure 9.17. Compared to the numbers listed in Figure 9.12 the rates for the PRELDOC and TESTING activities have increased, while the rate for the RECODE activity has decreased. Note that the original rates still apply for the activities that are not listed here.
data rates25; format Activity $12. Rate 8.; Activity='PRELDOC ';Rate=5 ;output; Activity='RECODE ';Rate=5 ;output; Activity='TESTING ';Rate=4 ;output; run;
To compute the impact of schedule slippage and cost overruns, data sets SOFTWARE25 and RATES25 can be specified for the %EVA_EARNED_VALUE macro as shown in the following SAS code. It is assumed that the %EVA_PLANNED_VALUE macro has been run, in which case the planned duration and costs are implicitly carried over to the %EVA_EARNED_VALUE macro as shown in Figure 9.1. Also, as before, the E_START and E_FINISH variables have been renamed to START and FINISH, respectively.
%eva_earned_value( revisesched=software25, /* revised schedule */ activity=activity, start=start, finish=finish, actualcost=rates25, /* actual costs */ rate=rate );
The parameters used in this call to %EVA_EARNED_VALUE are described briefly in the following list. More details are given in the section "Syntax".
The variable names specified for the ACTIVITY=, START=, FINISH=, and RATE= parameters must be the same, respectively, as those previously specified for the %EVA_PLANNED_VALUE macro. This is to enable the later use of the %EVA_TASK_METRICS and %EVG_GANTT_CHART macros. The output generated by this call to %EVA_EARNED_VALUE is shown in Figure 9.18.
|
The "EV Rate" column shows the daily Earned Value (or Budgeted Cost
of Work Performed). This is the budgeted cost for the work that was actually
accomplished each day. Up to the status date (TIMENOW) of March 25, 2004,
the "AC Rate" column
depicts the daily Actual Cost (or Actual Cost of Work Performed).
After this date, this column represents estimated costs. For this estimate,
it is assumed that activities that are in progress at the status date continue
at the same cost rate, rather than reverting to the budgeted cost rate. This
assumption ultimately yields the revised Estimate At Completion (EAC).
Figure 9.19 shows the daily Planned Value, Earned Value, and
Actual Cost together. The disparity in the number of observations
(47 here versus the former 37 for the %EVA_PLANNED_VALUE macro) reflects a schedule
slippage of 10 days.
|
%eva_metrics(timenow='25MAR04'd);
It is assumed that the %EVA_PLANNED_VALUE and %EVA_EARNED_VALUE macros have been run and that the default output data sets, PV and EV, were used. This enables the %EVA_METRICS macro to implicitly use those data sets as input (see Figure 9.1). If the default data set names were not used, you must specify the correct names using the PV= and EV= options.
The TIMENOW= parameter specifies the date or datetime to which the updated schedule and rates apply.
Figure 9.20 shows the output from the %EVA_METRICS macro.
|
The metrics in Figure 9.20 reflect the condition of the project at the status date (TIMENOW). "Percent Complete" is the percentage of the planned work that has been accomplished. Values for this entry range from 0 to 100. PV is the Planned Value, or Budgeted Cost of Work Scheduled (BCWS). This is the work that was projected to have been completed. EV is the Earned Value, or Budgeted Cost of Work Performed (BCWP). This measure represents the value of work completed so far, in terms of budgeted cost. AC is the Actual Cost of Work Performed (ACWP), and represents the actual cost of the work so far.
At first glance, one might compare the Planned Value of $355 to the Actual Cost of $370, and conclude that costs are nearly on track. However, the Earned Value figure of $266.28 puts these numbers in the proper perspective. This project is careening out of control with respect to schedule and costs.
CV and SV are the Cost and Schedule Variance, respectively. CV is the earned value less the amount spent. SV is the earned value less the planned value. CPI and SPI are the Cost and Schedule Performance indices, respectively, and are analogous to the CV and SV. The CPI and SPI are expressed as ratios, rather than differences. The value of 0.72 for CPI indicates a cost overrun situation in which the project has earned 72 cents for every dollar spent. The value of 0.75 for SPI foretells a late project, as only 75% of the planned work has been accomplished on the status date. BAC is the Budget at Completion and is the total budgeted cost of the project. EAC is the Estimate at Completion, and represents the projected total cost, given the current state of the project. For the first of the EAC metrics, EAC, it is assumed that future work is performed at the revised rates. EAC is computed by accumulating the "AC Rate" data found in the output data set from the %EVA_EARNED_VALUE macro. For EAC, the overrun to date estimate, it is assumed that future work will be done at the budgeted rate, which is typically not very realistic. The next two estimates take into account the performance of the project so far. EAC, or the cumulative CPI EAC, is widely regarded as one of the more accurate and reliable estimates, and is frequently used to provide a quick forecast of the project costs. By default, the EAC is used to compute the Variance at Completion (VAC) and one of the To-Complete Performance Index (TCPI) formulations, to follow. The cumulative CPI-times-SPI EAC, denoted EAC, is often used to provide a high-end estimate of the project costs. ETC is the Estimate to Complete, or a projection of remaining costs. The VAC represents the financial impact of the expenditures to date on the original budget.
The TCPI is the cost performance factor that must be achieved in order to complete the remaining work using the available funds. The available funds can be defined to be either the remaining budget () or remaining costs (). For example, the TCPI of 1.68 indicates that the project needs to earn 1.68 dollars for each dollar spent to stay within the budget. The TCPI is a far lower value (0.72) because the revised costs are much larger than the budgeted costs for the remaining work. See Table 9.11, Table 9.12, and Table 9.13 for formula expressions of the preceding metrics.
Figure 9.21 gives a listing of the earned value summary statistics data set produced by the %EVA_METRICS macro. This data set is used to generate the %EVA_METRICS report as well as some of the charts to be described in later sections.
|
The %EVA_METRICS macro also produces the cumulative periodic earned value data set shown in Figure 9.22. This data set contains the cumulative planned value, earned value, and actual and revised costs, together with the associated variances and performance indices.
|
The cost and schedule variance by activity can now be produced using the following call to %EVA_TASK_METRICS.
%eva_task_metrics( plansched=software, revisesched=software25, activity=activity, start=start, finish=finish, budgetcost=rates, actualcost=rates25, rate=rate, aggregate=Y, timenow='25MAR04'd );
The parameters used in this call to %EVA_TASK_METRICS are described briefly in the following list. More details are given in the section "Syntax".
Note that the variable names specified for the ACTIVITY=, START=, FINISH=, and RATE= parameters must be the same, respectively, as those previously specified for the %EVA_PLANNED_VALUE and %EVA_EARNED_VALUE macros.
The output produced by this invocation of the %EVA_TASK_METRICS macro is shown in Figure 9.23.
|
Note that by specifying Y for the AGGREGATE= parameter, the values have been rolled up along the project hierarchy; otherwise, the values would represent the corresponding activity only.
Copyright © 2008 by SAS Institute Inc., Cary, NC, USA. All rights reserved.