Files
SBrainCO/菜品成本分析指标体系.md
freedakgmail 3d89baf65d feat: 菜品成本分析模块 - 10个Tab + 31个分析API + 7个调整管理API
- 后端: 新增 cost-analysis.ts 路由,含31个分析端点和7个调整管理端点
- 前端: 新增 CostAnalysisPage 主页面 + 10个Tab组件
  - Tab1-9: 成本总览/菜品盈利/原料差异/BOM配方/供应链/包装耗材/数据质量/门店成本/可视化探索
  - Tab10: 调整管理(诊断快照+调整记录+效果验证)
- 修复: 毛利率和损耗率从简单平均改为加权计算
- 新增: Tabs组件、侧边栏菜单项、路由注册
- 新增: 3张数据库表(诊断快照/调整记录/验证结果)
2026-07-28 16:56:45 +08:00

608 lines
27 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 菜品成本分析指标体系
> 数据基础:`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 |
| 低销高利品 | 低销售 | 高毛利 | 改善陈列和推荐 |
| 低销低利品 | 低销售 | 低毛利 | 可能占用独有原料,优先下架 |
| 数据异常品 | — | 成本率异常 | 先修复数据 |
---
### 模块4BOM复杂度分析
**解决的问题**:哪些菜品配方太复杂、培训和执行难度高
| 指标 | 定义 | 计算方式 | 数据来源 |
|------|------|---------|---------|
| 原料种数 | 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抽核查
---
### 模块9BOM数据质量分析
**解决的问题**:配方、单位和分摊数据是否可靠
| 指标 | 定义 | 计算方式 | 数据来源 |
|------|------|---------|---------|
| 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数据)
### 模块20BOM覆盖率分析
**解决的问题**:有多少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的SKU168个
---
### 模块21BOM适用门店覆盖
**解决的问题**:哪些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` |
| 地图标注颜色 | 按分级着色 | 红/橙/绿/灰 | 可视化 |
---
### 模块27BOM版本时效监控
**解决的问题**:过期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. 模块1SKU理论与实际成本及毛利
2. 模块2SKU原料差异贡献
3. 模块4BOM复杂度与独有原料
4. 模块6SKU精简供应链影响模拟
5. 模块8:包装耗材每单成本
### 第二批(成本执行管理)
6. 模块3:菜品盈利与菜单工程
7. 模块7:原料共用度和标准化
8. 模块9BOM数据质量分析
9. 模块10:品类成本对比
10. 模块11:物料损耗率分布
### 第三批(门店级分析)
11. 模块15:门店成本差异分布
12. 模块16:门店超耗金额排名
13. 模块17:门店理论vs实际成本率
14. 模块26:门店成本分级地图
### 第四批(深度分析)
15. 模块5:独有原料风险
16. 模块12:菜品定价合理性
17. 模块13BOM驱动物料需求预测
18. 模块14:物料匹配率监控
19. 模块24:成本差异vs销量散点图
20. 模块25:毛利率偏差分布
### 分析闭环
```
卖得怎么样(模块3
→ 实际赚不赚钱(模块1
→ 为什么成本异常(模块2
→ 配方是否复杂(模块4
→ 是否应该保留(模块6
→ 下架后能减少什么成本(模块6
```