- 后端: 新增 cost-analysis.ts 路由,含31个分析端点和7个调整管理端点 - 前端: 新增 CostAnalysisPage 主页面 + 10个Tab组件 - Tab1-9: 成本总览/菜品盈利/原料差异/BOM配方/供应链/包装耗材/数据质量/门店成本/可视化探索 - Tab10: 调整管理(诊断快照+调整记录+效果验证) - 修复: 毛利率和损耗率从简单平均改为加权计算 - 新增: Tabs组件、侧边栏菜单项、路由注册 - 新增: 3张数据库表(诊断快照/调整记录/验证结果)
27 KiB
菜品成本分析指标体系
数据基础:
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:SKU理论与实际成本及毛利
- 模块2:SKU原料差异贡献
- 模块4:BOM复杂度与独有原料
- 模块6:SKU精简供应链影响模拟
- 模块8:包装耗材每单成本
第二批(成本执行管理)
- 模块3:菜品盈利与菜单工程
- 模块7:原料共用度和标准化
- 模块9:BOM数据质量分析
- 模块10:品类成本对比
- 模块11:物料损耗率分布
第三批(门店级分析)
- 模块15:门店成本差异分布
- 模块16:门店超耗金额排名
- 模块17:门店理论vs实际成本率
- 模块26:门店成本分级地图
第四批(深度分析)
- 模块5:独有原料风险
- 模块12:菜品定价合理性
- 模块13:BOM驱动物料需求预测
- 模块14:物料匹配率监控
- 模块24:成本差异vs销量散点图
- 模块25:毛利率偏差分布
分析闭环
卖得怎么样(模块3)
→ 实际赚不赚钱(模块1)
→ 为什么成本异常(模块2)
→ 配方是否复杂(模块4)
→ 是否应该保留(模块6)
→ 下架后能减少什么成本(模块6)