Files
SBrainCO/server/sql/04_init_data.sql
T
2026-07-26 22:48:08 +08:00

39 lines
4.1 KiB
SQL

-- ============================================================
-- 04_init_data.sql
-- 初始化数据:任务模板 + 指标字典 + 门店主数据
-- ============================================================
-- 任务模板
INSERT INTO analytics.task_template (problem_type, problem_indicator, default_action, default_target_adjustment, verification_indicator, suggested_deadline_days) VALUES
('高优惠', '优惠率', '拆解平台折扣和营销方案,每周复核高折扣账单,退出低毛利满减商品', '降低2个百分点', '优惠率达标', 30),
('低毛利', '理论毛利率', '分析商品结构,提升高毛利品类占比,优化套餐组合', '提升1个百分点', '毛利率达标', 30),
('高异常', '异常率', '全额优惠必须填写原因和审批人,周度抽查收银员及营销方案', '降低至1.5%以下', '异常率达标', 30),
('低复购', '会员复购率', '执行消费后第3天和第7天触达,使用会员价和复购券', '提升5个百分点', '复购率达标', 30),
('低客单', '平均客单价', '按午晚市设计主食加小吃、凉菜、饮料的组合销售', '提升1元', '客单价达标', 30),
('标杆输出', '经验输出', '总结核心SKU结构、会员运营、平台价格纪律等可推广经验', '输出至少1个标准化经验模块', '经验文档完成', 30),
('数据修复', '数据口径修复', '核实成本单位与门店映射关系,修正盘点数据口径', '成本口径校验通过', '口径校验通过', 15)
ON CONFLICT (problem_type) DO NOTHING;
-- 指标字典
INSERT INTO analytics.indicator_dictionary (indicator_name, business_definition, formula, data_source, update_frequency, owner, scope, yellow_threshold, red_threshold, version_date) VALUES
('实收', '门店实际收到的金额,扣除优惠后的净收入', 'sum(received_total)', 'bill_fact / c114', '', '财务部', '门店/公司', NULL, NULL, '2026-04-01'),
('客单价', '平均每笔账单的实收金额', 'sum(received_total) / count(*)', 'bill_fact', '', '运营部', '门店/公司', 30, 28, '2026-04-01'),
('优惠率', '优惠总额占消费总额的比例', 'sum(discount_total) / sum(consumption) * 100', 'bill_fact / c068 / c009', '', '运营部', '门店/公司', 22, 25, '2026-04-01'),
('理论毛利率', '理论利润占实收的比例', 'sum(theoretical_profit) / sum(received_total) * 100', 'bill_fact / c181 / c114', '', '财务部', '门店/公司', 70, 68, '2026-04-01'),
('实际成本率', '实际倒挤成本占实收的比例', 'actual_food_cost / received * 100', 'inventory_cost_records + bill_fact', '', '财务部', '门店', 30, 35, '2026-04-01'),
('平台加权成本率', '三平台折扣+佣金占平台实收+折扣+佣金的比例', '(discount + commission) / (received + discount + commission) * 100', 'bill_fact', '', '运营部', '门店/公司', 35, 38, '2026-04-01'),
('复购率', '跨日消费会员占全部识别会员的比例', 'count(DISTINCT member_id FILTER(WHERE cross_day)) / count(DISTINCT member_id) * 100', 'bill_fact', '', '会员部', '门店/公司', 30, 25, '2026-04-01'),
('异常率', '异常账单数占总账单数的比例', 'count(anomaly_bills) / count(all_bills) * 100', 'v_anomaly_bills / bill_fact', '', '运营部', '门店', 1.5, 3, '2026-04-01'),
('库存天数', '库存金额 / 日均成本', 'inventory_amount / (monthly_cost / 30)', 'inventory_cost_records', '', '供应链', '门店/成本单位', 7, 10, '2026-04-01'),
('任务完成率', '已验收任务数占总任务数的比例', 'count(verified_tasks) / count(total_tasks) * 100', 'store_task', '', '运营部', '门店/公司', 80, 60, '2026-04-01')
ON CONFLICT (indicator_name) DO NOTHING;
-- 门店主数据(从现有视图提取)
INSERT INTO analytics.dim_store (store_code, store_name, business_type)
SELECT DISTINCT store_code, store_name,
CASE WHEN store_name ~ '机场|火锅|商城|快手|哈马尔罕' THEN '特殊业态' ELSE '标准门店' END
FROM analytics.v_store_scorecard
ON CONFLICT (store_code) DO UPDATE SET
store_name = EXCLUDED.store_name,
business_type = EXCLUDED.business_type;