# 菜品成本分析指标体系

> 数据基础：`dish_cost_analysis_summary`（788道菜品）、`dish_cost_analysis_material_detail`（3,568条物料明细）、`fact_recipe_bom`（3,520条BOM）、`dim_sku`（765个SKU）、`dim_material`（600种物料）、`v_store_theoretical_actual_cost_april`（89门店）、`dish_sales_details`（555万行销售明细）
> 核心限制：菜品成本报表缺少"月份+门店"字段，现阶段适合做公司级商品与供应链决策，不适合直接对具体门店进行SKU成本绩效考核。

---

## 第一优先级：现有数据可直接开展

### 模块1：SKU理论与实际成本分析

**解决的问题**：哪些菜品实际成本明显高于标准

| 指标 | 定义 | 计算方式 | 数据来源 |
|------|------|---------|---------|
| 理论成本 | 按BOM标准用量×标准单价计算的应有成本 | `theoretical_cost` | `dish_cost_analysis_summary` |
| 实际成本 | 实际盘点耗用物料的成本 | `actual_cost` | `dish_cost_analysis_summary` |
| 成本差异额 | 实际成本 - 理论成本 | `cost_variance_amount` | `dish_cost_analysis_summary` |
| 成本差异率 | 成本差异额 ÷ 理论成本 × 100% | 计算字段 | 计算 |
| 理论毛利率 | (售价 - 理论成本) ÷ 售价 × 100% | `theoretical_margin_rate_pct` | `dish_cost_analysis_summary` |
| 实际毛利率 | (售价 - 实际成本) ÷ 售价 × 100% | `actual_margin_rate_pct` | `dish_cost_analysis_summary` |
| 毛利率偏差 | 实际毛利率 - 理论毛利率 | 计算字段 | 计算 |

**成本分层标准**：
- 实际成本 ≤ 理论成本：正常
- 实际超理论 0-10%：关注
- 实际超理论 10-20%：重点整改
- 实际超理论 >20%：紧急核查
- 实际成本率 >100%（实际毛利率为负）：先核查BOM/单位/分摊异常，不直接认定超耗

**当前数据概况**：
- 理论成本合计：¥16,077,398.19
- 实际成本合计：¥16,547,027.90
- 超理论金额：¥469,629.70
- 整体差异率：2.92%
- 实际超理论菜品：236道（30%）
- 低毛利菜品（理论<50%）：95道

---

### 模块2：SKU原料差异贡献分析

**解决的问题**：一个菜品超耗具体由哪些原料造成

| 指标 | 定义 | 计算方式 | 数据来源 |
|------|------|---------|---------|
| 原料理论用量 | BOM标准每份用量 × 销量 | `theoretical_quantity` | `material_detail` |
| 原料实际用量 | 实际盘点耗用量 | `actual_quantity` | `material_detail` |
| 数量差异 | 实际用量 - 理论用量 | `loss_quantity` | `material_detail` |
| 损耗率 | 数量差异 ÷ 理论用量 × 100% | `loss_quantity_rate_pct` | `material_detail` |
| 金额差异 | 数量差异 × 物料单价 | `loss_amount` | `material_detail` |
| 每份理论用量 | 单份菜品的标准用量 | `theoretical_quantity_per_dish` | `material_detail` |
| 每份实际用量 | 单份菜品的实际用量 | `actual_quantity_per_dish` | `material_detail` |
| 差异贡献度 | 单原料金额差异 ÷ 菜品总成本差异 × 100% | 计算字段 | 计算 |

**分析路径**：
```
菜品成本差异
→ 哪种原料
→ 理论用量 vs 实际用量
→ 数量差异
→ 金额差异
→ 差异原因分类：份量超标 / 替代原料 / 分摊遗漏 / 门店错位
```

**当前数据概况**：
- 存在损耗的物料明细：1,193条（33.4%）
- 严重损耗（>20%）：894条
- 极重损耗（>100%）：25条

---

### 模块3：菜品盈利与菜单工程

**解决的问题**：哪些SKU销量高但不赚钱，哪些值得推广

| 指标 | 定义 | 计算方式 | 数据来源 |
|------|------|---------|---------|
| 销售额 | 菜品总销售金额 | `sales_amount` | `dish_cost_analysis_summary` |
| 销量 | 菜品销售份数 | `sales_quantity` | `dish_cost_analysis_summary` |
| 理论毛利 | 销售额 - 理论成本 | 计算字段 | 计算 |
| 实际毛利 | 销售额 - 实际成本 | 计算字段 | 计算 |
| 收入贡献度 | 菜品销售额 ÷ 总销售额 × 100% | 计算字段 | 计算 |
| 毛利贡献度 | 菜品毛利 ÷ 总毛利 × 100% | 计算字段 | 计算 |
| ABC销售等级 | 按销售额累计占比分类 | A(前70%) / B(70-90%) / C(后10%) | 计算 |

**菜单工程矩阵**：

| 类型 | 销售表现 | 成本表现 | 建议 |
|------|---------|---------|------|
| 明星盈利品 | 高销售 | 高实际毛利 | 推广和保证供应 |
| 高销低利品 | 高销售 | 低毛利 | 调价、减量或优化BOM |
| 低销高利品 | 低销售 | 高毛利 | 改善陈列和推荐 |
| 低销低利品 | 低销售 | 低毛利 | 可能占用独有原料，优先下架 |
| 数据异常品 | — | 成本率异常 | 先修复数据 |

---

### 模块4：BOM复杂度分析

**解决的问题**：哪些菜品配方太复杂、培训和执行难度高

| 指标 | 定义 | 计算方式 | 数据来源 |
|------|------|---------|---------|
| 原料种数 | SKU的BOM物料总数 | `count(*) GROUP BY sku_code` | `fact_recipe_bom` |
| 半成品种数 | BOM中半成品物料数 | `count(*) WHERE major_category='半成品'` | `fact_recipe_bom` + `dim_material` |
| 独有原料数 | 仅被该SKU使用的物料数 | 物料被引用次数=1 | `fact_recipe_bom` |
| 单位种类数 | BOM中出现的不同单位数 | `count(DISTINCT unit)` | `fact_recipe_bom` |
| 高损耗原料数 | waste_rate > 20%的物料数 | `count(*) WHERE waste_rate > 20` | `fact_recipe_bom` |
| 零实际用量原料数 | standard_net_quantity = 0 | `count(*) WHERE standard_net_quantity = 0` | `fact_recipe_bom` |
| 配方复杂度评分 | 综合评分 | 加权计算 | 计算 |

**复杂度分级**：
- ≤5种原料：低复杂度
- 6-10种：正常
- 11-15种：较复杂
- >15种：重点评审

**当前数据概况**：
- 1个物料：163个SKU
- 2-5个物料：150个SKU
- 6-10个物料：180个SKU
- 11-20个物料：100个SKU
- >20个物料：4个SKU（最多42种：鲜花椒香锅烤鱼）

---

### 模块5：独有原料风险分析

**解决的问题**：哪些低收入SKU占用专用原料

| 指标 | 定义 | 计算方式 | 数据来源 |
|------|------|---------|---------|
| SKU收入 | 菜品销售额 | `sales_amount` | `dish_cost_analysis_summary` |
| 独有原料数 | 仅被该SKU使用的物料数 | 物料引用次数=1 | `fact_recipe_bom` |
| 独有原料成本 | 独有物料的采购成本 | 独有物料金额合计 | `material_detail` |
| 库存耗用 | 独有物料的实际耗用金额 | `actual_amount` | `material_detail` |
| 替代品是否存在 | 是否有同类替代物料 | `substitute_material` | `fact_recipe_bom` |
| 下架后原料释放 | 停用SKU后可减少的物料数 | 独有物料数 | `fact_recipe_bom` |

**分析链路**：
```
低收入SKU
→ 独有原料
→ 门店库存及耗用
→ 保质期
→ 是否有其他菜品可以消化
→ 下架后的处置方案
```

---

### 模块6：SKU精简供应链影响模拟

**解决的问题**：砍掉某SKU能真正减少多少原料和库存

| 指标 | 定义 | 计算方式 | 数据来源 |
|------|------|---------|---------|
| 可减少原料数 | 停用SKU后独有物料数 | 独有物料数 | `fact_recipe_bom` |
| 独有库存金额 | 独有物料的库存价值 | 独有物料金额合计 | `material_detail` |
| 替代SKU数 | 可替代该SKU的其他菜品 | 同品类同价位SKU | `dim_sku` |
| 收入影响 | 停用SKU减少的销售额 | `sales_amount` | `dish_cost_analysis_summary` |
| 毛利影响 | 停用SKU减少的毛利 | 实际毛利 | 计算 |
| 仍需采购的共用原料 | 被其他SKU也使用的物料 | 物料引用次数>1 | `fact_recipe_bom` |
| 一次性报损风险 | 独有物料的当前库存 | 库存金额 | `material_detail` |

**核心价值**：避免"砍了很多SKU，但所有原料仍然需要采购"的假精简。

---

### 模块7：原料共用度和标准化分析

**解决的问题**：建立"原料—SKU网络"，识别核心原料与独有原料

| 指标 | 定义 | 计算方式 | 数据来源 |
|------|------|---------|---------|
| 物料共用度 | 被多少个SKU引用 | `count(DISTINCT sku_code)` | `fact_recipe_bom` |
| 核心原料 | 被超过50个SKU使用的物料 | 共用度 > 50 | `fact_recipe_bom` |
| 独有原料 | 仅被1个SKU使用的物料 | 共用度 = 1 | `fact_recipe_bom` |
| 同物异名原料 | 名称不同但实际同类的物料 | 名称相似度分析 | `dim_material` |
| 物料品类分布 | 原材料 vs 半成品 | `major_category` | `dim_material` |
| 高依赖原料 | 高价值且共用度高的物料 | 金额×共用度排序 | `material_detail` + `fact_recipe_bom` |

**管理意义**：
- 高共用原料重点保供
- 独有原料严格控制新品准入
- 同物异名原料统一编码
- 规格过多的原料进行采购标准化

**当前数据概况**：
- 五湖大豆油：被134个SKU使用（共用度最高）
- 大葱（粗）：130个SKU
- 蒜米：129个SKU
- 鲜姜：123个SKU

---

### 模块8：包装及耗材成本分析

**解决的问题**：餐盒、餐具、纸巾是否使用合理

| 指标 | 定义 | 计算方式 | 数据来源 |
|------|------|---------|---------|
| 每单用量 | 每份菜品耗用包装数量 | `theoretical_quantity_per_dish` | `material_detail` |
| 每单成本 | 每份菜品包装成本 | `theoretical_amount / sales_quantity` | `material_detail` |
| 费用率 | 包装成本 ÷ 销售额 × 100% | 计算字段 | 计算 |
| 包装物料识别 | 餐盒/餐具包/打包袋/调味包等 | `material_name LIKE '%餐盒%餐具%打包%'` | `material_detail` |
| 损耗量 | 包装物料的损耗数量 | `loss_quantity` | `material_detail` |
| 损耗率 | 包装物料的损耗率 | `loss_quantity_rate_pct` | `material_detail` |

**标准项目示例（餐巾纸）**：
- 每单约5.30抽
- 每单费用约0.044元
- 全部纸巾费用约占营业收入0.145%
- 建议标准：≤6抽正常、6-8抽关注、>8抽核查

---

### 模块9：BOM数据质量分析

**解决的问题**：配方、单位和分摊数据是否可靠

| 指标 | 定义 | 计算方式 | 数据来源 |
|------|------|---------|---------|
| BOM缺失率 | 无BOM的SKU占比 | 无BOM的SKU数 ÷ 总SKU数 | `dim_sku` + `fact_recipe_bom` |
| 重复BOM | 同一SKU+物料+版本出现多次 | 重复记录数 | `fact_recipe_bom` |
| 零实际用量 | standard_net_quantity = 0的BOM数 | `count(*)` | `fact_recipe_bom` |
| 成本率异常 | 实际成本率 > 100% | `actual_margin_rate_pct < 0` | `dish_cost_analysis_summary` |
| 理论成本异常 | 理论毛利率为负 | `theoretical_margin_rate_pct < 0` | `dish_cost_analysis_summary` |
| 负数量 | 理论/实际用量为负 | `theoretical_quantity < 0 OR actual_quantity < 0` | `material_detail` |
| 明细与汇总不一致 | 原料明细合计 ≠ 菜品汇总成本 | 逐菜品校验 | `material_detail` + `summary` |
| 销售匹配率 | 菜品匹配到销售数据的比例 | `matched_to_dish_sales_by_name` | 视图 |
| 库存匹配率 | 物料匹配到库存数据的比例 | `matched_to_inventory_by_name` | 视图 |

**当前数据概况**：
- BOM覆盖率：78.04%（597/765个SKU有BOM）
- 菜品匹配率：91.75%（723/788）
- 物料匹配率：96.65%（3450/3568）

---

### 模块10：品类成本对比

**解决的问题**：各品类的成本结构和毛利水平对比

| 指标 | 定义 | 计算方式 | 数据来源 |
|------|------|---------|---------|
| 品类平均理论毛利率 | 品类内所有菜品理论毛利率均值 | `avg(theoretical_margin_rate_pct)` | `dish_cost_analysis_summary` |
| 品类平均实际毛利率 | 品类内所有菜品实际毛利率均值 | `avg(actual_margin_rate_pct)` | `dish_cost_analysis_summary` |
| 品类销售额 | 品类内所有菜品销售额合计 | `sum(sales_amount)` | `dish_cost_analysis_summary` |
| 品类成本差异 | 品类内实际成本-理论成本合计 | `sum(cost_variance_amount)` | `dish_cost_analysis_summary` |
| 品类成本率 | 品类理论成本 ÷ 销售额 | 计算字段 | 计算 |
| 品类菜品数 | 品类内SKU数量 | `count(*)` | `dish_cost_analysis_summary` |

---

### 模块11：物料损耗率分布

**解决的问题**：物料损耗的整体分布和异常识别

| 指标 | 定义 | 计算方式 | 数据来源 |
|------|------|---------|---------|
| 损耗率分档 | 按损耗率区间统计 | 7档分布 | `material_detail` |
| 平均损耗率 | 所有物料的平均损耗率 | `avg(loss_quantity_rate_pct)` | `material_detail` |
| 最大损耗率 | 单条物料明细的最大损耗率 | `max(loss_quantity_rate_pct)` | `material_detail` |
| 高损耗物料数 | 损耗率>20%的物料数 | `count(*)` | `material_detail` |
| 涉及菜品数 | 某物料被多少菜品使用 | `count(DISTINCT dish)` | `material_detail` |
| 总损耗量 | 某物料的总损耗数量 | `sum(loss_quantity)` | `material_detail` |
| 物料类型损耗对比 | 原材料 vs 半成品的损耗率对比 | `avg(loss_rate) GROUP BY material_type` | `material_detail` |

**损耗率分档**：
- 无损耗（0%）
- 轻微（-1~0%）
- 轻度（-1~-10%）
- 中度（-10~-30%）
- 严重（-30~-100%）
- 极重（< -100%）
- 正向（>0%，实际低于理论）

---

### 模块12：菜品定价合理性

**解决的问题**：售价与BOM标准成本的关系，定价是否合理

| 指标 | 定义 | 计算方式 | 数据来源 |
|------|------|---------|---------|
| 售价 | 菜品单价 | `price` | `dish_cost_analysis_summary` |
| 理论成本率 | 理论成本 ÷ 售价 × 100% | 计算字段 | 计算 |
| 实际成本率 | 实际成本 ÷ 售价 × 100% | 计算字段 | 计算 |
| 毛利率分布 | 按毛利率区间统计菜品数 | 分档统计 | `dish_cost_analysis_summary` |
| 低毛利菜品数 | 理论毛利率 < 50% | `count(*)` | `dish_cost_analysis_summary` |
| 负毛利菜品数 | 实际毛利率 < 0 | `count(*)` | `dish_cost_analysis_summary` |
| 定价偏离度 | 售价与同类菜品均价的偏差 | (售价 - 品类均价) ÷ 品类均价 | 计算 |

---

### 模块13：BOM驱动物料需求预测

**解决的问题**：根据历史销量×BOM标准用量预测物料采购量

| 指标 | 定义 | 计算方式 | 数据来源 |
|------|------|---------|---------|
| 预计物料需求量 | BOM标准用量 × 历史销量 | `sum(standard_gross_quantity × sales_quantity)` | `fact_recipe_bom` + `summary` |
| 涉及菜品数 | 使用该物料的SKU数 | `count(DISTINCT sku_code)` | `fact_recipe_bom` |
| 物料单位 | 物料的标准单位 | `base_unit` | `dim_material` |
| 物料类型 | 原材料/半成品 | `major_category` | `dim_material` |
| 需求金额 | 预计需求量 × 物料单价 | 需物料单价数据 | 计算 |

---

### 模块14：物料匹配率监控

**解决的问题**：物料名称标准化程度和库存匹配情况

| 指标 | 定义 | 计算方式 | 数据来源 |
|------|------|---------|---------|
| 已匹配物料数 | 成功匹配到库存的物料数 | `count(*) WHERE matched=true` | 视图 |
| 未匹配物料数 | 未匹配到库存的物料数 | `count(*) WHERE matched=false` | 视图 |
| 物料匹配率 | 已匹配 ÷ 总数 × 100% | 计算字段 | 计算 |
| 菜品匹配率 | 已匹配销售 ÷ 总菜品 × 100% | 计算字段 | 计算 |
| 未匹配物料清单 | 未匹配物料的名称和涉及菜品 | 明细列表 | 视图 |
| 未匹配菜品清单 | 未匹配销售数据的菜品 | 明细列表 | 视图 |

---

## 第二优先级：门店级分析（基于现有门店成本数据）

### 模块15：门店成本差异分布

**解决的问题**：全部门店的成本异常分级分布

| 指标 | 定义 | 计算方式 | 数据来源 |
|------|------|---------|---------|
| 门店成本差异金额 | 实际食材成本 - 理论食材成本 | `food_cost_variance` | `v_store_theoretical_actual_cost_april` |
| 差异分级 | 红/橙/绿/灰 | `variance_level` | `v_store_theoretical_actual_cost_april` |
| 理论成本率 | 理论成本 ÷ 销售 × 100% | `theoretical_cost_rate_pct` | `v_store_theoretical_actual_cost_april` |
| 实际食材成本率 | 实际食材成本 ÷ 销售 × 100% | `actual_food_cost_rate_pct` | `v_store_theoretical_actual_cost_april` |
| 成本率偏差 | 实际成本率 - 理论成本率 | `cost_rate_gap_pct` | `v_store_theoretical_actual_cost_april` |
| 可比状态 | 是否可比 | `comparison_status` | `v_store_theoretical_actual_cost_april` |

**当前数据概况**：
- 红色-严重超耗：35家门店，超耗¥203.6万
- 橙色-明显超耗：40家门店，超耗¥135.1万
- 绿色-基本正常：8家门店
- 灰色-口径异常：6家门店

---

### 模块16：门店超耗金额排名

**解决的问题**：哪些门店超耗最严重

| 指标 | 定义 | 计算方式 | 数据来源 |
|------|------|---------|---------|
| 门店超耗排名 | 按成本差异金额排序 | `ORDER BY food_cost_variance` | `v_store_theoretical_actual_cost_april` |
| 门店超耗率 | 差异 ÷ 理论成本 × 100% | 计算字段 | 计算 |
| 门店销售额 | 门店总实收 | `sales_received` | `v_store_theoretical_actual_cost_april` |
| 门店账单数 | 门店总账单数 | `bill_count` | `v_store_theoretical_actual_cost_april` |
| 门店理论成本 | 门店理论成本合计 | `theoretical_cost` | `v_store_theoretical_actual_cost_april` |
| 门店实际成本 | 门店实际成本合计 | `actual_food_cost` | `v_store_theoretical_actual_cost_april` |

---

### 模块17：门店理论vs实际成本率对比

**解决的问题**：门店成本率偏差的分布

| 指标 | 定义 | 计算方式 | 数据来源 |
|------|------|---------|---------|
| 理论成本率 | 理论成本 ÷ 销售 | `theoretical_cost_rate_pct` | `v_store_theoretical_actual_cost_april` |
| 实际成本率 | 实际成本 ÷ 销售 | `actual_food_cost_rate_pct` | `v_store_theoretical_actual_cost_april` |
| 成本率偏差 | 实际 - 理论 | `cost_rate_gap_pct` | `v_store_theoretical_actual_cost_april` |
| 负库存项数 | 期末库存为负的物料数 | `negative_item_lines` | `v_store_theoretical_actual_cost_april` |
| 负库存金额 | 负库存金额合计 | `negative_consumption_amount` | `v_store_theoretical_actual_cost_april` |

---

### 模块18：门店菜品成本交叉分析

**解决的问题**：按门店看菜品成本和毛利

| 指标 | 定义 | 计算方式 | 数据来源 |
|------|------|---------|---------|
| 门店匹配菜品数 | 门店销售中匹配到成本数据的菜品数 | `count(DISTINCT dish_name)` | `dish_sales_details` + `summary` |
| 门店匹配销售额 | 门店匹配菜品的销售额合计 | `sum(gross_amount)` | `dish_sales_details` + `summary` |
| 门店菜品覆盖率 | 匹配菜品数 ÷ 门店总菜品数 | 计算字段 | 计算 |
| 门店理论成本合计 | 门店匹配菜品的理论成本 | `sum(theoretical_cost)` | 关联查询 |
| 门店实际成本合计 | 门店匹配菜品的实际成本 | `sum(actual_cost)` | 关联查询 |

> 注：菜品成本报表无门店维度，此分析通过菜品名称关联销售明细间接估算，精度受限。

---

### 模块19：门店物料损耗排名

**解决的问题**：按门店汇总物料损耗率，识别操作异常门店

| 指标 | 定义 | 计算方式 | 数据来源 |
|------|------|---------|---------|
| 门店物料损耗率 | 门店物料损耗量 ÷ 理论用量 | 间接估算 | `dish_sales_details` + `material_detail` |
| 门店高损耗物料数 | 损耗率>20%的物料数 | 计算字段 | 计算 |
| 门店损耗金额 | 损耗物料的金额合计 | 间接估算 | 关联查询 |

> 注：受限于菜品成本报表无门店维度，此分析为间接估算。

---

## 第三优先级：BOM专项分析（基于构建的BOM数据）

### 模块20：BOM覆盖率分析

**解决的问题**：有多少SKU有BOM，缺BOM的SKU清单

| 指标 | 定义 | 计算方式 | 数据来源 |
|------|------|---------|---------|
| BOM覆盖率 | 有BOM的SKU ÷ 总SKU × 100% | 计算字段 | `dim_sku` + `fact_recipe_bom` |
| 有BOM的SKU数 | 在BOM表中出现的SKU数 | `count(DISTINCT sku_code)` | `fact_recipe_bom` |
| 缺BOM的SKU数 | 不在BOM表中的SKU数 | 总SKU - 有BOM的SKU | 计算 |
| 缺BOM SKU清单 | 按品类、销量排序 | 明细列表 | `dim_sku` + `fact_recipe_bom` |

**当前数据概况**：
- BOM覆盖率：78.04%（597/765）
- 缺BOM的SKU：168个

---

### 模块21：BOM适用门店覆盖

**解决的问题**：哪些SKU的BOM仅适用部分门店

| 指标 | 定义 | 计算方式 | 数据来源 |
|------|------|---------|---------|
| 全门店适用 | applicable_stores 为空（全部门店） | `applicable_stores IS NULL` | `fact_recipe_bom` |
| 部分门店适用 | applicable_stores 有指定门店 | `applicable_stores IS NOT NULL` | `fact_recipe_bom` |
| 门店缺失BOM | 某门店无对应SKU的BOM | 交叉校验 | `fact_recipe_bom` + `dim_store` |

**当前状态**：所有BOM的 `applicable_stores` 均为空，表示全部门店适用。

---

### 模块22：高损耗BOM预警

**解决的问题**：BOM标准损耗率超过阈值的SKU-物料组合

| 指标 | 定义 | 计算方式 | 数据来源 |
|------|------|---------|---------|
| BOM损耗率 | BOM中记录的标准损耗率 | `waste_rate` | `fact_recipe_bom` |
| BOM出成率 | BOM中记录的标准出成率 | `yield_rate` | `fact_recipe_bom` |
| 高损耗BOM数 | waste_rate > 20%的BOM数 | `count(*)` | `fact_recipe_bom` |
| 极端损耗BOM | waste_rate > 100%的BOM | 明细列表 | `fact_recipe_bom` |
| 涉及菜品数 | 高损耗BOM涉及的SKU数 | `count(DISTINCT sku_code)` | `fact_recipe_bom` |

---

### 模块23：菜品物料构成分析

**解决的问题**：每道菜品的物料构成和主要成本物料

| 指标 | 定义 | 计算方式 | 数据来源 |
|------|------|---------|---------|
| 物料数量 | 菜品BOM中的物料总数 | `count(*)` | `fact_recipe_bom` |
| 主要成本物料 | 金额占比最大的物料 | 排序 | `material_detail` |
| 物料成本占比 | 单物料金额 ÷ 菜品总成本 | 计算字段 | `material_detail` |
| 物料类型构成 | 原材料 vs 半成品数量 | `count(*) GROUP BY material_type` | `material_detail` |
| 配方复杂度评分 | 综合物料数/类型/损耗 | 加权计算 | 计算 |

---

### 模块24：成本差异vs销量散点图

**解决的问题**：高销量高差异菜品优先整改

| 指标 | 定义 | 计算方式 | 数据来源 |
|------|------|---------|---------|
| X轴：销量 | 菜品销售份数 | `sales_quantity` | `dish_cost_analysis_summary` |
| Y轴：成本差异 | 实际成本 - 理论成本 | `cost_variance_amount` | `dish_cost_analysis_summary` |
| 气泡大小：销售额 | 菜品销售额 | `sales_amount` | `dish_cost_analysis_summary` |
| 颜色：品类 | 一级分类 | `category_level1` | `dish_cost_analysis_summary` |
| 优先整改象限 | 高销量 + 高差异 | 右上角 | 散点图 |

---

### 模块25：理论/实际毛利率偏差分布

**解决的问题**：毛利率偏差的分布和异常菜品

| 指标 | 定义 | 计算方式 | 数据来源 |
|------|------|---------|---------|
| 毛利率偏差 | 实际毛利率 - 理论毛利率 | 计算字段 | `dish_cost_analysis_summary` |
| 偏差分档 | 按偏差区间统计 | 5档分布 | 计算 |
| 严重偏低 | 偏差 < -30% | `count(*)` | 计算 |
| 偏低 | 偏差 -30% ~ -10% | `count(*)` | 计算 |
| 略低 | 偏差 -10% ~ 0% | `count(*)` | 计算 |
| 略高 | 偏差 0 ~ 10% | `count(*)` | 计算 |
| 高于理论 | 偏差 > 10% | `count(*)` | 计算 |

**当前数据概况**：
- 实际略高0-10%：191道
- 实际高于理论>10%：177道
- 实际略低0-10%：140道
- 实际偏低10-30%：53道
- 实际严重偏低>30%：40道

---

### 模块26：门店成本红橙绿分级地图

**解决的问题**：89门店按成本异常级别地图展示

| 指标 | 定义 | 计算方式 | 数据来源 |
|------|------|---------|---------|
| 门店经纬度 | 门店地理位置 | `latitude_gcj02, longitude_gcj02` | `v_store_location_operating` |
| 成本分级 | 红/橙/绿/灰 | `variance_level` | `v_store_theoretical_actual_cost_april` |
| 超耗金额 | 门店成本差异金额 | `food_cost_variance` | `v_store_theoretical_actual_cost_april` |
| 门店名称 | 门店名称 | `store_name` | `v_store_theoretical_actual_cost_april` |
| 地图标注颜色 | 按分级着色 | 红/橙/绿/灰 | 可视化 |

---

### 模块27：BOM版本时效监控

**解决的问题**：过期BOM/即将过期BOM/有效BOM统计

| 指标 | 定义 | 计算方式 | 数据来源 |
|------|------|---------|---------|
| 有效BOM数 | expiry_date 为空或 > 当前日期 | `count(*)` | `fact_recipe_bom` |
| 过期BOM数 | expiry_date < 当前日期 | `count(*)` | `fact_recipe_bom` |
| 即将过期BOM数 | expiry_date 在30天内 | `count(*)` | `fact_recipe_bom` |
| BOM版本数 | 不同版本数量 | `count(DISTINCT bom_version)` | `fact_recipe_bom` |

**当前状态**：所有BOM均为v1.0版本，expiry_date为空（长期有效），无过期风险。

---

## 补齐数据后可增加的分析

> 当前菜品成本报表缺少"月份+门店"字段，补齐后可增加以下分析：

| # | 分析模块 | 需要补齐的字段 | 解决的问题 |
|---|---------|--------------|-----------|
| 28 | 门店-SKU-原料理论与实际差异 | 门店+月份 | 精确到门店级的单品成本差异 |
| 29 | 同一SKU不同门店份量执行差异 | 门店+月份 | 识别份量不统一的门店 |
| 30 | 原料价格差异和用量差异分解 | 月份+采购单价 | 区分价格因素和用量因素 |
| 31 | 门店替代原料使用情况 | 门店+月份 | 门店是否擅自替换原料 |
| 32 | BOM版本变更前后毛利变化 | 月份+BOM版本 | 配方调整对毛利的影响 |
| 33 | 新品试销实际毛利 | 月份+上架日期 | 新品是否达到预期毛利 |
| 34 | 报损/赠送/员工餐成本归属 | 门店+月份+用途 | 非销售耗用的成本归属 |
| 35 | 门店真实SKU利润表 | 门店+月份 | 门店级单品盈亏 |
| 36 | 替代料使用率 | `substitute_material`有值 | 替代料的实际使用频率和成本影响 |
| 37 | 供应商集中度分析 | `dim_material.supplier_code` | 供应商依赖度和断供风险 |
| 38 | BOM标准成本波动追踪 | 多版本BOM | 同一SKU不同版本的成本变化趋势 |
| 39 | 配方变更对毛利影响 | 多版本BOM+月份 | 版本变更前后的成本/毛利变化 |

**标准差异分解最终目标**：
```
实际成本差异
= 采购价格差异
+ 原料用量差异
+ 替代料差异
+ 出成率差异
+ 报损盘亏
+ 赠送及员工餐
+ 调拨和分摊差异
```

---

## 建议落地顺序

### 第一批（公司级商品与供应链决策）
1. 模块1：SKU理论与实际成本及毛利
2. 模块2：SKU原料差异贡献
3. 模块4：BOM复杂度与独有原料
4. 模块6：SKU精简供应链影响模拟
5. 模块8：包装耗材每单成本

### 第二批（成本执行管理）
6. 模块3：菜品盈利与菜单工程
7. 模块7：原料共用度和标准化
8. 模块9：BOM数据质量分析
9. 模块10：品类成本对比
10. 模块11：物料损耗率分布

### 第三批（门店级分析）
11. 模块15：门店成本差异分布
12. 模块16：门店超耗金额排名
13. 模块17：门店理论vs实际成本率
14. 模块26：门店成本分级地图

### 第四批（深度分析）
15. 模块5：独有原料风险
16. 模块12：菜品定价合理性
17. 模块13：BOM驱动物料需求预测
18. 模块14：物料匹配率监控
19. 模块24：成本差异vs销量散点图
20. 模块25：毛利率偏差分布

### 分析闭环
```
卖得怎么样（模块3）
→ 实际赚不赚钱（模块1）
→ 为什么成本异常（模块2）
→ 配方是否复杂（模块4）
→ 是否应该保留（模块6）
→ 下架后能减少什么成本（模块6）
```
