diff --git a/project_bitable_common.py b/project_bitable_common.py index a97592a..694f0b6 100644 --- a/project_bitable_common.py +++ b/project_bitable_common.py @@ -40,7 +40,6 @@ METRIC_CONFIGS = { field_suffix="总销售额", sql_template=""" SET TIMEZONE = 'Asia/Shanghai'; - WITH base_data AS ( SELECT f.支付时间::DATE AS 统计日期, @@ -48,7 +47,7 @@ WITH base_data AS ( s.店铺名称 AS 原始店铺名称, p.品牌名称, f.业务模式, - f.实付分摊金额 AS 指标金额 + f.实付分摊金额 FROM analytics_layer.fact_sales f LEFT JOIN analytics_layer.dim_shop s ON f.店铺主键 = s.店铺主键 @@ -65,6 +64,7 @@ brand_split AS ( 原始店铺名称, 业务模式, CASE + WHEN 店铺主键 IN (1,28,29) AND 品牌名称 LIKE '羽心堂' THEN 原始店铺名称 || '_羽心堂' WHEN 店铺主键 IN (1,28,29) AND 品牌名称 LIKE '春回盏' @@ -77,32 +77,38 @@ brand_split AS ( THEN 原始店铺名称 || '_BROKEN ZOO' WHEN 店铺主键 IN (1,28,29) THEN 原始店铺名称 || '_其他' + WHEN 店铺主键 IN (3,9) AND 品牌名称 LIKE '羽心堂' THEN 原始店铺名称 || '_羽心堂' WHEN 店铺主键 IN (3,9) AND 品牌名称 LIKE 'Mama Mujer' THEN 原始店铺名称 || '_Mama Mujer' WHEN 店铺主键 IN (3,9) THEN 原始店铺名称 || '_其他' + WHEN 店铺主键 IS NULL OR 原始店铺名称 IS NULL THEN '分销/SEEDING' + ELSE 原始店铺名称 + END AS 店铺名称, - 指标金额 + 实付分摊金额 FROM base_data ), + shop_brand_detail AS ( SELECT 统计日期, 店铺主键, 店铺名称, - SUM(指标金额) AS 指标值 + SUM(实付分摊金额) AS 总销售额 FROM brand_split GROUP BY 1,2,3 ) + SELECT 统计日期, 店铺名称, - 指标值 + 总销售额 FROM shop_brand_detail WHERE NOT ( 店铺主键 IN (1,9,28,29) @@ -111,29 +117,28 @@ WHERE NOT ( UNION ALL +-- 店铺合计(使用 dim_shop 店铺名) SELECT 统计日期, 原始店铺名称 AS 店铺名称, - SUM(指标金额) + SUM(实付分摊金额) FROM base_data WHERE 店铺主键 IN (1,28,29,3) GROUP BY 1,2 UNION ALL +-- 权益金(充值购物金单独统计) SELECT 统计日期, - CASE - WHEN 业务模式 IN ('三方结算','三方分销') - THEN 原始店铺名称 || '_三方' - ELSE 原始店铺名称 || '_自营' - END AS 店铺名称, - SUM(指标金额) + 原始店铺名称 || '_权益金' AS 店铺名称, + SUM(实付分摊金额) AS 总销售额 FROM base_data -WHERE 店铺主键 = 1 +WHERE 店铺主键 IN (5,11,14,22,26) + AND 业务模式 = '充值购物金' GROUP BY 1,2 -ORDER BY 统计日期 DESC, 指标值 DESC; +ORDER BY 统计日期 DESC, 总销售额 DESC; """, ), "refund": MetricConfig( @@ -142,14 +147,14 @@ ORDER BY 统计日期 DESC, 指标值 DESC; field_suffix="退款额", sql_template=""" SET TIMEZONE = 'Asia/Shanghai'; - WITH base_data AS ( SELECT f.完结时间::DATE AS 统计日期, f.店铺主键, + f.平台订单号, s.店铺名称 AS 原始店铺名称, p.品牌名称, - f.退款金额 AS 指标金额 + f.退款金额 FROM analytics_layer.fact_returns f LEFT JOIN analytics_layer.dim_shop s ON f.店铺主键 = s.店铺主键 @@ -159,12 +164,20 @@ WITH base_data AS ( WHERE f.完结时间 >= %(start_ts)s AND f.完结时间 < %(end_ts_exclusive)s ), + +recharge_orders AS ( + SELECT DISTINCT 平台订单号, 店铺主键 + FROM analytics_layer.fact_sales + WHERE 业务模式 = '充值购物金' +), + brand_split AS ( SELECT 统计日期, 店铺主键, 原始店铺名称, CASE + WHEN 店铺主键 IN (1,28,29) AND 品牌名称 LIKE '羽心堂' THEN 原始店铺名称 || '_羽心堂' WHEN 店铺主键 IN (1,28,29) AND 品牌名称 LIKE '春回盏' @@ -177,49 +190,69 @@ brand_split AS ( THEN 原始店铺名称 || '_BROKEN ZOO' WHEN 店铺主键 IN (1,28,29) THEN 原始店铺名称 || '_其他' + WHEN 店铺主键 IN (3,9) AND 品牌名称 LIKE '羽心堂' THEN 原始店铺名称 || '_羽心堂' WHEN 店铺主键 IN (3,9) AND 品牌名称 LIKE 'Mama Mujer' THEN 原始店铺名称 || '_Mama Mujer' WHEN 店铺主键 IN (3,9) THEN 原始店铺名称 || '_其他' + WHEN 店铺主键 IS NULL OR 原始店铺名称 IS NULL THEN '分销/SEEDING' + ELSE 原始店铺名称 END AS 店铺名称, - 指标金额 + 退款金额 FROM base_data ), + shop_brand_detail AS ( SELECT 统计日期, 店铺主键, 店铺名称, - SUM(指标金额) AS 指标值 + SUM(退款金额) AS 总退款金额 FROM brand_split GROUP BY 1,2,3 ) + SELECT 统计日期, 店铺名称, - 指标值 + 总退款金额 FROM shop_brand_detail WHERE NOT ( - 店铺主键 IN (1,9,28,29) + 店铺主键 IN (1,9,28,29) AND 店铺名称 LIKE '%%_其他' ) UNION ALL +-- 店铺合计 SELECT 统计日期, 原始店铺名称 AS 店铺名称, - SUM(指标金额) + SUM(退款金额) AS 总退款金额 FROM base_data WHERE 店铺主键 IN (1,28,29,3) GROUP BY 1,2 -ORDER BY 统计日期 DESC, 指标值 DESC; +UNION ALL + +-- 权益金退款 +SELECT + r.统计日期, + r.原始店铺名称 || '_权益金' AS 店铺名称, + SUM(r.退款金额) AS 总退款金额 +FROM base_data r +JOIN recharge_orders ro + ON r.平台订单号 = ro.平台订单号 + AND r.店铺主键 = ro.店铺主键 +WHERE r.店铺主键 IN (5,11,14,22,26) +GROUP BY 1,2 + +ORDER BY 统计日期 DESC, 总退款金额 DESC; """, ), }