如何从Primavera P6数据库中获取已计算的Resource Assignments数值?
能否直接从Primavera P6后端数据库获取预计算资源分配结果
可以直接从P6的后端数据库(Oracle、SQL Server为主,部分离线单机版使用SQLite)获取已经调度计算完成的资源分配数值,包括你需要的月度维度统计结果,不需要自行重算P6的调度逻辑。
核心关联表说明
P6调度完成后会自动把计算结果写入预定义的数据库表中,你需要用到的核心表如下:
TASKRSRC:资源分配基础表,存储所有资源和任务的绑定关系,以及单条资源分配的总计划工时、总实际工时、总计划成本、总实际成本等全局汇总值TASKRSRC_SUM:时间分段资源分配汇总表,是P6调度后自动按时间周期拆分计算好的结果,按日、周、月等维度聚合的资源分配数值都可以直接从该表获取- 如需关联维度信息,可额外关联
PROJECT表(项目维度属性)、RSRC表(资源维度属性)、TASK表(任务维度属性)
注意事项
只有在P6客户端或服务端执行过「调度(Schedule)」操作并成功保存项目后,上述表中的数值才会更新为最新结果。如果项目修改后未执行调度,数据库中存储的仍是上一次调度生成的旧数据。
月度统计示例SQL
以下为Oracle环境下按项目、资源、月度维度统计计划工时的参考查询,SQL Server或SQLite仅需替换对应日期处理函数即可:
SELECT p.proj_name 项目名称, r.rsrc_name 资源名称, TRUNC(trs.start_date, 'MONTH') 统计月份, SUM(trs.plan_work_qty) 月度计划工时 FROM TASKRSRC_SUM trs INNER JOIN TASKRSRC tr ON trs.taskrsrc_id = tr.taskrsrc_id INNER JOIN PROJECT p ON tr.proj_id = p.proj_id INNER JOIN RSRC r ON tr.rsrc_id = r.rsrc_id -- 可自行增加过滤条件,比如指定项目ID、时间范围等 WHERE p.proj_id = '1001' GROUP BY p.proj_name, r.rsrc_name, TRUNC(trs.start_date, 'MONTH') ORDER BY 统计月份 DESC, 资源名称;
如果是SQL Server环境,将TRUNC(trs.start_date, 'MONTH')替换为DATEFROMPARTS(YEAR(trs.start_date), MONTH(trs.start_date), 1)即可;SQLite环境替换为strftime('%Y-%m', trs.start_date)。
内容的提问来源于stack exchange,提问作者infotba
相关产品推荐
相关产品推荐

