Appearance
5.3 数据库连接教程 · 风险分析的双向闭环
阅读提示: 本教程演示 PRA 直连 P6 数据库的完整流程——从导入样例项目到运行分析再到更新结果回 P6。前置条件是已完成 Connection Wizard 的连接配置(参见 5.1 打开P6项目)。所有菜单和字段名保留英文原文。
数据库连接是 PRA 风险分析的完整形态。与 XER 方式的单向读取不同,数据库方式支持:读取 P6 中的风险输入数据 → PRA 分析 → 将结果(P80 日期、Criticality Index 等)写回 P6 数据库。这为建立持续更新的风险基线提供了技术基础。
如果你没有 P6 数据库环境,可先阅读 5.2 XER 文件教程 做离线分析。
教程概述
本教程包含六个步骤:
- 将样例项目导入 P6 数据库
- 在 PRA 中打开 P6 项目
- 运行风险分析
- 解读风险结果
- 将结果更新回 P6
- 在 P6 中查看结果
第一步:将样例项目导入 P6
导入 XER 文件到 P6 数据库
| 步骤 | 操作 |
|---|---|
| 1 | 启动 P6 |
| 2 | `File |
| 3 | 在 File Name 处浏览到 PRA 安装的 TutorialPrimaveraWithRiskData.xer,点击 Open |
| 4 | Next |
| 5 | 在 Import To 下选择 EPS 中的合适位置 |
| 6 | Next → Next → Finish → OK |
该样例文件通常安装在
C:\Program Files\Oracle\Primavera Risk Analysis\Samples目录下。

创建「进度风险输入」布局
在 P6 中创建专用的风险输入视图,方便统一管理风险数据:
添加字段列:
右键点击列头 → Columns... → 在 User Defined 区域添加以下列:
| 列名 | 列类型 | 用途 |
|---|---|---|
| Risk Input - Minimum Duration | Start Date (用户字段) | 最乐观工期 |
| Risk Input - Likely Duration | Start Date (用户字段) | 最可能工期 |
| Risk Input - Maximum Duration | Start Date (用户字段) | 最悲观工期 |
| Risk Input - Duration Function | Text (用户字段) | 分布函数 |
| Risk Input - Duration Correlation | Text (用户字段) | 工期相关性 |
| Risk Input - Probabilistic Branch | Text (用户字段) | 概率分支 |
| Risk Input - Task Existence | Number (用户字段) | 任务存在概率 |
保存布局:
View | Layout | Save Layout As... → 输入 "Risk Input - Schedule" → Save

理解预置的风险数据
样例项目中已预填了完整风险数据。以下是对样例数据的解读:
进度风险输入
| 数据项 | 样例值 | 含义 |
|---|---|---|
| 三点估算 | Min、Likely、Max 工期值 | PRA 用这三个值创建三角分布。若 Likely 留空,PRA 自动使用活动剩余工期 |
| Uniform 分布 | Plaster 活动使用 Uniform 分布 | 在 Duration Function 列输入函数,不填 Min/Likely/Max |
| 概率分支 | 0090[80];0100[20] | 80% 走电气测试通过(活动 0090),20% 走电气测试失败(活动 0100) |
| 工期相关性 | Upper brickwork → 0070[95] | 砌上层砖墙的工期不确定性 95% 相关于砌下层砖墙(活动 0070) |
| 任务存在性 | Dry Rot = 10% | 有 10% 概率发现屋顶腐烂(需要修复) |
| 零工期概率活动 | Dry Rot & Electrics fail 工期为 0 | 防止其在确定性计划中影响完工日期和成本。Likely Dur 必须输入,否则系统默认使用 0 |
Remaining Durations 列的值与 P6 中 Hours/Day 设置相关。如果 P6 中设置为 8 小时/天,显示值将与样例截图一致。可在 Edit | User Preferences | Time Units
或Admin | Admin Preferences | Time Periods` 中修改。
创建「成本风险输入」布局
添加字段列:
| 列名 | 列类型 | 用途 |
|---|---|---|
| Risk Input - Resource Functions | Text (用户字段) | 资源分布函数 |
| Risk Input - Minimum Labor | Number (用户字段) | 最乐观劳动力成本 |
| Risk Input - Likely Labor | Number (用户字段) | 最可能劳动力成本 |
| Risk Input - Maximum Labor | Number (用户字段) | 最悲观劳动力成本 |
| Risk Input - Minimum Expense | Number (用户字段) | 最乐观费用 |
| Risk Input - Likely Expense | Number (用户字段) | 最可能费用 |
| Risk Input - Maximum Expense | Number (用户字段) | 最悲观费用 |
保存布局:
View | Layout | Save Layout As... → 输入 "Risk Input - Cost" → Save
成本风险输入解读
| 数据项 | 说明 |
|---|---|
| Labor Cost | 从劳动力资源分配计算得来,可在 PRA 中映射为 Duration Dependent(工期依赖)——工期变化按比例影响成本 |
| Expense | 固定费用,可在 PRA 中映射为 Duration Independent(工期独立)——工期变化不影响成本。可通过 Min/Max Expense 添加不确定性 |
| 零成本概率活动 | Dry Rot 和 Electrics fail 的成本也设为零(工期为零,成本也应为零) |
第二步:在 PRA 中打开 P6 项目
方式一:从 PRA 打开
| 步骤 | 操作 |
|---|---|
| 1 | 启动 PRA |
| 2 | `File |
| 3 | 如果提示连接未完成,先打开 P6 并从 `Tools |
| 4 | 登录 P6 数据库(如 admin / admin) |
| 5 | 在 EPS 中找到并选择 "HOUSE - Primavera Risk Tutorial (with risk data)" |
| 6 | OK |
PRA 使用 P6 的安全机制,你只能访问在 P6 中有权限查看的项目。
方式二:从 P6 发起
打开 P6 项目后,使用 Tools | Primavera Risk Analysis...` 直接启动 PRA 并加载当前项目。
方式一对 P6 R8 连接是必需的。
配置导入设置
项目打开后弹出 Primavera Enterprise Import Settings 对话框。
General 选项卡:
| 设置项 | 选择 |
|---|---|
| Planning Unit | Day |
| One day equals | 8 hours |
| Import the WBS Structure | 勾选 |
Tasks 选项卡:
映射以下字段(样例中数据已预填):
| PRA 字段 | 映射来源 |
|---|---|
| Minimum Duration | Risk Input - Minimum Duration |
| Likely Duration | Risk Input - Likely Duration |
| Maximum Duration | Risk Input - Maximum Duration |
| Duration Function | Risk Input - Duration Function |
| Duration Correlation | Risk Input - Duration Correlation |

Probabilistic 选项卡:
| PRA 字段 | 映射来源 |
|---|---|
| Probabilistic Branch | Risk Input - Probabilistic Branch |
| Task Existence | Risk Input - Task Existence |
Resources and Costs 选项卡:
选择 "Import Activity Costs summarized as Labor, Non-Labor, Materials and Expenses",按类别汇总导入成本。
分别设置 Labor 为 Duration Dependent(工期依赖),Material 和 Expense 为 Duration Independent(工期独立)。

重要操作:完成所有映射后,务必勾选"Use as default for new projects" 复选框!这样以后打开同一数据库中的项目时无需重复配置。
导入完成
点击 OK,PRA 开始导入。导入完成后弹出 Save As 对话框,使用默认名称保存。
如果按 WBS 组织,可能需要展开顶层作业才能查看详情(双击最左侧加号)。
点击 Risk Inputs 工作表查看已导入的不确定性数据。
Import Check 验证
与 XER 教程相同,Import Check 工作表中的 Start Check 和 Finish Check 列显示 P6 与 PRA 之间的日期差异。灰色条为 P6 进度,上方条为 PRA 进度。
查看风险输入
| 方式 | 操作 |
|---|---|
| 全局视图 | Risk |
| 单项视图 | 点击活动 → Task Details → Risk and Uncertainty 选项卡 |
第三步:运行风险分析
启动与配置
Risk | Run Risk Analysis 或工具栏按钮。
Options 设置:
| 选项 | 值 |
|---|---|
| Number of Iterations | 1000 |
| Create Task Percentiles | 勾选 |
点击 Percentiles... 设置需要计算的百分比值(P50、P80 等)。
开始分析
点击 Analyze 启动蒙特卡洛模拟。
警告对话框显示 '0100 - Electrics fail' 和 '0140 - Dry Rot' 工期超出分布范围——这是正常的(它们被建模为零工期概率活动)。
Step vs Complete
- Step 模式: 每次迭代后重绘甘特图,观察活动出现/消失、成本变化、关键路径变化
- Complete 模式: 不重绘,速度快。确认分析正常后用此模式完成剩余迭代
使用 Step 和 Go 需要 PRA 在每次迭代后重绘,这会显著增加分析时间。确认分析按预期运行后,用 Complete 按钮会快得多。
第四步:解读风险结果
分布图(Distribution Graph)
分析完成后自动弹出 Distribution Graph。
查看项目完工概率:
| 操作 | 结果 |
|---|---|
| Finish Date 选项卡 | Deterministic Probability = 18%(确定性计划只有 18% 的概率按时完工) |
| P80 日期 = 5 Jul(80% 置信度下不晚于此日期) |
查看单活动完工概率:
选择 '0160 - Recover roof' → Deterministic Probability = 19%,P80 = 18 May。
查看预算概率:
| 操作 | 结果 |
|---|---|
| 选回 Entire Plan | |
| Cost 选项卡 | Deterministic Cost Probability = 27% |
| P80 Cost = 88,647 |
Risk Outputs 工作表
甘特图列中显示以下风险输出指标:
| 指标 | 含义 |
|---|---|
| Criticality Index | 活动在关键路径上的频率 |
| Duration Sensitivity | 活动工期与项目总工期的相关度 |
| Cost Sensitivity | 活动成本与项目总成本的相关度 |
| Task Existed | 概率活动的出现频率 |

P50/P80 甘特图
操作:View | View | Insert View → 勾选 "Insert View as New Sheet" → 选择 'Gantt Chart: P50 - P80 Markers' → OK。
前提:分析选项中已勾选 Create Task Percentiles,否则用户字段不会被填充。
龙卷风图(Tornado Graph)
操作:Reports | Tornado Graph → 选择 Duration Sensitivity 选项卡。
双击柱子可跳转到甘特图中对应活动。

第五步:将结果更新回 P6
这是数据库方式对比 XER 方式的最大优势——风险分析结果可以写回 P6。
更新准备
如果目标项目在 P6 中处于打开状态,更新可能部分失败。请先在 P6 中关闭该项目。
执行更新
| 步骤 | 操作 |
|---|---|
| 1 | PRA 中点击 File |
| 2 | 配置输出映射(见下文) |
| 3 | 点击 Update Now |
| 4 | 在警告对话框中选择 Yes(确认将 PRA 值覆盖到 P6 用户字段) |
| 5 | 按提示登录 P6 |
输出映射配置
| PRA 风险结果 | 映射到 P6 用户字段 |
|---|---|
| P80 Start Date | Risk - P80 Start Date |
| P80 Finish Date | Risk - P80 Finish Date |
| P50 Start Date | Risk - P50 Start Date |
| P50 Finish Date | Risk - P50 Finish Date |
| Risk Mean Start Date | Risk - Mean Start Date |
| Risk Mean Finish Date | Risk - Mean Finish Date |
| Criticality Index | Risk - Criticality Index |
| Duration Sensitivity | Risk - Duration Sensitivity |
| Duration Cruciality | Risk - Duration Cruciality |
| Cost Sensitivity | Risk - Cost Sensitivity |
提示: 无法编辑已有映射行,必须先 Remove 再 Add 新映射。
项目级输出映射
| PRA 风险结果 | 映射到 P6 项目字段 |
|---|---|
| 选定分位数 - 项目成本 | Project User Cost 14 & 15 |
| 选定分位数 - 项目完成日期 | Project User End Date 1 & 2 |
| 满足项目完成日期的概率 | Project User Number 10 |
| 满足最新基线日期的概率 | Project User Number 9 |
| 满足项目成本的概率 | Project User Number 8 |
| 满足预算成本的概率 | Project User Number 7 |
第六步:在 P6 中查看结果
创建「Risk Outputs」布局
在 P6 中创建布局以查看活动级风险输出:
| 步骤 | 操作 |
|---|---|
| 1 | 打开 P6 并登录 |
| 2 | 打开目标项目(Activities 视图) |
| 3 | 右键列头 → Columns... 添加以下用户字段列 |
| 4 | `View |
添加的风险输出列:
| 用户字段 | 显示内容 |
|---|---|
| Risk - P80 Start Date | P80 开始日期 |
| Risk - P80 Finish Date | P80 结束日期 |
| Risk - P50 Start Date | P50 开始日期 |
| Risk - P50 Finish Date | P50 结束日期 |
| Risk - Criticality Index | 关键度指数 |
| Risk - Duration Sensitivity | 工期敏感度 |
创建「Risk Outputs - Dates」布局(带甘特图条)
| 步骤 | 操作 |
|---|---|
| 1 | 添加上述风险输出列 |
| 2 | 右键甘特图区域 → Bars... |
| 3 | 添加两条条:P50 Start→Finish 和 P80 Start→Finish |
| 4 | 设置 Row 值为 2 和 3(避免与确定性条重叠) |
| 5 | `View |

现在你在 P6 甘特图中可以看到彩色条显示 P50 和 P80 的风险调整日期。
查看项目级风险结果
在 P6 中查看项目级别的风险分析结果:
| 方式 | 操作 |
|---|---|
| 自动 | `Enterprise |
| 手动 | `View |
实战案例:某石化企业 P6-PRA 集成
案例:某大型炼化一体化项目的 P6-PRA 全闭环集成
项目背景
华东沿海某炼化一体化项目,总投资 ¥420 亿,建设期 42 个月。P6 计划包含 22,000+ 条作业,6 级 WBS,约 180 个资源角色。P6 Professional R16.2 + Oracle 数据库,PRA 8.7 SP5。
集成架构
`` P6 Professional R16.2 (Oracle DB) ↕ API Connection Primavera Risk Analysis 8.7 SP5 ↓ 月度风险分析 P80 日期回写 → P6 用户字段 → 生成风险调整基线
**连接配置**
- 连接方式:Primavera Integration API(R8.1+ API)
- 数据库:Oracle 12c,SSL 加密
- Batch Size:1024(加速 22,000 条作业的加载)
- Connection Timeout:180 秒(大项目需延长时间)
- 选择 API 远程连接模式:Standard(本地服务器无需 HTTP 隧道)
**映射配置**
**输入映射(Risk Input):**
| P6 用户字段 | PRA 字段 | 数据类型 |
|-----------|---------|---------|
| UDF_MIN_DUR (Start Date) | Minimum Duration | 工期 |
| UDF_MAX_DUR (Start Date) | Maximum Duration | 工期 |
| UDF_DUR_CORR (Text 250) | Duration Correlation | 工期相关性 |
| UDF_PROB_BRANCH (Text 250) | Probabilistic Branch | 概率分支 |
| UDF_TASK_EXIST (Number) | Task Existence | 存在概率 |
**输出映射(Risk Output):**
| PRA 结果 | P6 用户字段 | 用途 |
|---------|-----------|------|
| P80 Finish Date | UDF_P80_FINISH (Start Date) | 风险调整 P80 完工日期 |
| P50 Finish Date | UDF_P50_FINISH (Start Date) | 风险调整 P50 完工日期 |
| Criticality Index | UDF_CRIT_IDX (Number) | 关键度排序 |
| Duration Sensitivity | UDF_DUR_SENS (Number) | 工期敏感度排序 |
**月度风险分析流程**
| 步骤 | 操作 | 耗时 |
|------|------|:---:|
| 1 | P6 月度进度更新(Actual Dates, Remaining Duration) | 2 天 |
| 2 | P6 导出当前月 Data Date 的项目状态 | — |
| 3 | PRA File | Primavera | Open Primavera P6 Project...` → 登录 → 选择项目 | ~3 分钟 |
| 4 | PRA 中复核/调整风险数据(Min/Max Duration, Correlation) | ~2 小时 |
| 5 | `Risk | Run Risk Analysis`(1000 次迭代) | ~15 分钟 |
| 6 | 解读结果(Distribution Graph, Tornado, Risk Outputs) | ~1 小时 |
| 7 | `File | Primavera | Update Primavera P6 Project...` → 回写 P80 日期和关键度 | ~2 分钟 |
| 8 | P6 中打开项目,切换到 "Risk Output" 布局查看 P80 甘特图 | ~1 分钟 |
| 9 | 生成月度风险分析报告 | ~4 小时 |
**关键输出**
| 指标 | 第 1 个月 | 第 6 个月 | 第 12 个月 | 趋势 |
|------|:---:|:---:|:---:|------|
| 确定性完工概率 | 12% | 18% | 35% | 逐步改善 |
| P80 完工延期 | +8.5 月 | +6.2 月 | +4.1 月 | 风险收窄 |
| Top 1 敏感度 | 反应器安装 (0.72) | 管道预制 (0.58) | 电气调试 (0.49) | 风险源转移 |
**成果**
- 建立了月度 P6 → PRA → P6 的风险闭环流程
- P80 日期写入 P6 后,作为内部控制基线与业主的合同工期并行管理
- 12 个月后 P80 延期从 8.5 月收窄至 4.1 月——风险在项目管理过程中被逐步消化
- 第 12 个月将 Criticality Index Top 10 活动设为 P6 中的重点关注项(WBS 里程碑监控)
**踩坑记录**
- **坑1:**首次导入时没勾选 "Use as default for new projects",导致每月要重新配置 12 个映射字段。**教训:第一遍就勾上!**
- **坑2:**P6 管理员在某月新增了 2 个用户字段后,PRA 下拉列表中没有出现。原因是忘了同步。**解决方案:** 使用 File | Primavera | Edit Default Import Mappings` → Synchronize Primavera P6 Data 按钮。
- **坑3:**更新回 P6 时某个月报错,提示项目被 P6 用户锁定。**原因:**计划工程师忘了关闭 P6 中的项目。**教训:** 更新前确认项目在 P6 中已关闭。
- **坑4:** 月度分析中所有活动的 Duration Sensitivity 值突然全变为 0。排查发现 P6 在做进度更新时错误地将所有活动的 Duration Function 列清空了(批量编辑时误操作)。恢复了备份后修复。
---
## 本章小结
| 要点 | 一句话 |
|------|--------|
| 数据库 vs XER | 数据库支持双向读写(导入风险数据 + 导出分析结果),XER 仅单向读取 |
| P6 端准备 | 创建 "Risk Input - Schedule" 和 "Risk Input - Cost" 两种专用布局 |
| 导入映射 | General + Tasks + Probabilistic + Resources and Costs + Activity Codes 五个选项卡 |
| 默认映射 | 勾选 "Use as default for new projects" 避免重复配置 |
| 结果回写 | File | Primavera | Update Primavera P6 Project...` → 配置输出映射 → Update Now |
| P6 端查看 | 创建 "Risk Outputs" 和 "Risk Output - Dates" 布局,甘特图显示 P50/P80 条 |
| 项目级结果 | 项目成本分位数、完成概率等存储在项目用户字段中 |
| 同步新字段 | 使用 Synchronize Primavera P6 Data 按钮更新 PRA 中的字段列表 |
---
> 英文原版内容版权归 Oracle Corporation 所有。中文翻译、案例、习题由 [计划工程师](https://planner.cn) 独立创作。