CPM程序

示例4.10多个日历

此示例演示了在项目中使用多个日历。提供了不同的场景来显示使用以及项目进度如何受到影响。输出4.10.1显示了数据集工作数据,它定义了几种换档模式。这些轮班模式与数据集加利福尼亚州,也显示在同一输出中。这三个日历的定义如下:

  • 默认日历有五个八小时工作日(周一至周五),周六和周日为节假日。

  • 日历OVT_CAL指定加班日历,周一至周五每天工作10小时周六和周日放假。

  • 日历PROD_CAL遵循更复杂的工作模式:星期日是假日;星期一上午8点到午夜,下午6点至8点休息两小时。;从星期二到星期五,24小时工作上午6点至8点和下午6点至晚上8点休息。;星期六的工作班次是从午夜到早上6点,再从上午8点至下午6点。换句话说,工作从星期一上午8点持续到星期六下午6点,持续两个小时每天早上6点和下午6点休息。

输出4.10.1:工作日和日历数据集

多个日历
工作日数据集

Obs公司 全天 半天 星期五 第1页 s2秒 第3节
1 8:00 8:00 8:00 . 8:00 .
2 16:00 12:00 18:00 6:00 18:00 6:00
. . . 8:00 20:00 8:00
4 . . . 18:00 . 18:00
5 . . . 20:00 . .
6 . . . . . .



多个日历
日历数据集

Obs公司 卡尔 _太阳_ _月_ _周二_ _结婚_ _砰_ _星期五_ _座椅_
1 违约 假日 全天 全天 全天 全天 全天 假日
2 OVT_校准 假日 星期五 星期五 星期五 星期五 星期五 半天
PROD_CAL(过程_校准) 假日 s2秒 第1页 第1页 第1页 第1页 第3节


使用与中相同的假日集示例4.9,但在这种情况下,新年假期是通过指定假期的开始和结束时间来定义的而不是默认一天的假期。当涉及到多个日历时,定义它通常不那么令人困惑假日,指定假日的开始和结束时间,而不是开始时间和持续时间。输出4.10.2显示假日数据集。

输出4.10.2:假日数据集

多个日历
假日数据集

Obs公司 假日 霍利芬 霍利杜
1 2003年12月24日 2003年12月26日 4
2 2004年1月1日 2004年1月1日 .


数据集假期不包括标识与假日关联的日历的任何变量。默认情况下,该过程关联带有所有日历的两个假期。

可视化每个日历的所有休息和假日的简单方法是使用甘特图,为每个日历绘制一个条形图从项目开始到2004年1月4日,所有假期和工作班次都有规定。以下程序生产输出4.10.3假日和休息时间用实心填充图案标记。

goptions hpos=160 vpos=25;title h=2'多日历';title2 h=1.4“不同日历的休息和假期”;proc-gantt数据=cals图形calendar=日历holidata=假日workday=工作数据;图表/间隔=dtday mininterval=dthour skip=2假日=(假日)holifin=(holifin)markbreak daylength='08:00't calid=calref='1dec03:00:00't至'4jan04:08:00't,截止日期nolegend nojobnum增量=16hpages=6;id校准;运行;

产出4.10.3:显示多个日历的休息和假日的甘特图

显示多个日历的休息和假日的甘特图
外部文件:images/cpm10o31_1.png
外部文件:images/cpm10o31_2.png
外部文件:images/cpm10o31_3.png
外部文件:images/cpm10o31_4.png
外部文件:images/cpm10o31_5.png


中使用的活动数据集示例4.9通过添加名为卡尔,它将活动“Production”的日历设置为“PROD_CAL”,将活动“Prototype”的日历设为“OVT_CAL”,以及其他活动的默认日历。因此,在“活动”数据集和“日历”数据集中,日历信息通过CALID变量传递,卡尔.

首先调用PROC CPM,而不引用CALID变量。因此,该程序只识别第一个观察结果在日历数据集中(为此向日志打印警告),并且只有默认日历用于所有活动在项目中。daylength参数被解释为标准工作日的长度;假设所有持续时间以该标准工作日为单位。输出4.10.4显示获得的时间表。该项目计划于2004年3月12日中午12点完成。

数据宽度;设置小部件9;如果任务=“生产”,则cal=“PROD_cal”;否则,如果task=“Prototype”,则cal=“OVT_cal”;else cal=“默认”;运行;proc cpm date='01dec03'd data=widgcal out=scheddefholidata=假日天数='08:00’tworkday=工作数据calendar=日历;假日/holfin=holfin;活动任务;持续天数;继承人suc1 suc2 suc3;运行;title2“项目进度:默认日历”;proc打印标题=h;var任务天数e_starte_finish l_start l_finisht浮点f浮点;运行;

输出4.10.4:使用默认日历进行日程安排

多个日历
项目时间表:默认日历

Obs公司 任务 E_START(启动) E_完成 L_启动 L_完成 T_浮动 F_FLOAT(浮动)
1 批准计划 5.5 2003年12月1日8:00:00 2003年12月8日:11:59:59 2003年12月1日8:00:00 2003年12月8日:11:59:59 0 0
2 图画 10 2003年12月8日12:00:00 2003年12月22日11:59:59 2003年12月8日12:00:00 2003年12月22日11:59:59 0 0
研究市场 5 2003年12月8日12:00:00 2003年12月15日:11:59:59 1月23日04:12:00:00 1月30日04:11:59:59 30 0
4 写入规范 4.5 2003年12月8日12:00:00 2003年12月12日15:59:59 2003年12月16日08:00:00 2003年12月22日11:59:59 5.5 5.5
5 原型 15 2003年12月22日12:00:00 1月16日04:11:59:59 2003年12月22日12:00:00 1月16日04:11:59:59 0 0
6 市场。地层。 10 2003年12月15日12:00:00 1月2日04:11:59:59 2004年1月30日:12:00 2月13日4:11:59:59 30 30
7 材料 10 1月16日4:12:00:00 1月30日04:11:59:59 1月16日4:12:00:00 1月30日04:11:59:59 0 0
8 设施 10 1月16日4:12:00:00 1月30日04:11:59:59 1月16日4:12:00:00 1月30日04:11:59:59 0 0
9 初始化。产品。 10 1月30日04:12:00:00 2月13日4:11:59:59 1月30日04:12:00:00 2月13日4:11:59:59 0 0
10 评估 10 2月13日4:12:00:00 2月27日4:11:59:59 2月20日4:12:00:00 2004年3月5日:11:59:59 5 5
11 测试市场 15 2月13日4:12:00:00 2004年3月5日:11:59:59 2004年2月13日:12:00 2004年3月5日:11:59:59 0 0
12 变化 5 2004年3月5日12:00:00 2004年3月12日:11:59:59 2004年3月5日12:00:00 2004年3月12日:11:59:59 0 0
13 生产 0 2004年3月12日12:00:00 2004年3月12日12:00:00 2004年3月12日12:00:00 2004年3月12日12:00:00 0 0
14 营销 0 2月13日4:12:00:00 2月13日4:12:00:00 2004年3月12日12:00:00 2004年3月12日12:00:00 20 20


使用CALID语句调用下一个PROC CPM,该语句标识“活动”和“日历”数据集中的变量CAL。召回“生产”和“原型”这两个活动不遵循默认日历。中显示的时间表输出4.10.5显示,由于项目中这两项活动的工作时间较长,计划的完成日期现在是3月8日,上午10:00。

proc cpm date='01dec03'd data=widgcal out=schedmcholidata=假日天数='08:00’tworkday=工作数据calendar=日历;假日/holfin=holfin;活动任务;持续天数;继承人suc1 suc2 suc3;calid cal;运行;title2“项目进度:三个日历”;程序打印;var任务天数cal e:l:tfloat f浮点;运行;

产出4.10.5:使用三个日历制定时间表

多个日历
项目时间表:三个日历

Obs公司 任务 卡尔 E_START(启动) 完成(_F) L_启动 L_完成 T_浮动 F_FLOAT(浮动)
1 批准计划 5.5 违约 2003年12月1日8:00:00 2003年12月8日:11:59:59 2003年12月1日8:00:00 2003年12月8日:11:59:59 0 0
2 图画 10 违约 2003年12月8日12:00:00 2003年12月22日11:59:59 2003年12月8日12:00:00 2003年12月22日11:59:59 0 0
研究市场 5 违约 2003年12月8日12:00:00 2003年12月15日11:59:59 1月19日04:10:00 1月26日04:09:59:59 25.75 0
4 写入规范 4.5 违约 2003年12月8日12:00:00 2003年12月12日15:59:59 2003年12月16日08:00:00 2003年12月22日11:59:59 5.50 5.50
5 原型 15 OVT_校准 2003年12月22日12:00:00 1月12日04:09:59:59 2003年12月22日12:00:00 1月12日04:09:59:59 0 0
6 市场。地层。 10 违约 2003年12月15日12:00:00 2004年1月2日:11:59:59 1月26日04:10:00 2月9日4:09:59:59 25.75 25.75
7 材料 10 违约 1月12日04:10:00 1月26日04:09:59:59 1月12日04:10:00 1月26日04:09:59:59 0 0
8 设施 10 违约 1月12日04:10:00 1月26日04:09:59:59 1月12日04:10:00 1月26日04:09:59:59 0 0
9 初始化。产品。 10 违约 1月26日04:10:00 2月9日4:09:59:59 1月26日04:10:00 2004年2月9日:9:59:59 0 0
10 评估 10 违约 2月9日4:10:00:00 2月23日4:09:59:59 2月16日10:00:00 3月1日4:09:59:59 5 5
11 测试市场 15 违约 2月9日4:10:00:00 3月1日4:09:59:59 2月9日4:10:00:00 3月1日4:09:59:59 0 0
12 变化 5 违约 3月1日4:10:00 3月8日04:09:59:59 3月1日4:10:00 3月8日04:09:59:59 0 0
13 生产 0 PROD_CAL(过程_校准) 3月8日4:10:00 3月8日4:10:00 3月8日4:10:00 3月8日4:10:00 0 0
14 营销 0 违约 2004年2月9日10:00 2月9日4:10:00:00 3月8日4:10:00 2004年3月8日10:00 20 20


现在假设负责编写规范的工程师要求从2003年12月8日起休七天假。怎么项目完成时间会受到影响吗?新日历,工程(_C)定义为具有与默认日历相同的工作模式,但也包含额外的假期。输出4.10.6显示数据集HOLIDATA公司加利福尼亚州,其中包含有关新日历的信息。数据集中的第四个观察结果日历数据缺少变量值_太阳_, …,_座椅_,表示日历,工程(_C),遵循与默认日历相同的工作模式。

输出4.10.6:HOLIDATA和CALEDATA数据集

多个日历
假日数据集

Obs公司 假日 霍利芬 霍利杜 卡尔
1 2003年12月8日 . 7 工程(_C)
2 2003年12月24日 2003年12月26日 .  
2004年1月1日 2004年1月1日 .  



多个日历
日历数据集

Obs公司 卡尔 _太阳_ _月_ _土埃_ _结婚_ _砰_ _星期五_ _座椅_
1 违约 假日 全天 全天 全天 全天 全天 假日
2 OVT_校准 假日 星期五 星期五 星期五 星期五 星期五 半天
PROD_CAL(过程_校准) 假日 s2秒 第1页 第1页 第1页 第1页 第3节
4 工程(_C)              


在下面的代码中,再次使用PROC GANTT将新日历与默认日历进行比较,如所示输出4.10.7。请注意,休息和节假日用实心填充图案标记。

/*创建一个数据集,用PROC GANTT演示假日*/数据计算2;e_start='1dec03:00:00't;e_finish='18dec03:00:00't;label cal=“安排休息/假期”;格式e_start e_finish日期时间16。;长度cal$8。;cal=“默认”;产出;cal=‘工程_校准’;产出;运行;title 2“工程日历和默认日历的休息和假期”;proc-gantt数据=cals2图形日历=caledata holidata=holidataworkday=工作数据;图表/间隔=dtday mininterval=dthour skip=2假日=(假日)holifin=(holifin)holidur=(holdur)markbreak daylength='08:00't calid=calref='1dec03:00:00'到'18dec03:00到'dtaynojobnum nolegend增量=16 hpages=3;id校准;运行;

输出4.10.7:Eng_cal和DEFAULT日历之间的差异

英文日历和默认日历之间的差异
外部文件:images/cpm10o71_1.png
外部文件:images/cpm10o71_2.png


修改“活动”数据集以重新定义任务“写入规范”的日历。调用PROC CPM,并且输出4.10.8显示了获得的新时间表。注意工程师休假对项目完工时间的影响。该项目是现定于2004年3月9日上午10点结束;实际上,即使计划休假,延迟也只有一天周期是七天。这是因为新日历后面的“编写规范”活动有一些空闲原始时间表中的时间;然而,这项活动现在变得至关重要。

数据widgvac;设置widgcal;如果task='Write Specs',则cal='Eng_cal';运行;proc-cpm date='01dec03'd data=widgvac-out=schedvacholidata=holidata日长度='08:00’tworkday=工作数据日历=日历;假日/holifin=holifin-holidur=holidur;活动任务;持续天数;继承人suc1 suc2 suc3;calid cal;运行;title 2“项目进度表:四个日历”;程序打印;var任务天数cal e:l:tfloat f浮点;运行;

产出4.10.8:使用四个日历制定时间表

多个日历
项目进度:四个日历

Obs公司 任务 卡尔 E_START(启动) E_完成 L_启动 L_完成 T_浮动 F_FLOAT(浮动)
1 批准计划 5.5 违约 2003年12月1日8:00:00 2003年12月8日:11:59:59 2003年12月2日08:00:00 2003年12月9日:11:59:59 1 0
2 图画 10 违约 2003年12月8日12:00:00 2003年12月22日11:59:59 2003年12月9日12:00:00 2003年12月23日11:59:59 1 1
研究市场 5 违约 2003年12月8日12:00:00 2003年12月15日11:59:59 1月20日4:10:00 1月27日04:09:59:59 26.75 0
4 写入规范 4.5 工程(_C) 2003年12月17日08:00:00 2003年12月23日11:59:59 2003年12月17日08:00:00 2003年12月23日11:59:59 0 0
5 原型 15 OVT_校准 2003年12月23日12:00:00 2004年1月13日:9:59:59 2003年12月23日12:00:00 1月13日04:09:59:59 0 0
6 市场。地层。 10 违约 2003年12月15日12:00:00 1月2日04:11:59:59 1月27日04:10:00 2月10日4:09:59:59 26.75 26.75
7 材料 10 违约 1月13日04:10:00 1月27日04:09:59:59 1月13日04:10:00 1月27日04:09:59:59 0 0
8 设施 10 违约 1月13日04:10:00 1月27日04:09:59:59 2004年1月13日10:00 1月27日04:09:59:59 0 0
9 初始化。产品。 10 违约 1月27日04:10:00 2月10日4:09:59:59 1月27日04:10:00 2月10日4:09:59:59 0 0
10 评估 10 违约 2月10日4:10:00:00 2月24日4:09:59:59 2月17日4:10:00:00 3月2日04:09:59:59 5 5
11 测试市场 15 违约 2月10日4:10:00:00 3月2日04:09:59:59 2月10日4:10:00:00 3月2日04:09:59:59 0 0
12 变化 5 违约 2004年3月2日10:00:00 3月9日4:09:59:59 2004年3月2日10:00:00 3月9日:04:09:59:59 0 0
13 生产 0 PROD_CAL(过程_校准) 2004年3月9日10:00:00 2004年3月9日10:00 2004年3月9日10:00:00 2004年3月9日10:00:00 0 0
14 营销 0 违约 2月10日4:10:00:00 2月10日4:10:00:00 2004年3月9日10:00:00 2004年3月9日10:00:00 20 20