# dwd_member_balance_change 会员余额变动主表

> 生成时间：2026-01-28

## 表信息

| 属性 | 值 |
|------|-----|
| Schema | billiards_dwd |
| 表名 | dwd_member_balance_change |
| 主键 | balance_change_id |
| 扩展表 | dwd_member_balance_change_ex |
| 记录数 | 4745 |
| 说明 | 会员卡余额变动流水事实表，记录每次余额变动的金额和原因 |

## 字段说明

| 序号 | 字段名 | 类型 | 可空 | 主键 | 说明 |
|------|--------|------|------|------|------|
| 1 | balance_change_id | BIGINT | NO | PK | 变动流水 ID |
| 2 | tenant_id | BIGINT | YES | | 租户 ID |
| 3 | site_id | BIGINT | YES | | 门店 ID |
| 4 | register_site_id | BIGINT | YES | | 注册门店 ID |
| 5 | tenant_member_id | BIGINT | YES | | 会员 ID → dim_member |
| 6 | system_member_id | BIGINT | YES | | 系统会员 ID |
| 7 | tenant_member_card_id | BIGINT | YES | | 会员卡 ID → dim_member_card_account |
| 8 | card_type_id | BIGINT | YES | | 卡类型 ID |
| 9 | card_type_name | VARCHAR | YES | | 卡类型名称。**枚举值**: "储值卡", "活动抵用券", "台费卡", "酒水卡", "年卡", "月卡" |
| 10 | member_name | VARCHAR | YES | | 会员名称快照 |
| 11 | member_mobile | VARCHAR | YES | | 会员手机号快照 |
| 12 | balance_before | NUMERIC(18,2) | YES | | 变动前余额 |
| 13 | change_amount | NUMERIC(18,2) | YES | | 变动金额（正=充值/赠送，负=消费） |
| 14 | balance_after | NUMERIC(18,2) | YES | | 变动后余额 |
| 15 | from_type | INTEGER | YES | | 变动来源。**枚举值**: 1=结账/消费, 2=结账撤销, 3=现付充值, 4=活动赠送, 7=充值撤销/退款, 9=手动调整 |
| 16 | payment_method | INTEGER | YES | | 支付方式，暂未启用。 |
| 17 | change_time | TIMESTAMPTZ | YES | | 变动时间 |
| 18 | is_delete | INTEGER | YES | | 删除标记 |
| 19 | remark | VARCHAR | YES | | 备注。**样本值**: "注销会员", "充值退款" 等 |

## 卡类型余额变动分布

| 卡类型 | 变动次数 | 说明 |
|--------|----------|------|
| 储值卡 | 2825 | 最主要的消费卡种 |
| 活动抵用券 | 1275 | 营销活动赠送 |
| 台费卡 | 482 | 台费专用卡 |
| 酒水卡 | 149 | 酒水专用卡 |

## 样本数据

| member_name | card_type_name | balance_before | change_amount | balance_after | from_type |
|-------------|----------------|----------------|---------------|---------------|-----------|
| 曾丹烨 | 储值卡 | 816.30 | -120.00 | 696.30 | 1 |
| 葛先生 | 储值卡 | 6745.27 | -144.00 | 6601.27 | 1 |
| 陈腾鑫 | 储值卡 | 293.20 | -114.61 | 178.59 | 1 |
| 轩哥 | 酒水卡 | 532.00 | -41.00 | 491.00 | 1 |

## 使用说明

**版本与最新值**
本表为事实表，无 SCD2 版本字段。

- 可用时间字段：change_time

```sql
-- 取最新一条（按时间字段倒序）
SELECT *
FROM billiards_dwd.dwd_member_balance_change
ORDER BY change_time DESC NULLS LAST
LIMIT 1;
```
**使用示例**
```sql
-- 会员消费总额排行
SELECT 
  member_name,
  member_mobile,
  card_type_name,
  SUM(CASE WHEN change_amount < 0 THEN ABS(change_amount) ELSE 0 END) AS total_consume
FROM billiards_dwd.dwd_member_balance_change
WHERE is_delete = 0
GROUP BY member_name, member_mobile, card_type_name
ORDER BY total_consume DESC;
```
