4. Excel表格结构规划
在动手写任何公式或宏之前,先把工作簿的“骨架”定下来,是油田生产日报自动汇总能否长期稳定运行的关键。很多现场表格之所以越用越乱,根本原因不是公式写错,而是四类数据被混在同一张表里:每天变化的产量数据、相对稳定的井档案、人为约定的计算参数、以及面向汇报的汇总结果。本节要做的,就是把这四类内容拆成四张职责清晰的表,并用统一的“井号”把它们串起来。
四张表的职责边界
先明确每张表“管什么、不管什么”,这是后续所有关联设计的前提。
- 井基础信息表(tbl_Wells):存放不随日报变化的静态档案,如井号、井名、所属区块、井别(采油井/注水井/措施井)、投产日期、当前生产状态。一行一口井,井号是唯一主键,不允许重复。
- 参数配置表(tbl_Config):存放计算口径与阈值,如含水率分级界限、产量单位换算系数、异常判定阈值、日报统计起始时刻。以“参数名—参数值—说明”三列纵向存放,便于集中修改而不必翻找公式。
- 日报明细表(tbl_Daily):存放每天每口井的实际数据,如日期、井号、日产液、日产油、日产水、含水率、套压、油压、回压、生产时间。这是数据量最大、增长最快的表,一行代表“某天某口井”。
- 汇总输出表(tbl_Summary):面向汇报,按区块、井别或全厂汇总日产油、日产液、含水率、开井数等指标,数据全部由公式或透视从明细表引用而来,不手工录入。
四张表的关系可以概括为:基础信息表提供“井是谁”,参数配置表提供“怎么算”,日报明细表提供“今天多少”,汇总输出表回答“整体如何”。下图展示了这一关联结构。
主键与关联字段的落地约定
关联能否成立,取决于“井号”是否在四张表中完全一致。实践中建议做三条硬性约定:第一,井号统一为文本格式,避免“0012”被 Excel 自动转成数字 12 而与“0012”匹配失败;第二,井号前后不留空格,录入时用数据验证下拉选择,而不是手工敲;第三,日报明细表采用“日期+井号”联合主键,同一口井同一天只允许一条记录,可用条件格式或 COUNTIFS 做重复校验。
在日报明细表中,井号列通过数据验证引用基础信息表的井号区域,实现“只能选已有井”。这样一旦出现新井,先在基础信息表登记,明细表下拉里才会出现,从源头杜绝“表里有、档案里没有”的孤儿数据。汇总输出表则通过 SUMIFS、COUNTIFS 按区块或井别从明细表取数,区块字段本身来自基础信息表,因此汇总表并不需要重复维护井与区块的对应关系。
一个可直接套用的字段设计示例
以下给出四张表的字段结构示例,参数与数值均为教学假设,实际使用时按本单位报表口径调整。
| 表名 | 关键字段 | 主键/关联 | 数据来源 |
|---|---|---|---|
| tbl_Wells | 井号、井名、区块、井别、投产日期、生产状态 | 井号(主键) | 人工维护 |
| tbl_Config | 参数名、参数值、说明 | 参数名(主键) | 人工维护 |
| tbl_Daily | 日期、井号、日产液、日产油、日产水、含水率、套压、油压、回压、生产时间 | 日期+井号(联合主键),井号外键指向 tbl_Wells | 每日录入/导入 |
| tbl_Summary | 统计日期、区块、井别、日产油合计、日产液合计、综合含水率、开井数 | 统计日期+区块+井别 | 公式/透视生成 |
以含水率为例说明参数配置表如何参与计算。假设配置表中“含水率计算方式”取值为“日产水/日产液”,则明细表含水率列写为 =IFERROR(日产水/日产液,""),而不是每行手填。若某天某井日产液为 0(关井),公式返回空值而非报错,汇总时用 SUMIFS 自动跳过。再如“异常判定阈值”设为套压波动超过 0.5 MPa 标记异常,明细表可增加一列“异常标记”,用 =IF(ABS(套压-前一日套压)>阈值,"异常","") 判断,阈值直接引用配置表单元格,日后调整只改一处。
tbl_Config!$B$5,也便于交接给同事维护。结构规划中常见的三个坑
第一,把汇总结果写回明细表。有人图省事在明细表底部加“合计”行,结果下次追加数据时合计行被挤到中间,透视和公式全部错位。合计只能出现在汇总输出表。第二,基础信息表里放“当前日产油”。这类会变的量属于明细表,放进档案表会导致历史无法追溯。第三,参数散落在公式里。含水界限、换算系数一旦硬编码进几十个公式,口径调整时几乎无法核对,必须集中到配置表。
完成上述规划后,工作簿就具备了“录一次、算全篇”的基础:明细表只管如实记录,基础信息表只管档案准确,配置表只管口径统一,汇总表只管呈现结果。四张表通过井号这一条主线咬合在一起,后续无论是加透视、写宏还是做图表,都有了稳定的数据底座。