feat(etl): app2a DWS 增加 member_order_count 聚合 + 修复 area 未匹配订单 all 兜底
1. finance_area_daily.py: - _AREA_AGG_FIELDS 增加 member_order_count · _COUNT_FIELDS 常量统一 int 转换 - extract SQL 增加 sh.member_id 字段 - transform 按 CLAUDE.md DWS 规范 member_id > 0 判定是否会员订单 - _build_area_row / _build_sum_row 支持新计数字段 2. pre-existing bug 修复(顺手): area_code 为 None(table_id 未映射)的订单之前既不计入具体区域也不计入 all, 导致全店 order_count/member_order_count > 各区域之和。 修复:新增 _unknown 桶收纳未匹配订单 · 构建 all 行时追加合入 source_rows。 3. backfill_finance_area_daily.py extract SQL 加 sh.member_id 支持回填历史 member_order_count 数据。 实测:纯函数单测 + 测试库 ETL 7 天回放 · 04-18/04-20 等日期全店 vs 区域和 从差 1 单修复为 0 差异 · 纯函数新增 2 条未匹配订单用例断言全通过。 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -101,7 +101,11 @@ _calc_period_date_range = _fbc_mod._calc_period_date_range
|
||||
def extract_settlement_with_area(
|
||||
conn, site_id: int, stat_date: date, cutoff_hour: int = 8
|
||||
) -> list[dict]:
|
||||
"""从 dwd_settlement_head + dim_table 提取单日结算单(含区域名称)。"""
|
||||
"""从 dwd_settlement_head + dim_table 提取单日结算单(含区域名称 + 会员标识)。
|
||||
|
||||
CHANGE 2026-04-23 | 新增 sh.member_id 字段以支持 member_order_count 列回填
|
||||
(散客 member_id ≤ 0 判定,详见 CLAUDE.md DWS 规范)
|
||||
"""
|
||||
biz_expr = biz_date_sql_expr("sh.pay_time", cutoff_hour)
|
||||
sql = f"""
|
||||
SELECT
|
||||
@@ -120,7 +124,8 @@ def extract_settlement_with_area(
|
||||
sh.adjust_amount,
|
||||
sh.member_discount_amount,
|
||||
sh.rounding_amount,
|
||||
sh.gift_card_amount
|
||||
sh.gift_card_amount,
|
||||
sh.member_id
|
||||
FROM dwd.dwd_settlement_head sh
|
||||
LEFT JOIN dwd.dim_table dt
|
||||
ON dt.table_id = sh.table_id
|
||||
|
||||
Reference in New Issue
Block a user