feat: 连锁餐饮数字本体与AI经营智脑 - 新增分析页面、ETL脚本、总结文档
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
-- ============================================================
|
||||
-- 门店月度目标表 ETL
|
||||
-- 基于历史实际收入自动生成基准目标
|
||||
-- 策略:用最近完整月份的实际收入作为下月目标基准,按区域增长率微调
|
||||
-- ============================================================
|
||||
|
||||
-- 1. 创建目标表(如果不存在)
|
||||
CREATE TABLE IF NOT EXISTS analytics.dim_store_target (
|
||||
id SERIAL PRIMARY KEY,
|
||||
store_code VARCHAR(20) NOT NULL,
|
||||
target_month DATE NOT NULL,
|
||||
revenue_target NUMERIC(12,2) NOT NULL,
|
||||
bill_count_target INTEGER,
|
||||
avg_bill_value_target NUMERIC(8,2),
|
||||
member_penetration_target NUMERIC(5,2), -- 百分比
|
||||
cost_rate_target NUMERIC(5,2), -- 百分比
|
||||
created_at TIMESTAMP DEFAULT NOW(),
|
||||
updated_at TIMESTAMP DEFAULT NOW(),
|
||||
UNIQUE(store_code, target_month)
|
||||
);
|
||||
|
||||
-- 2. 生成2026-05目标(基于4月实际 × 增长系数1.03)
|
||||
INSERT INTO analytics.dim_store_target (store_code, target_month, revenue_target, bill_count_target, avg_bill_value_target, member_penetration_target, cost_rate_target)
|
||||
SELECT
|
||||
r.store_code,
|
||||
'2026-05-01'::date,
|
||||
round(r.received * 1.03, 2) as revenue_target,
|
||||
round(r.bill_count * 1.03) as bill_count_target,
|
||||
round(r.avg_bill_value, 2) as avg_bill_value_target,
|
||||
round(r.member_bill_share_pct, 2) as member_penetration_target,
|
||||
30.00 as cost_rate_target
|
||||
FROM analytics.mv_store_risk_rating_monthly r
|
||||
WHERE r.month_start = '2026-04-01'
|
||||
ON CONFLICT (store_code, target_month) DO UPDATE SET
|
||||
revenue_target = EXCLUDED.revenue_target,
|
||||
bill_count_target = EXCLUDED.bill_count_target,
|
||||
avg_bill_value_target = EXCLUDED.avg_bill_value_target,
|
||||
member_penetration_target = EXCLUDED.member_penetration_target,
|
||||
cost_rate_target = EXCLUDED.cost_rate_target,
|
||||
updated_at = NOW();
|
||||
|
||||
-- 3. 生成2026-04目标(用4月实际作为回顾目标,方便展示达成率)
|
||||
INSERT INTO analytics.dim_store_target (store_code, target_month, revenue_target, bill_count_target, avg_bill_value_target, member_penetration_target, cost_rate_target)
|
||||
SELECT
|
||||
r.store_code,
|
||||
'2026-04-01'::date,
|
||||
round(r.received, 2) as revenue_target,
|
||||
r.bill_count as bill_count_target,
|
||||
round(r.avg_bill_value, 2) as avg_bill_value_target,
|
||||
round(r.member_bill_share_pct, 2) as member_penetration_target,
|
||||
30.00 as cost_rate_target
|
||||
FROM analytics.mv_store_risk_rating_monthly r
|
||||
WHERE r.month_start = '2026-04-01'
|
||||
ON CONFLICT (store_code, target_month) DO UPDATE SET
|
||||
revenue_target = EXCLUDED.revenue_target,
|
||||
bill_count_target = EXCLUDED.bill_count_target,
|
||||
avg_bill_value_target = EXCLUDED.avg_bill_value_target,
|
||||
member_penetration_target = EXCLUDED.member_penetration_target,
|
||||
cost_rate_target = EXCLUDED.cost_rate_target,
|
||||
updated_at = NOW();
|
||||
|
||||
-- 4. 验证
|
||||
SELECT '2026-04' as month, count(*) as stores, round(sum(revenue_target)::numeric, 2) as total_target
|
||||
FROM analytics.dim_store_target WHERE target_month = '2026-04-01'
|
||||
UNION ALL
|
||||
SELECT '2026-05', count(*), round(sum(revenue_target)::numeric, 2)
|
||||
FROM analytics.dim_store_target WHERE target_month = '2026-05-01';
|
||||
Reference in New Issue
Block a user