月度产品销售汇总#
读取各月产品销售明细,按产品映射表归并标准名称与类型,汇总 25/26 年同期对比并打标签,写入主数据湖。
文件说明#
| 文件 | 作用 |
|---|---|
产品汇总.py |
主程序:筛选月份 → 关联映射表 → 按 标准名称+类型 汇总同比 → 写库 |
查找未收录产品.py |
找出销售明细中未被映射表收录的产品,输出 未收录产品.csv |
9月产品映射表.xlsx |
产品名称 → 标准名称/类型 映射(每月更新) |
各月产品销售.csv |
中台导出的月度销售明细 |
query.sql |
明细导出 SQL |
输出表#
Tianlala.ads_product_monthly_summary(原 product_sales.product_summary,2026-10-13 迁入并更名),每次运行重建并补写中文列注释。
运行方式#
# 修改 产品汇总.py 顶部 START_MONTH / END_MONTH 后
python 产品汇总.py
python 查找未收录产品.py # 检查映射表是否漏配源表为 ads_dbs_trade_food_di,字段说明参见数据字典 ads_dbs_trade_food_di。
中台数据导出与本地校验#
JumpServer 有导出量限制,逐月查询导出后由本地同步脚本入库。导出 SQL:
SELECT
business_date AS 日期,
stat_shop_id AS 门店编号,
channel_name AS 渠道,
item_name AS 产品名称,
SUM(dp_total_amount) AS 流水,
SUM(dp_pay_amount) AS 实收,
SUM(dp_item_count) AS 销量
FROM ads_dbs_trade_food_di
WHERE business_date BETWEEN '20260101' AND '20260401'
GROUP BY business_date, stat_shop_id, channel_name, item_name;分别在中台与本地按月汇总流水进行校验:
-- 中台
SELECT
SUBSTR(business_date, 1, 6) AS 月份,
SUM(dp_total_amount) AS 流水
FROM ads_dbs_trade_food_di
WHERE business_date >= '20250101'
GROUP BY SUBSTR(business_date, 1, 6)
ORDER BY 月份;历史校验结果(云端 vs 本地,差额均在万元以内):
| 月份 | 云端流水 | 本地流水 | 差额 |
|---|---|---|---|
| 202501 | 254446551 | 254447609 | -1058 |
| 202502 | 221359462 | 221358803 | 659 |
| 202503 | 223620888 | 223620584 | 304 |
| 202504 | 230342129 | 230340867 | 1262 |
| 202505 | 313282515 | 313280889 | 1626 |
| 202506 | 323012777 | 323014791 | -2014 |
| 202507 | 393247571 | 393240744 | 6827 |
| 202508 | 388048696 | 388047465 | 1231 |
| 202509 | 244951228 | 244949845 | 1383 |
| 202510 | 239025739 | 239025395 | 344 |
| 202511 | 222458793 | 222459615 | -823 |
| 202512 | 199027603 | 199027524 | 78 |
| 202601 | 194985514 | 194984842 | 672 |
| 202602 | 270686437 | 270687820 | -1383 |
| 202603 | 194120854 | 194120947 | -93 |
| 202604 | 204229133 | 204228466 | 667 |
| 202605 | 241985753 | 241986275 | -522 |
| 202606 | 257155412 | 257154716 | 697 |
注意
中台会刷新前一个月的数据,同步前先删除上个月数据再重新同步;一年前的历史数据也会偶尔轻微变动。
明细导出 SQL#
SELECT
LEFT(business_date, 6) AS 月份,
item_name AS 商品名称,
SUM(dp_item_count) AS 销量,
SUM(dp_total_amount) AS 流水
FROM ads_dbs_trade_food_di
WHERE business_date >= 20250101
GROUP BY LEFT(business_date, 6), item_name
HAVING SUM(dp_item_count) > 0 OR SUM(dp_total_amount) > 0
ORDER BY 月份 ASC, 销量 DESC;