# dws_assistant_monthly_summary 助教月度业绩汇总表

> 生成时间：2026-02-03

## 表信息

| 属性 | 值 |
|------|-----|
| Schema | dws |
| 表名 | dws_assistant_monthly_summary |
| 主键 | id |
| 唯一键 | (site_id, assistant_id, stat_month) |
| 数据来源 | dws_assistant_daily_detail 聚合 + cfg_performance_tier |
| 更新频率 | 每日更新当月数据 |
| 说明 | 以"助教+月份"为粒度，汇总月度业绩及档位计算 |

## 字段说明

| 序号 | 字段名 | 类型 | 可空 | 说明 |
|------|--------|------|------|------|
| 1 | id | BIGSERIAL | NO | 自增主键 |
| 2 | site_id | BIGINT | NO | 门店ID |
| 3 | tenant_id | BIGINT | NO | 租户ID |
| 4 | assistant_id | BIGINT | NO | 助教ID |
| 5 | assistant_nickname | VARCHAR(50) | YES | 助教花名 |
| 6 | stat_month | DATE | NO | 统计月份（月第一天，如2026-01-01） |
| 7 | assistant_level_code | INTEGER | YES | 助教等级代码（月末时点） |
| 8 | assistant_level_name | VARCHAR(20) | YES | 助教等级名称 |
| 9 | hire_date | DATE | YES | 入职日期 |
| 10 | is_new_hire | BOOLEAN | NO | 是否新入职（入职日期 >= 月1日0点） |
| 11 | work_days | INTEGER | NO | 有服务天数 |
| 12 | total_service_count | INTEGER | NO | 总服务次数 |
| 13 | base_service_count | INTEGER | NO | 基础课服务次数 |
| 14 | bonus_service_count | INTEGER | NO | 附加课服务次数 |
| 15 | room_service_count | INTEGER | NO | 包厢课服务次数 |
| 16 | total_hours | NUMERIC(10,2) | NO | 总计费小时数 |
| 17 | base_hours | NUMERIC(10,2) | NO | 基础课小时数 |
| 18 | bonus_hours | NUMERIC(10,2) | NO | 附加课小时数 |
| 19 | room_hours | NUMERIC(10,2) | NO | 包厢课小时数 |
| 20 | effective_hours | NUMERIC(10,2) | NO | 有效业绩小时数（影响档位）= total_hours - trashed_hours |
| 21 | trashed_hours | NUMERIC(10,2) | NO | 被废除小时数 |
| 22 | total_ledger_amount | NUMERIC(12,2) | NO | 总计费金额 |
| 23 | base_ledger_amount | NUMERIC(12,2) | NO | 基础课计费金额 |
| 24 | bonus_ledger_amount | NUMERIC(12,2) | NO | 附加课计费金额 |
| 25 | room_ledger_amount | NUMERIC(12,2) | NO | 包厢课计费金额 |
| 26 | unique_customers | INTEGER | NO | 月度服务客户数（去重） |
| 27 | unique_tables | INTEGER | NO | 月度服务台桌数（去重） |
| 28 | avg_service_seconds | NUMERIC(10,2) | NO | 平均单次服务时长（秒） |
| 29 | tier_id | INTEGER | YES | 匹配的档位ID |
| 30 | tier_code | VARCHAR(20) | YES | 档位代码（如T0-T4） |
| 31 | tier_name | VARCHAR(50) | YES | 档位名称 |
| 32 | rank_by_hours | INTEGER | YES | 月度排名（按effective_hours降序） |
| 33 | rank_with_ties | INTEGER | YES | 考虑并列的排名 |
| 34 | created_at | TIMESTAMPTZ | NO | 创建时间 |
| 35 | updated_at | TIMESTAMPTZ | NO | 更新时间 |

## 数据来源

### 从日度明细聚合
```sql
SELECT 
    site_id,
    tenant_id,
    assistant_id,
    DATE_TRUNC('month', stat_date)::DATE AS stat_month,
    COUNT(DISTINCT stat_date) AS work_days,
    SUM(total_service_count) AS total_service_count,
    SUM(base_service_count) AS base_service_count,
    SUM(bonus_service_count) AS bonus_service_count,
    SUM(room_service_count) AS room_service_count,
    SUM(total_hours) AS total_hours,
    SUM(base_hours) AS base_hours,
    SUM(bonus_hours) AS bonus_hours,
    SUM(room_hours) AS room_hours,
    SUM(trashed_seconds) / 3600.0 AS trashed_hours
FROM dws.dws_assistant_daily_detail
GROUP BY site_id, tenant_id, assistant_id, DATE_TRUNC('month', stat_date);
```

### 月度客户/台桌去重（从DWD直接去重）
```sql
SELECT
    site_assistant_id AS assistant_id,
    DATE_TRUNC('month', start_use_time)::DATE AS stat_month,
    COUNT(DISTINCT CASE WHEN tenant_member_id > 0 THEN tenant_member_id END) AS unique_customers,
    COUNT(DISTINCT site_table_id) AS unique_tables
FROM dwd.dwd_assistant_service_log
WHERE is_delete = 0
GROUP BY site_assistant_id, DATE_TRUNC('month', start_use_time);
```

### 档位匹配
```sql
-- 根据有效业绩匹配档位
SELECT * FROM dws.cfg_performance_tier
WHERE min_hours <= :effective_hours
  AND (max_hours IS NULL OR max_hours > :effective_hours)
  AND effective_from <= :stat_month
  AND effective_to >= :stat_month
LIMIT 1;
```

## 使用说明

**新入职判断**
- 入职日期 >= 统计月1日0点 则为新入职
- 2026-03-01起：新入职定档按日均×30；入职日期>25日时最高2档（T2）

**排名计算**
```sql
-- rank_with_ties: 并列排名（如2个第一则都是1，下一个是3）
SELECT 
    assistant_id,
    effective_hours,
    RANK() OVER (ORDER BY effective_hours DESC) AS rank_with_ties
FROM dws.dws_assistant_monthly_summary
WHERE stat_month = '2026-01-01';
```

## 可回溯性

| 项目 | 说明 |
|------|------|
| 可回溯 | ✅ 完全可回溯 |
| 数据范围 | 2025年8月起（需要完整月数据） |
| 依赖表 | dws_assistant_daily_detail, dwd_assistant_service_log, cfg_performance_tier, dim_assistant |
