# dws_member_consumption_summary 会员消费汇总表

> 生成时间：2026-02-03 | 更新时间：2026-02-13

## 表信息

| 属性 | 值 |
|------|-----|
| Schema | dws |
| 表名 | dws_member_consumption_summary |
| 主键 | id |
| 唯一键 | (site_id, member_id, stat_date) |
| 数据来源 | dwd_settlement_head + 关联明细表 |
| 更新频率 | 每日更新 |
| 说明 | 以"会员"为粒度，统计消费行为和滚动窗口指标 |

## 字段说明

| 序号 | 字段名 | 类型 | 可空 | 说明 |
|------|--------|------|------|------|
| 1 | id | BIGSERIAL | NO | 自增主键 |
| 2 | site_id | BIGINT | NO | 门店ID |
| 3 | tenant_id | BIGINT | NO | 租户ID |
| 4 | member_id | BIGINT | NO | 会员ID（member_id=0散客不入此表） |
| 5 | stat_date | DATE | NO | 统计基准日期 |
| 6 | member_nickname | VARCHAR(100) | YES | 会员昵称 |
| 7 | member_mobile | VARCHAR(20) | YES | 手机号（脱敏） |
| 8 | card_grade_name | VARCHAR(50) | YES | 卡等级名称 |
| 9 | register_date | DATE | YES | 注册日期 |
| 10 | first_consume_date | DATE | YES | 首次消费日期 |
| 11 | last_consume_date | DATE | YES | 最近消费日期 |
| 12 | total_visit_count | INTEGER | NO | 累计到店次数 |
| 13 | total_consume_amount | NUMERIC(14,2) | NO | 累计消费金额（基于 `items_sum` 口径，见下方说明） |
| 14 | total_recharge_amount | NUMERIC(14,2) | NO | 累计充值金额（来源：`dim_member.recharge_money_sum`，上游 API 同步值） |
| 15 | total_table_fee | NUMERIC(14,2) | NO | 累计台费（`table_charge_money`） |
| 16 | total_goods_amount | NUMERIC(14,2) | NO | 累计商品消费（`goods_money`） |
| 17 | total_assistant_amount | NUMERIC(14,2) | NO | 累计助教服务消费（= `assistant_pd_money` + `assistant_cx_money`） |
| 18-23 | visit_count_7d/10d/15d/30d/60d/90d | INTEGER | NO | 近N天到店次数 |
| 24-29 | consume_amount_7d/10d/15d/30d/60d/90d | NUMERIC(14,2) | NO | 近N天消费金额 |
| 30-32 | recharge_count_30d/60d/90d | INTEGER | NO | 近N天充值笔数（来源：dwd_recharge_order） |
| 33-35 | recharge_amount_30d/60d/90d | NUMERIC(14,2) | NO | 近N天充值金额（仅 `pay_amount` 现金部分，不含 `point_amount` 赠送，来源：dwd_recharge_order） |
| 36 | avg_ticket_amount | NUMERIC(14,2) | NO | 次均消费（= total_consume_amount / MAX(total_visit_count, 1)） |
| 37 | cash_card_balance | NUMERIC(14,2) | NO | 储值卡余额 |
| 38 | gift_card_balance | NUMERIC(14,2) | NO | 赠送卡余额 |
| 39 | total_card_balance | NUMERIC(14,2) | NO | 总卡余额 |
| 40 | days_since_last | INTEGER | YES | 距离最近消费的天数 |
| 41 | is_active_7d | BOOLEAN | NO | 近7天是否活跃 |
| 42 | is_active_30d | BOOLEAN | NO | 近30天是否活跃 |
| 43 | is_active_90d | BOOLEAN | NO | 近90天是否活跃 |
| 44 | customer_tier | VARCHAR(20) | YES | 客户分层（高价值/中等/低活跃/流失） |
| 45 | created_at | TIMESTAMPTZ | NO | 创建时间 |
| 46 | updated_at | TIMESTAMPTZ | NO | 更新时间 |

## 数据来源

### 消费统计来源：dwd_settlement_head

> ⚠️ **consume_money 口径警告**：`consume_money` 在不同时期存在三种口径（A/B/C），DWS 层不应直接使用。
> 应使用 `items_sum = table_charge_money + goods_money + assistant_pd_money + assistant_cx_money + electricity_money` 作为全时期一致的消费项目合计。
> 详见 [consume_money 口径详解](../../../../docs/reports/DWD-DOC/consume/consume-money-caliber.md)。

```sql
SELECT 
    site_id,
    member_id,
    DATE(pay_time) AS consume_date,
    COUNT(*) AS visit_count,
    -- ✅ 使用 items_sum 口径（全时期一致），不使用 consume_money
    SUM(table_charge_money + goods_money + assistant_pd_money
        + assistant_cx_money + electricity_money) AS consume_amount,
    SUM(table_charge_money) AS table_fee,
    SUM(goods_money) AS goods_amount,
    SUM(assistant_pd_money + assistant_cx_money) AS assistant_amount
FROM dwd.dwd_settlement_head
WHERE member_id != 0  -- 排除散客
  AND settle_type IN (1, 3)  -- 已结账订单（台桌结账 + 快捷结账）
GROUP BY site_id, member_id, DATE(pay_time);
```

### 卡余额来源：dim_member_card_account
```sql
SELECT 
    tenant_member_id AS member_id,
    SUM(CASE WHEN card_type_id = 2793249295533893 THEN balance ELSE 0 END) AS cash_card_balance,
    SUM(CASE WHEN card_type_id != 2793249295533893 THEN balance ELSE 0 END) AS gift_card_balance
FROM dwd.dim_member_card_account
WHERE scd2_is_current = 1
GROUP BY tenant_member_id;
```

## 使用说明

**散客处理**
- member_id=0 的散客不进入此表统计

**客户分层规则**
```python
# 基于 90 天消费次数+金额组合判断（代码实际逻辑）
if visit_count_90d >= 3 and consume_amount_90d >= 1000:
    customer_tier = '高价值'
elif visit_count_30d > 0:
    customer_tier = '中等'
elif visit_count_90d > 0:
    customer_tier = '低活跃'
else:
    customer_tier = '流失'
```

**金额口径说明**
- `total_consume_amount` 及各滚动窗口 `consume_amount_*d` 均基于 `items_sum` 口径
- `items_sum = table_charge_money + goods_money + assistant_pd_money + assistant_cx_money + electricity_money`
- `total_assistant_amount` = `assistant_pd_money`（陪打）+ `assistant_cx_money`（超休），不使用笼统的 `service_fee`

## 可回溯性

| 项目 | 说明 |
|------|------|
| 可回溯 | ✅ 完全可回溯 |
| 数据范围 | 2025-07-16 ~ 至今 |
| 依赖表 | dwd_settlement_head, dwd_recharge_order, dim_member, dim_member_card_account |
