Skip to content

5.3 数据库连接教程 · 风险分析的双向闭环

阅读提示: 本教程演示 PRA 直连 P6 数据库的完整流程——从导入样例项目到运行分析再到更新结果回 P6。前置条件是已完成 Connection Wizard 的连接配置(参见 5.1 打开P6项目)。所有菜单和字段名保留英文原文。

数据库连接是 PRA 风险分析的完整形态。与 XER 方式的单向读取不同,数据库方式支持:读取 P6 中的风险输入数据 → PRA 分析 → 将结果(P80 日期、Criticality Index 等)写回 P6 数据库。这为建立持续更新的风险基线提供了技术基础。

如果你没有 P6 数据库环境,可先阅读 5.2 XER 文件教程 做离线分析。


教程概述

本教程包含六个步骤:

  1. 将样例项目导入 P6 数据库
  2. 在 PRA 中打开 P6 项目
  3. 运行风险分析
  4. 解读风险结果
  5. 将结果更新回 P6
  6. 在 P6 中查看结果

第一步:将样例项目导入 P6

导入 XER 文件到 P6 数据库

步骤操作
1启动 P6
2`File
3在 File Name 处浏览到 PRA 安装的 TutorialPrimaveraWithRiskData.xer,点击 Open
4Next
5在 Import To 下选择 EPS 中的合适位置
6Next → Next → Finish → OK

该样例文件通常安装在 C:\Program Files\Oracle\Primavera Risk Analysis\Samples 目录下。

图:P6 中导入样例 XER 项目

创建「进度风险输入」布局

在 P6 中创建专用的风险输入视图,方便统一管理风险数据:

添加字段列:

右键点击列头 → Columns... → 在 User Defined 区域添加以下列:

列名列类型用途
Risk Input - Minimum DurationStart Date (用户字段)最乐观工期
Risk Input - Likely DurationStart Date (用户字段)最可能工期
Risk Input - Maximum DurationStart Date (用户字段)最悲观工期
Risk Input - Duration FunctionText (用户字段)分布函数
Risk Input - Duration CorrelationText (用户字段)工期相关性
Risk Input - Probabilistic BranchText (用户字段)概率分支
Risk Input - Task ExistenceNumber (用户字段)任务存在概率

保存布局:

View | Layout | Save Layout As... → 输入 "Risk Input - Schedule" → Save

图:PRA 风险输入 - Schedule 布局的列设置

理解预置的风险数据

样例项目中已预填了完整风险数据。以下是对样例数据的解读:

进度风险输入

数据项样例值含义
三点估算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 UnitsAdmin | Admin Preferences | Time Periods` 中修改。

创建「成本风险输入」布局

添加字段列:

列名列类型用途
Risk Input - Resource FunctionsText (用户字段)资源分布函数
Risk Input - Minimum LaborNumber (用户字段)最乐观劳动力成本
Risk Input - Likely LaborNumber (用户字段)最可能劳动力成本
Risk Input - Maximum LaborNumber (用户字段)最悲观劳动力成本
Risk Input - Minimum ExpenseNumber (用户字段)最乐观费用
Risk Input - Likely ExpenseNumber (用户字段)最可能费用
Risk Input - Maximum ExpenseNumber (用户字段)最悲观费用

保存布局:

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)"
6OK

PRA 使用 P6 的安全机制,你只能访问在 P6 中有权限查看的项目。

方式二:从 P6 发起

打开 P6 项目后,使用 Tools | Primavera Risk Analysis...` 直接启动 PRA 并加载当前项目。

方式一对 P6 R8 连接是必需的。

配置导入设置

项目打开后弹出 Primavera Enterprise Import Settings 对话框。

General 选项卡:

设置项选择
Planning UnitDay
One day equals8 hours
Import the WBS Structure勾选

Tasks 选项卡:

映射以下字段(样例中数据已预填):

PRA 字段映射来源
Minimum DurationRisk Input - Minimum Duration
Likely DurationRisk Input - Likely Duration
Maximum DurationRisk Input - Maximum Duration
Duration FunctionRisk Input - Duration Function
Duration CorrelationRisk Input - Duration Correlation

图:打开 P6 项目时的导入映射 - Tasks 选项卡

Probabilistic 选项卡:

PRA 字段映射来源
Probabilistic BranchRisk Input - Probabilistic Branch
Task ExistenceRisk 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 Iterations1000
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 中关闭该项目。

执行更新

步骤操作
1PRA 中点击 File
2配置输出映射(见下文)
3点击 Update Now
4在警告对话框中选择 Yes(确认将 PRA 值覆盖到 P6 用户字段)
5按提示登录 P6

输出映射配置

PRA 风险结果映射到 P6 用户字段
P80 Start DateRisk - P80 Start Date
P80 Finish DateRisk - P80 Finish Date
P50 Start DateRisk - P50 Start Date
P50 Finish DateRisk - P50 Finish Date
Risk Mean Start DateRisk - Mean Start Date
Risk Mean Finish DateRisk - Mean Finish Date
Criticality IndexRisk - Criticality Index
Duration SensitivityRisk - Duration Sensitivity
Duration CrucialityRisk - Duration Cruciality
Cost SensitivityRisk - 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 DateP80 开始日期
Risk - P80 Finish DateP80 结束日期
Risk - P50 Start DateP50 开始日期
Risk - P50 Finish DateP50 结束日期
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

图:甘特图中显示确定性进度下的 P50 和 P80 风险进度条

现在你在 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) 独立创作。

广告位 · 合作联系