月度产品销售汇总#

读取各月产品销售明细,按产品映射表归并标准名称与类型,汇总 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;