3d89baf65d
- 后端: 新增 cost-analysis.ts 路由,含31个分析端点和7个调整管理端点 - 前端: 新增 CostAnalysisPage 主页面 + 10个Tab组件 - Tab1-9: 成本总览/菜品盈利/原料差异/BOM配方/供应链/包装耗材/数据质量/门店成本/可视化探索 - Tab10: 调整管理(诊断快照+调整记录+效果验证) - 修复: 毛利率和损耗率从简单平均改为加权计算 - 新增: Tabs组件、侧边栏菜单项、路由注册 - 新增: 3张数据库表(诊断快照/调整记录/验证结果)
608 lines
27 KiB
Markdown
608 lines
27 KiB
Markdown
# 菜品成本分析指标体系
|
||
|
||
> 数据基础:`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)
|
||
```
|