原始数据导入处理
一、数据源概览
| 数据域 |
原始表 |
导入方式 |
文件格式 |
频率 |
| 账单数据 |
bill_records |
Python脚本导入 |
Excel (.xlsx) |
月度 |
| 经营费用 |
operating_expense_records |
Python脚本导入 |
Excel |
月度 |
| 库存成本 |
inventory_cost_records |
Python脚本导入 |
Excel |
月度 |
| 菜品成本分析 |
dish_cost_analysis_summary |
Python脚本导入 |
Excel |
月度 |
| 考勤数据 |
attendance_records |
Python脚本导入 |
Excel |
月度 |
| 薪资数据 |
salary_detail_records |
Python脚本导入 |
Excel |
月度 |
| 门店位置 |
store_location_master |
Python脚本导入 |
Excel |
按需 |
| 中央厨房 |
central_kitchen_* (6表) |
Python脚本导入 |
Excel |
月度 |
| 配送数据 |
distribution_detail_records |
Python脚本导入 |
Excel |
月度 |
| 菜品销售 |
dish_sales_details |
Python脚本导入 |
Excel |
月度 |
二、账单数据导入(bill_records)
2.1 数据源
- 来源文件: 正餐事业部_店内订单明细-已结账_*.xlsx
- 来源系统: 餐饮POS系统导出
- 文件路径:
数据/4月/ 或 数据/5月/
2.2 导入脚本
| 脚本 |
说明 |
/tmp/import_missing_stores.py |
导入缺失门店账单(MD00002/MD00003/MD00008/1098/1110) |
/tmp/import_remaining_stores.py |
导入剩余门店账单(哈马尔罕总部基地店0056/大钟寺店0022/茂林居店0021/西安含光店0052/西部马华火锅北三环店0012) |
2.3 字段映射
bill_records 表使用 c001~c199 编码,关键字段:
| 列号 |
字段含义 |
用途 |
| c002 |
门店编码 |
门店标识 |
| c003 |
门店名称 |
门店名称(用于JOIN) |
| c009 |
消费金额 |
营业收入 |
| c068 |
优惠金额 |
优惠分析 |
| c114 |
理论成本额 |
理论毛利率 |
| c175 |
下单时间 |
时段分析 |
| c176 |
结账时间 |
日度汇总 |
| c178 |
就餐人数 |
客流分析 |
| c181 |
会员卡号 |
会员分析 |
| c185 |
会员标识 |
会员识别 |
2.4 导入逻辑
- 读取 Excel 文件,解析支付方式和金额
- 按门店名称匹配
store_name_mapping 表
- 删除旧数据: 按
c003(门店名称)和日期范围删除同月旧记录
- 插入新数据: 批量 INSERT,自动生成 bill_id
- 导入后需刷新
bill_fact 物化视图
2.5 支付方式解析
脚本中定义了支付方式映射,将不同支付渠道(微信/支付宝/现金/会员储值/美团/饿了么等)解析为对应字段。
2.6 门店名称映射
| 原始名称 |
门店编码 |
说明 |
| 哈马尔罕(总部基地店) |
0056 |
新导入 |
| 哈马尔罕(大钟寺店) |
0022 |
新导入 |
| 哈马尔罕(茂林居店) |
0021 |
新导入 |
| 哈马尔罕(西安含光店) |
0052 |
新导入 |
| 西部马华火锅(北三环店) |
0012 |
新导入 |
| 关东店 |
1098 |
编码修正(原错误映射为0033) |
三、经营费用导入(operating_expense_records)
3.1 数据源
- 来源文件: 各门店费用明细Excel
- 费用科目: 月薪员工工资、餐厅房租、外卖佣金、电费、燃气费、水费、物业费、宿舍费用、刷卡手续费、清洗费、垃圾费、维修费、菜品提成、自送快递费、烟道清洗、设备租赁费、暖气费
3.2 导入流程
- 读取 Excel,按费用科目和门店单位导入
- 写入
operating_expense_records 原始表
- 通过
operating_expense_store_mapping 映射到销售门店编码
include_in_operating_analysis 标志控制是否纳入经营分析
3.3 门店映射规则
- 一个费用单位可映射到一个销售门店编码(
sales_store_code)
- 多个费用单位可映射到同一门店(如"哈马尔罕大钟寺店"→"大钟寺店"0022)
- 未映射的费用单位(支持/供应链/特殊业务)不纳入门店评估
include_in_operating_analysis = true 才参与费用分析
3.4 导入后处理
- 视图
v_operating_expense_unit_monthly 自动反映新数据
- 视图
v_store_operating_expense_monthly 按 sales_store_code 聚合
- 物化表
mv_store_operating_expense_monthly 需手动刷新(INSERT/UPDATE)
四、库存成本导入(inventory_cost_records)
4.1 数据源
- 来源文件: 库存盘点Excel
- 内容: 各门店库存消耗金额、原料分类
4.2 导入流程
- 读取 Excel,按门店和原料分类导入
- 写入
inventory_cost_records 原始表
- 通过
inventory_store_mapping 映射到销售门店编码
include_in_operating_cost 标志控制是否纳入成本分析
4.3 导入后处理
- 刷新
mv_inventory_cost_classified_monthly 物化视图
- 刷新
mv_store_theoretical_actual_cost_monthly 物化视图
五、菜品成本分析导入(dish_cost_analysis_summary)
5.1 数据源
- 来源文件: 菜品成本分析Excel
- 内容: 每个菜品的理论成本、实际成本、毛利率
5.2 导入流程
- 读取 Excel,按菜品导入
- 写入
dish_cost_analysis_summary 和 dish_cost_analysis_material_detail
- 记录导入日志到
dish_cost_analysis_import_log
- 按
report_month 和 import_id 区分批次
六、考勤薪资导入
6.1 考勤数据
- 原始表:
attendance_records(38列)
- 导入日志:
attendance_import_log
- 内容: 员工打卡记录(上班/下班/迟到/早退)
6.2 薪资数据
- 原始表:
salary_detail_records(102列)
- 导入日志:
salary_import_log
- 内容: 员工薪资明细(基本工资/加班/社保/公积金等)
七、门店位置导入(store_location_master)
7.1 数据源
- 来源文件: 门店位置信息Excel
- 内容: 门店地址、经纬度(GCJ02)、面积、租约到期日、营业时间
7.2 导入流程
- 读取 Excel,写入
store_location_source_rows 原始行
- 匹配到
sales_store_location_mapping 建立门店编码关联
- 更新
store_location_master 主数据
7.3 关键字段
| 字段 |
说明 |
area_sqm |
营业面积(平米),用于坪效计算 |
lease_expiry_date |
租约到期日,用于续租风险 |
latitude_gcj02 / longitude_gcj02 |
GCJ02坐标,用于地图展示 |
business_address |
营业地址 |
八、数据导入后的标准操作流程
九、已知问题与修复记录
9.1 门店编码映射错误
- 问题: 关东店编码错误映射为0033,实际应为1098
- 修复: 更新
store_name_mapping 表
9.2 旧数据误删
- 问题: 导入新数据时误删了旧账单记录(bill_records),导致历史数据丢失
- 修复: 从数据库备份
bill_query_full_20260802_150344.dump 恢复,使用 pg_restore 恢复到临时库后提取缺失数据
9.3 费用单位重复映射
- 问题: "哈马尔罕大钟寺店"的费用记录未映射到"大钟寺店"(0022),导致费用未纳入门店评估
- 修复: 更新
operating_expense_store_mapping,将 sales_store_code 设为 0022,include_in_operating_analysis = true
9.4 视图聚合问题
- 问题:
v_store_operating_expense_monthly 视图未按 sales_store_code 聚合,导致多个费用单位映射到同一门店时出现重复行
- 修复: 重建视图,增加
expense_agg CTE 按 sales_store_code GROUP BY 聚合