# DWS 汇总层口径定义

本文档定义 `dws` 模式下各汇总指标的业务口径、计算规则和数据来源。
所有指标均基于 DWD 明细层数据聚合生成。

> 各任务的详细实现（数据来源表、输出字段、核心逻辑）请参阅 [dws_tasks.md](../etl_tasks/dws_tasks.md)。

---

## 1. 助教业绩

### 1.1 助教日报（dws_assistant_daily_detail）

- 目标表：`dws.dws_assistant_daily_detail`
- 数据来源：`dwd_assistant_service_log`、`dwd_assistant_service_log_ex`（提供 `is_trash` 标记）、`dim_assistant`（SCD2）
- 粒度：门店 × 助教 × 日期
- 核心指标：服务次数（总/基础课/附加课/包厢课）、计费秒数与小时数、台账金额、去重客户数与台桌数、废除统计
- 课程类型分类：通过 `cfg_skill_type` 映射 `skill_id` → `BASE`/`BONUS`/`ROOM`
- 助教等级：SCD2 as-of 取值，取统计日当日生效的等级版本

### 1.2 助教月报（dws_assistant_monthly_summary）

- 目标表：`dws.dws_assistant_monthly_summary`
- 数据来源：`dws_assistant_daily_detail` 聚合 + `dwd_assistant_service_log`（月度去重）+ `dim_assistant` + `cfg_performance_tier`
- 粒度：门店 × 助教 × 年月
- 核心指标：月度累计服务次数/时长/金额、有效业绩小时数（`total_hours - trashed_hours`）、绩效档位匹配、排名（考虑并列）
- 新入职判断：入职日期在当月 1 日后即视为新入职，档位匹配按日均折算 30 天
- 月度去重客户/台桌：从 DWD 直接去重，避免日度求和失真

### 1.3 助教客户统计（dws_assistant_customer_stats）

- 目标表：`dws.dws_assistant_customer_stats`
- 数据来源：`dwd_assistant_service_log`、`dim_member`、`dim_assistant`
- 粒度：门店 × 助教 × 会员
- 核心指标：全量累计（首次/最近服务日期、累计次数/时长/金额）、6 个滚动窗口（7/10/15/30/60/90 天）、活跃度判定
- 散客排除：`member_id` 为 0 或 None 不进入统计
- HAVING 过滤：仅保留最近 90 天内有服务记录的助教-客户对

### 1.4 助教财务分析（dws_assistant_finance_analysis）

- 目标表：`dws.dws_assistant_finance_analysis`
- 数据来源：`dwd_assistant_service_log`、`cfg_skill_type`、`dws_assistant_salary_calc`、`dws_assistant_daily_detail`
- 粒度：门店 × 助教 × 日期
- 核心指标：日度收入（总/基础课/附加课/包厢课）、日均成本（`gross_salary / work_days`）、毛利润与毛利率
- 依赖：`DWS_ASSISTANT_SALARY` 和 `DWS_ASSISTANT_DAILY` 的输出

### 1.5 助教订单流水贡献（dws_assistant_order_contribution）

- 目标表：`dws.dws_assistant_order_contribution`
- 数据来源：`dwd_settlement_head`、`dwd_table_fee_log`、`dwd_assistant_service_log`
- 粒度：门店 × 助教 × 日期
- 核心指标（四项统计）：
  - `order_gross_revenue`：订单总流水（台费 + 酒水食品 + 所有助教服务费）
  - `order_net_revenue`：订单净流水（总流水 - 所有助教服务分成）
  - `time_weighted_revenue`：时效贡献流水（按服务时长占比分摊）
  - `time_weighted_net_revenue`：时效净贡献（时效贡献 - 个人服务分成）
- 超休/打赏课特殊处理：`course_type = BONUS` 的助教不参与订单级分摊
- 依赖：`DWD_LOAD_FROM_ODS`

---

## 2. 薪酬计算

### 2.1 助教薪酬（dws_assistant_salary_calc）

- 目标表：`dws.dws_assistant_salary_calc`
- 数据来源：`dws_assistant_monthly_summary`、`dws_assistant_recharge_commission`、`cfg_performance_tier`、`cfg_assistant_level_price`、`cfg_bonus_rules`
- 粒度：门店 × 助教 × 结算月份
- 核心公式：
  - 应发工资 = 课时收入 + 奖金合计
  - 基础课收入 = `base_hours × (base_course_price - base_deduction)`
  - 附加课收入 = `bonus_hours × bonus_course_price × (1 - bonus_deduction_ratio)`
  - 包厢课收入 = `room_hours × (room_course_price - base_deduction)`
  - 奖金合计 = 冲刺奖金 + Top3 排名奖金 + 充值提成 + 其他奖金
- 等级定价：SCD2 按月份取历史生效值
- 运行调度：默认仅月初前 5 天运行

---

## 3. 财务日报

### 3.1 财务日报汇总（dws_finance_daily_summary）

- 目标表：`dws.dws_finance_daily_summary`
- 数据来源：`dwd_settlement_head`、`dwd_groupbuy_redemption`、`dwd_recharge_order`、`dwd_member_balance_change`
- 粒度：门店 × 日期
- 核心指标：发生额（正价）、优惠合计（团购/会员/赠送卡/手动/抹零）、确认收入、现金流入/流出/净变动、卡消费、充值统计（首充/续充）、订单统计
- 确认收入 = 发生额 - 优惠合计
- 金额字段统一 `NUMERIC(12,2)`，货币单位人民币（CNY）

### 3.2 收入结构（dws_finance_income_structure）

- 目标表：`dws.dws_finance_income_structure`
- 数据来源：`dwd_settlement_head`、`dwd_table_fee_log`、`dwd_assistant_service_log`、`dim_table`、`cfg_area_category`
- 粒度：门店 × 日期 × 结构类型 × 分类代码
- 两种分析维度：按收入类型（`INCOME_TYPE`：台费/商品/助教基础课/助教附加课）、按区域（`AREA`：通过 `cfg_area_category` 映射）

### 3.3 折扣明细（dws_finance_discount_detail）

- 目标表：`dws.dws_finance_discount_detail`
- 数据来源：`dwd_settlement_head`、`dwd_groupbuy_redemption`、`dwd_member_balance_change`
- 粒度：门店 × 日期 × 折扣类型
- 折扣类型：`GROUPBUY`/`VIP`/`ROUNDING`/`GIFT_CARD_TABLE`/`GIFT_CARD_DRINK`/`GIFT_CARD_COUPON`/`BIG_CUSTOMER`/`OTHER`

### 3.4 充值汇总（dws_finance_recharge_summary）

- 目标表：`dws.dws_finance_recharge_summary`
- 数据来源：`dwd_recharge_order`、`dim_member_card_account`
- 粒度：门店 × 日期
- 核心指标：充值笔数/总额（现金+赠送）、首充/续充拆分、去重会员数、全店卡余额快照

---

## 4. 会员分析

### 4.1 会员消费汇总（dws_member_consumption_summary）

- 目标表：`dws.dws_member_consumption_summary`
- 数据来源：`dwd_settlement_head`、`dim_member`（SCD2）、`dim_member_card_account`（SCD2）
- 粒度：门店 × 会员
- 核心指标：全量累计消费、6 个滚动窗口（7/10/15/30/60/90 天）的到店次数与消费金额、卡余额（现金卡/赠送卡）、活跃度、客户分层
- 客户分层规则：高价值（90 天 ≥ 3 次且 ≥ 1000 元）→ 中等（30 天内有消费）→ 低活跃（90 天内有但 30 天内无）→ 流失
- 散客排除：`member_id` 为 0 或 None 不进入统计

### 4.2 会员到访明细（dws_member_visit_detail）

- 目标表：`dws.dws_member_visit_detail`
- 数据来源：`dwd_settlement_head`、`dwd_assistant_service_log`、`dwd_table_fee_log`、`dim_member`、`dim_table`、`cfg_area_category`
- 粒度：门店 × 会员 × 结账单
- 核心指标：消费金额拆分（台费/商品/助教）、支付方式拆分（现金/储值卡/赠送卡/团购券）、台桌使用时长、助教服务明细（JSON）

---

## 5. 订单汇总

### 5.1 订单汇总宽表（dws_order_summary）

- 目标表：`dws.dws_order_summary`
- 数据来源：`dwd_settlement_head`、`dwd_table_fee_log`、`dwd_assistant_service_log`、`dwd_store_goods_sale`、`dwd_groupbuy_redemption`、`dwd_refund`/`dwd_refund_ex`
- 粒度：门店 × 结账单
- 核心指标：费用明细（台费/助教/商品/团购）、优惠、金额汇总、支付方式、台账流水、有效消费、退款与净收入
- 通过 6 个 CTE 多表合并，金额优先取明细表聚合值，回退到结账单头表汇总字段

---

## 6. 库存汇总

### 6.1 库存日度汇总（dws_goods_stock_daily_summary）

- 目标表：`dws.dws_goods_stock_daily_summary`
- 数据来源：`dwd_goods_stock_summary`
- 粒度：门店 × 日期 × 商品
- 更新策略：upsert（ON CONFLICT DO UPDATE）
- 核心逻辑：按 `fetched_at` 日期分组，数值指标取 SUM，期初/期末取当日首/末条记录

### 6.2 库存周度汇总（dws_goods_stock_weekly_summary）

- 目标表：`dws.dws_goods_stock_weekly_summary`
- 数据来源：`dwd_goods_stock_summary`
- 粒度：门店 × ISO 周 × 商品
- 更新策略：upsert（ON CONFLICT DO UPDATE）
- 核心逻辑：按 ISO 周分组，`stat_date` = 该周周一

### 6.3 库存月度汇总（dws_goods_stock_monthly_summary）

- 目标表：`dws.dws_goods_stock_monthly_summary`
- 数据来源：`dwd_goods_stock_summary`
- 粒度：门店 × 自然月 × 商品
- 更新策略：upsert（ON CONFLICT DO UPDATE）
- 核心逻辑：按自然月分组，`stat_date` = 该月第一天

---

## 7. 自定义指数算法

指数算法的详细计算流程、参数与归一化方法请参阅 [index_tasks.md](../etl_tasks/index_tasks.md)。

以下为各指数对应的汇总表概览：

### 7.1 回流指数 — WBI（dws_member_winback_index）

- 目标表：`dws.dws_member_winback_index`
- 粒度：门店 × 会员
- 任务代码：`DWS_WINBACK_INDEX`
- 依赖：`DWS_MEMBER_VISIT`、`DWS_MEMBER_CONSUMPTION`

### 7.2 新客转化指数 — NCI（dws_member_newconv_index）

- 目标表：`dws.dws_member_newconv_index`
- 粒度：门店 × 会员
- 任务代码：`DWS_NEWCONV_INDEX`
- 依赖：`DWS_MEMBER_VISIT`、`DWS_MEMBER_CONSUMPTION`

### 7.3 关系指数 — RS（dws_member_assistant_relation_index）

- 目标表：`dws.dws_relation_index`
- 粒度：门店 × 会员 × 助教
- 任务代码：`DWS_RELATION_INDEX`
- 依赖：`DWS_ASSISTANT_DAILY`

### 7.4 消费力指数 — SPI（dws_member_spending_power_index）

- 目标表：`dws.dws_member_spending_power_index`
- 粒度：门店 × 会员
- 任务代码：`DWS_SPENDING_POWER_INDEX`
- 依赖：`DWS_MEMBER_CONSUMPTION`

### 7.5 人工台账 — ML（dws_ml_manual_order_source / dws_ml_manual_order_alloc）

- 宽表：`dws.dws_ml_manual_order_source`
- 窄表：`dws.dws_ml_manual_order_alloc`
- 粒度：门店 × 订单 × 助教
- 任务代码：`DWS_ML_MANUAL_IMPORT`

### 7.6 指数百分位历史（dws_index_percentile_history）

- 目标表：`dws.dws_index_percentile_history`
- 粒度：门店 × 指数类型 × 日期

---

## 维护约定

- 新增或修改 DWS 指标时，须同步更新本文档对应章节
- 计算公式应包含：输入字段、聚合方式、过滤条件、精度/舍入规则
- 金额字段统一 `NUMERIC(12,2)`，货币单位人民币（CNY）
