This commit is contained in:
Neo
2026-02-04 21:39:01 +08:00
parent ee773a9b52
commit a3f4d04335
148 changed files with 31455 additions and 182 deletions

View File

@@ -5,17 +5,91 @@
本文档描述在ETL已完成的DWD层数据基础上对DWS层的数据处理
- 完成对DWS层数据库的处理即数据库设计成果为DDL的SQL语句。
- 数据读取处理到落库即DWD读取Python处理SQL写入。
- 在动手之前,先出一个任务计划文档,写明事实的具体技术方案细节。
文档更多聚焦业务描述你需要使用专业技能使用面向对象编程OOP思想完成程序设计直至代码完成
- 参考.\README.md 了解现在项目现状。
- 参考.\etl_billiards\docs\dwd_main_tables_dictionary.md 了解 DWD的schema的表和字段若与数据库有出路则以当前数据库为准。
- 参考.\etl_billiards\docs 了解 DWD的schema的表和字段。
- SQL和Python代码需要详尽的高密度的中文注释。
- 完成内容,需要详尽高密度的补充至.\README.md以方便后续维护。
- DWS的表与表的字段 参考.\etl_billiards\docs\dwd_main_tables_dictionary.md 完成类似的数据库文档,方便后续维护。
- 注意中文编码需求。
## 具体需求
### 助教视角
- 需要
## 通用需求
### 数据分层
我希望使用互联网软件的业内通用方法将数据按照更新时间分为4层以符合业务层面的查询效率速度。
- 第一层:回溯两天前到当前数据。
- 第二层回溯1个月前到当前数据。
- 第三层回溯3个月前到当前数据。
- 第四层:全量数据。
- 需要有配套的机制及时添加删除整理数据。
### 统计注意
当统计一些数据时,注意口径,数据有效性标识。举例:
- 计算助教业绩/工资时,需要参考助教废除表,相关业务数据的影响。
- 计算助教业绩/工资时,注意辨别 助教课 附加课影响。
## 业务需求
### 系统设置
- 助教新的绩效考核和工资结算方式更新为以下算法,影响工资结算和财务账务方面的统计核算,相关内容需要落库,以方便后续调整。还要标记执行时间(如哪个月执行哪个标准等),执行相关结算和计算逻辑。:
档位原因考虑 总业绩小时数阈值 专业课抽成(元/小时) 打赏课抽成 次月休假(天)
0档 淘汰压力 H <100 28 50% 3
1档 及格档(重点激励) 100≤ H <130 18 40% 4
2档 良好档(重点激励) 130≤ H <160 15 38% 4
3档 优秀档 160≤ H <190 13 35% 5
4档 卓越加速档(高端人才倾斜) 190≤ H <220 10 33% 6
5档 冠军加速档(高端人才倾斜) H ≥220 8 30% 休假自由
*课程分为2种dwd_assistant_service_log表的skill_name
基础课:又名 专业课 上桌 上钟,是为客户提供台球助教陪练的课程,按时长统计。精确到分钟。
附加课:又名 超休 激励 打赏,是客户支付较为高昂的价格,买断整小时与助教外出。
总业绩小时数阈值指基础课和附加课总和。
各级别助教dim_assistant表的level基础课对客户收费初级 98元/小时;中级 108元/小时;高级 118元/小时;星级 138元/小时;
附加课对客户收费统一为190元/小时。
充值提成:
冲刺奖 达成奖金
当月 H ≥ 190300 元
当月 H ≥ 220800 元(与上条不叠加,取高)
额外奖金:
冲刺奖 达成奖金
当月 H ≥ 190300 元
当月 H ≥ 220800 元(与上条不叠加,取高)
Top3 奖金:
第1名1000 元
第2名600 元
第3名400 元
规则:
1、过档后所有时长按新档位进行计算。
举例当前某中级助教已完成185小时基础课占170小时附加课15小时。则该月工资计算方法
170*108-13+15*1-0.35
2、本月新入职助教定档方案
按照日均*30的总业绩小时数定档。
在该25日之后入职的新助教最高定档至3档。
该折算仅用于定档不适用于“冲刺奖”和“Top3奖”的计算口径。
### 助教维度
以每个助教个体的视角
- 我要知道我的业绩档位,历史月份与本月档位进度,档位影响的收入单价。及相邻月份的变化。
- 我要知道我的有效业绩:历史月份与本月的 基础课课时,激励课课时,全部课课时。相邻月份的变化。
- 我要知道我的收入:历史月份与本月的收入(注意助教等级,业绩档位,课程种类等因素的总和计算)。相邻月份的变化。
- 我要知道我的客户情况过去7天、10天、15天、30天、60天、90天 的跨度进行统计,我服务过(基础课+附加课)的客户数据,并关联每次服务的 时间 时长 台桌 分类 等详细信息。
### 客户维度
统计每个客户的信息
- 我要知道每个客户过去7天、10天、15天、30天、60天、90天 的跨度进行统计,来店消费情况,并关联每次服务的 时间 食品饮品 时长 台桌 分类 助教服务 等详细信息。
### 财务维度
财务维度的需求(已经落到原型图需求级别了),见财务页面需求.md

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -37,10 +37,11 @@
| 18 | effective_status | INTEGER | YES | | 生效状态。**枚举值**: 1(24)=有效, 3(10)=失效 **[待确认]** |
| 19 | max_selectable_categories | INTEGER | YES | | 最大可选分类数(当前数据全为 0 |
| 20 | creator_name | VARCHAR(100) | YES | | 创建人。**样本值**: "店长:郑丽珊", "管理员:郑丽珊" |
| 21 | scd2_start_time | TIMESTAMPTZ | NO | PK | SCD2 版本生效时间 |
| 22 | scd2_end_time | TIMESTAMPTZ | YES | | SCD2 版本效时间 |
| 23 | scd2_is_current | INTEGER | YES | | 当前版本标记 |
| 24 | scd2_version | INTEGER | YES | | 版本号 |
| 21 | tenant_coupon_sale_order_item_id | BIGINT | YES | | 租户券销售订单项 ID |
| 22 | scd2_start_time | TIMESTAMPTZ | NO | PK | SCD2 版本效时间 |
| 23 | scd2_end_time | TIMESTAMPTZ | YES | | SCD2 版本失效时间 |
| 24 | scd2_is_current | INTEGER | YES | | 当前版本标记 |
| 25 | scd2_version | INTEGER | YES | | 版本号 |
## 样本数据

View File

@@ -69,10 +69,15 @@
| 50 | goodscategoryid | TEXT | YES | | 可用商品分类 ID 列表(当前数据全为空) |
| 51 | pdassisnatlevel | TEXT | YES | | 陪打助教等级限制。**当前值**: "{}" |
| 52 | cxassisnatlevel | TEXT | YES | | 促销助教等级限制。**当前值**: "{}" |
| 53 | scd2_start_time | TIMESTAMPTZ | NO | PK | SCD2 版本生效时间 |
| 54 | scd2_end_time | TIMESTAMPTZ | YES | | SCD2 版本失效时间 |
| 55 | scd2_is_current | INTEGER | YES | | 当前版本标记 |
| 56 | scd2_version | INTEGER | YES | | 版本号 |
| 53 | able_share_member_discount | BOOLEAN | YES | | 是否可共享会员折扣 |
| 54 | electricity_deduct_radio | NUMERIC(18,4) | YES | | 电费扣减比例 |
| 55 | electricity_discount | NUMERIC(18,4) | YES | | 电费折扣 |
| 56 | electricity_card_deduct | BOOLEAN | YES | | 电费卡扣 |
| 57 | recharge_freeze_balance | NUMERIC(18,2) | YES | | 充值冻结余额 |
| 58 | scd2_start_time | TIMESTAMPTZ | NO | PK | SCD2 版本生效时间 |
| 59 | scd2_end_time | TIMESTAMPTZ | YES | | SCD2 版本失效时间 |
| 60 | scd2_is_current | INTEGER | YES | | 当前版本标记 |
| 61 | scd2_version | INTEGER | YES | | 版本号 |
## 使用说明

View File

@@ -24,10 +24,13 @@
| 5 | growth_value | NUMERIC(18,2) | YES | | 成长值 |
| 6 | user_status | INTEGER | YES | | 用户状态。**枚举值**: 1(556)=正常 |
| 7 | status | INTEGER | YES | | 账户状态。**枚举值**: 1(490)=正常, 3(66)=**[含义待确认]** |
| 8 | scd2_start_time | TIMESTAMPTZ | NO | PK | SCD2 版本生效时间 |
| 9 | scd2_end_time | TIMESTAMPTZ | YES | | SCD2 版本失效时间 |
| 10 | scd2_is_current | INTEGER | YES | | 当前版本标记 |
| 11 | scd2_version | INTEGER | YES | | 版本号 |
| 8 | person_tenant_org_id | BIGINT | YES | | 人员租户组织 ID |
| 9 | person_tenant_org_name | TEXT | YES | | 人员租户组织名称 |
| 10 | register_source | TEXT | YES | | 注册来源 |
| 11 | scd2_start_time | TIMESTAMPTZ | NO | PK | SCD2 版本生效时间 |
| 12 | scd2_end_time | TIMESTAMPTZ | YES | | SCD2 版本失效时间 |
| 13 | scd2_is_current | INTEGER | YES | | 当前版本标记 |
| 14 | scd2_version | INTEGER | YES | | 版本号 |
## 样本数据

View File

@@ -47,6 +47,7 @@
| 28 | get_grade_times | INTEGER | YES | | 评分次数(当前数据全为 0 |
| 29 | grade_status | INTEGER | YES | | 评分状态。**枚举值**: 0(216)=未评分, 1(4787)=已评分 **[待确认]** |
| 30 | composite_grade_time | TIMESTAMPTZ | YES | | 评分时间 |
| 31 | assistant_team_name | TEXT | YES | | 助教团队名称 |
## 使用说明

View File

@@ -38,6 +38,13 @@
| 19 | salesman_role_id | BIGINT | YES | | 销售员角色 ID当前数据全为 0 |
| 20 | salesman_org_id | BIGINT | YES | | 销售员组织 ID当前数据全为 0 |
| 21 | ledger_group_name | VARCHAR(128) | YES | | 账本分组名称(当前数据全为 NULL |
| 22 | table_share_money | NUMERIC(18,2) | YES | | 台费分摊金额 |
| 23 | table_service_share_money | NUMERIC(18,2) | YES | | 台费服务分摊金额 |
| 24 | goods_share_money | NUMERIC(18,2) | YES | | 商品分摊金额 |
| 25 | good_service_share_money | NUMERIC(18,2) | YES | | 商品服务分摊金额 |
| 26 | assistant_share_money | NUMERIC(18,2) | YES | | 助教分摊金额 |
| 27 | assistant_service_share_money | NUMERIC(18,2) | YES | | 助教服务分摊金额 |
| 28 | recharge_share_money | NUMERIC(18,2) | YES | | 充值分摊金额 |
## 台区核销分布

View File

@@ -23,6 +23,7 @@
| 4 | refund_amount | NUMERIC(18,2) | YES | | 退款金额 |
| 5 | operator_id | BIGINT | YES | | 操作员 ID |
| 6 | operator_name | VARCHAR(64) | YES | | 操作员名称。**枚举值**: "收银员:郑丽珊"(4101), "店长:郑丽珊"(223), "管理员:郑丽珊"(153), "店长:蒋雨轩"(124), "店长:谢晓洪"(115), "店长:黄月柳"(29) |
| 7 | principal_data | TEXT | YES | | 本金变动数据 |
## 操作员分布

View File

@@ -47,6 +47,7 @@
| 28 | order_remark | VARCHAR(255) | YES | | 订单备注。**样本值**: "五折"(42), "轩哥"(24), "陈德韩"(7), "免台费"(3) |
| 29 | operator_id | BIGINT | YES | | 操作员 ID |
| 30 | salesman_user_id | BIGINT | YES | | 销售员用户 ID当前数据全为 0 |
| 31 | settle_list | JSONB | YES | | 结算明细列表JSON数组 |
## 使用说明

View File

@@ -25,6 +25,11 @@
| 6 | operator_name | VARCHAR(64) | YES | | 操作员名称。**枚举值**: "收银员:郑丽珊"(2849) |
| 7 | applicant_id | BIGINT | YES | | 申请人 ID |
| 8 | operator_id | BIGINT | YES | | 操作员 ID |
| 9 | area_type_id | BIGINT | YES | | 区域类型 ID |
| 10 | site_table_area_id | BIGINT | YES | | 门店台区 ID |
| 11 | site_table_area_name | TEXT | YES | | 门店台区名称 |
| 12 | site_name | TEXT | YES | | 门店名称 |
| 13 | tenant_name | TEXT | YES | | 租户名称 |
## 样本数据

View File

@@ -29,6 +29,7 @@
| 10 | operator_id | BIGINT | YES | | 操作员 ID。**枚举值**: 3个不同ID |
| 11 | salesman_user_id | BIGINT | YES | | 销售员用户 ID当前数据全为 0 |
| 12 | salesman_org_id | BIGINT | YES | | 销售员组织 ID当前数据全为 0 |
| 13 | order_consumption_type | INTEGER | YES | | 订单消费类型 |
## 样本数据

View File

@@ -19,10 +19,10 @@
|------|--------|------|------|------|------|
| 1 | category_id | BIGINT | NO | PK | 分类唯一标识 |
| 2 | tenant_id | BIGINT | YES | | 租户 ID当前值: 2790683160709957 |
| 3 | category_name | VARCHAR | YES | | 分类名称。**样本值**: "槟榔", "皮头" 等 |
| 4 | alias_name | VARCHAR | YES | | 分类别名(当前数据大部分为空) |
| 3 | category_name | VARCHAR(50) | YES | | 分类名称。**样本值**: "槟榔", "皮头" 等 |
| 4 | alias_name | VARCHAR(50) | YES | | 分类别名(当前数据大部分为空) |
| 5 | parent_category_id | BIGINT | YES | | 父级分类 ID0=一级分类)→ 自关联 |
| 6 | business_name | VARCHAR | YES | | 业务大类名称。**样本值**: "酒水", "器材" 等 |
| 6 | business_name | VARCHAR(50) | YES | | 业务大类名称。**样本值**: "酒水", "器材" 等 |
| 7 | tenant_goods_business_id | BIGINT | YES | | 业务大类 ID |
| 8 | category_level | INTEGER | YES | | 分类层级。**枚举值**: 1=一级大类, 2=二级子类 |
| 9 | is_leaf | INTEGER | YES | | 是否叶子节点。**枚举值**: 0=非叶子, 1=叶子 |

View File

@@ -20,23 +20,25 @@
| 1 | groupbuy_package_id | BIGINT | NO | PK | 团购套餐 ID |
| 2 | tenant_id | BIGINT | YES | | 租户 ID当前值: 2790683160709957 |
| 3 | site_id | BIGINT | YES | | 门店 ID → dim_site当前值: 2790685415443269 |
| 4 | package_name | VARCHAR | YES | | 套餐名称。**样本值**: "中八、斯诺克包厢两小时", "斯诺克两小时"等 |
| 4 | package_name | VARCHAR(200) | YES | | 套餐名称。**样本值**: "中八、斯诺克包厢两小时", "斯诺克两小时"等 |
| 5 | package_template_id | BIGINT | YES | | 套餐模板 ID |
| 6 | selling_price | NUMERIC(10,2) | YES | | 售卖价格每笔订单不同从核销记录中dwd_groupbuy_redemption获取 |
| 7 | coupon_face_value | NUMERIC(10,2) | YES | | 券面值每笔订单不同从核销记录中dwd_groupbuy_redemption获取 |
| 8 | duration_seconds | INTEGER | YES | | 套餐时长(秒)。**样本值**: 3600=1小时, 7200=2小时, 14400=4小时 等 |
| 9 | start_time | TIMESTAMPTZ | YES | | 套餐生效开始时间 |
| 10 | end_time | TIMESTAMPTZ | YES | | 套餐生效结束时间 |
| 11 | table_area_name | VARCHAR | YES | | 适用台区名称。**枚举值**: "A区", "VIP包厢", "斯诺克区", "B区", "麻将房", "888" |
| 11 | table_area_name | VARCHAR(100) | YES | | 适用台区名称。**枚举值**: "A区", "VIP包厢", "斯诺克区", "B区", "麻将房", "888" |
| 12 | is_enabled | INTEGER | YES | | 启用状态。**枚举值**: 1=启用, 2=停用 |
| 13 | is_delete | INTEGER | YES | | 删除标记。**枚举值**: 0=未删除 |
| 14 | create_time | TIMESTAMPTZ | YES | | 创建时间 |
| 15 | tenant_table_area_id_list | VARCHAR | YES | | 租户级台区 ID 列表 |
| 16 | card_type_ids | VARCHAR | YES | | 允许使用的卡类型 ID 列表(当前数据为 "0" |
| 17 | scd2_start_time | TIMESTAMPTZ | NO | PK | SCD2 版本生效时间 |
| 18 | scd2_end_time | TIMESTAMPTZ | YES | | SCD2 版本失效时间 |
| 19 | scd2_is_current | INTEGER | YES | | 当前版本标记 |
| 20 | scd2_version | INTEGER | YES | | 版本号 |
| 15 | tenant_table_area_id_list | VARCHAR(512) | YES | | 租户级台区 ID 列表 |
| 16 | card_type_ids | VARCHAR(255) | YES | | 允许使用的卡类型 ID 列表(当前数据为 "0" |
| 17 | sort | INTEGER | YES | | 排序 |
| 18 | is_first_limit | BOOLEAN | YES | | 是否首单限制 |
| 19 | scd2_start_time | TIMESTAMPTZ | NO | PK | SCD2 版本生效时间 |
| 20 | scd2_end_time | TIMESTAMPTZ | YES | | SCD2 版本失效时间 |
| 21 | scd2_is_current | INTEGER | YES | | 当前版本标记 |
| 22 | scd2_version | INTEGER | YES | | 版本号 |
## 使用说明

View File

@@ -27,10 +27,12 @@
| 8 | member_card_grade_name | TEXT | YES | | 卡等级名称。**枚举值**: "储值卡", "台费卡", "年卡", "活动抵用券", "月卡" |
| 9 | create_time | TIMESTAMPTZ | YES | | 创建时间 |
| 10 | update_time | TIMESTAMPTZ | YES | | 更新时间 |
| 11 | scd2_start_time | TIMESTAMPTZ | NO | PK | SCD2 版本生效时间 |
| 12 | scd2_end_time | TIMESTAMPTZ | YES | | SCD2 版本失效时间 |
| 13 | scd2_is_current | INTEGER | YES | | 当前版本标记 |
| 14 | scd2_version | INTEGER | YES | | 版本号 |
| 11 | pay_money_sum | NUMERIC(18,2) | YES | | 累计支付金额 |
| 12 | recharge_money_sum | NUMERIC(18,2) | YES | | 累计充值金额 |
| 13 | scd2_start_time | TIMESTAMPTZ | NO | PK | SCD2 版本生效时间 |
| 14 | scd2_end_time | TIMESTAMPTZ | YES | | SCD2 版本失效时间 |
| 15 | scd2_is_current | INTEGER | YES | | 当前版本标记 |
| 16 | scd2_version | INTEGER | YES | | 版本号 |
## 使用说明

View File

@@ -34,10 +34,12 @@
| 15 | last_consume_time | TIMESTAMPTZ | YES | | 最近消费时间 |
| 16 | status | INTEGER | YES | | 卡状态。**枚举值**: 1=正常, 4=过期 |
| 17 | is_delete | INTEGER | YES | | 删除标记。**枚举值**: 0=未删除 |
| 18 | scd2_start_time | TIMESTAMPTZ | NO | PK | SCD2 版本生效时间 |
| 19 | scd2_end_time | TIMESTAMPTZ | YES | | SCD2 版本失效时间 |
| 20 | scd2_is_current | INTEGER | YES | | 当前版本标记 |
| 21 | scd2_version | INTEGER | YES | | 版本号 |
| 18 | principal_balance | NUMERIC(18,2) | YES | | 本金余额 |
| 19 | member_grade | INTEGER | YES | | 会员等级 |
| 20 | scd2_start_time | TIMESTAMPTZ | NO | PK | SCD2 版本生效时间 |
| 21 | scd2_end_time | TIMESTAMPTZ | YES | | SCD2 版本失效时间 |
| 22 | scd2_is_current | INTEGER | YES | | 当前版本标记 |
| 23 | scd2_version | INTEGER | YES | | 版本号 |
## 卡种分布

View File

@@ -37,10 +37,12 @@
| 18 | enable_status | INTEGER | YES | | 启用状态。**枚举值**: 1=启用 |
| 19 | send_state | INTEGER | YES | | 配送状态。暂无作用 |
| 20 | is_delete | INTEGER | YES | | 删除标记。**枚举值**: 0=未删除 |
| 21 | scd2_start_time | TIMESTAMPTZ | NO | PK | SCD2 版本生效时间 |
| 22 | scd2_end_time | TIMESTAMPTZ | YES | | SCD2 版本失效时间 |
| 23 | scd2_is_current | INTEGER | YES | | 当前版本标记 |
| 24 | scd2_version | INTEGER | YES | | 版本号 |
| 21 | commodity_code | TEXT | YES | | 商品编码 |
| 22 | not_sale | INTEGER | YES | | 是否停售 |
| 23 | scd2_start_time | TIMESTAMPTZ | NO | PK | SCD2 版本生效时间 |
| 24 | scd2_end_time | TIMESTAMPTZ | YES | | SCD2 版本失效时间 |
| 25 | scd2_is_current | INTEGER | YES | | 当前版本标记 |
| 26 | scd2_version | INTEGER | YES | | 版本号 |
## 样本数据

View File

@@ -24,10 +24,11 @@
| 5 | site_table_area_name | TEXT | YES | | 台区名称。**样本值**: "A区", "B区", "补时长", "C区", "麻将房", "K包", "VIP包厢", "斯诺克区", "666", "k包活动区", "M7" 等 |
| 6 | tenant_table_area_id | BIGINT | YES | | 租户级台区 ID |
| 7 | table_price | NUMERIC(18,2) | YES | | 台桌单价(当前数据全为 0.00 |
| 8 | scd2_start_time | TIMESTAMPTZ | NO | PK | SCD2 版本生效时间 |
| 9 | scd2_end_time | TIMESTAMPTZ | YES | | SCD2 版本效时间 |
| 10 | scd2_is_current | INTEGER | YES | | 当前版本标记 |
| 11 | scd2_version | INTEGER | YES | | 版本号 |
| 8 | order_id | BIGINT | YES | | 订单 ID |
| 9 | scd2_start_time | TIMESTAMPTZ | NO | PK | SCD2 版本效时间 |
| 10 | scd2_end_time | TIMESTAMPTZ | YES | | SCD2 版本失效时间 |
| 11 | scd2_is_current | INTEGER | YES | | 当前版本标记 |
| 12 | scd2_version | INTEGER | YES | | 版本号 |
## 台区分布

View File

@@ -20,21 +20,22 @@
| 1 | tenant_goods_id | BIGINT | NO | PK | 租户商品 IDSKU |
| 2 | tenant_id | BIGINT | YES | | 租户 ID |
| 3 | supplier_id | BIGINT | YES | | 供应商 ID当前数据全为 0 |
| 4 | category_name | VARCHAR | YES | | 分类名称(二级分类)。**样本值**: "零食", "饮料", "香烟"等 |
| 4 | category_name | VARCHAR(64) | YES | | 分类名称(二级分类)。**样本值**: "零食", "饮料", "香烟"等 |
| 5 | goods_category_id | BIGINT | YES | | 一级分类 ID |
| 6 | goods_second_category_id | BIGINT | YES | | 二级分类 ID |
| 7 | goods_name | VARCHAR | YES | | 商品名称。**样本值**: "海之言", "西梅多多饮品", "美汁源果粒橙", "三诺橙汁"等 |
| 8 | goods_number | VARCHAR | YES | | 商品编号(序号) |
| 9 | unit | VARCHAR | YES | | 商品单位。**枚举值**: "包", "瓶", "个", "份"等 |
| 7 | goods_name | VARCHAR(128) | YES | | 商品名称。**样本值**: "海之言", "西梅多多饮品", "美汁源果粒橙", "三诺橙汁"等 |
| 8 | goods_number | VARCHAR(64) | YES | | 商品编号(序号) |
| 9 | unit | VARCHAR(16) | YES | | 商品单位。**枚举值**: "包", "瓶", "个", "份"等 |
| 10 | market_price | NUMERIC(18,2) | YES | | 市场价/吊牌价(元) |
| 11 | goods_state | INTEGER | YES | | 商品状态。**枚举值**: 1=上架, 2=下架 |
| 12 | create_time | TIMESTAMPTZ | YES | | 创建时间 |
| 13 | update_time | TIMESTAMPTZ | YES | | 更新时间 |
| 14 | is_delete | INTEGER | YES | | 删除标记。**枚举值**: 0=未删除 |
| 15 | scd2_start_time | TIMESTAMPTZ | NO | PK | SCD2 版本生效时间 |
| 16 | scd2_end_time | TIMESTAMPTZ | YES | | SCD2 版本效时间 |
| 17 | scd2_is_current | INTEGER | YES | | 当前版本标记 |
| 18 | scd2_version | INTEGER | YES | | 版本号 |
| 15 | not_sale | INTEGER | YES | | 是否停售 |
| 16 | scd2_start_time | TIMESTAMPTZ | NO | PK | SCD2 版本效时间 |
| 17 | scd2_end_time | TIMESTAMPTZ | YES | | SCD2 版本失效时间 |
| 18 | scd2_is_current | INTEGER | YES | | 当前版本标记 |
| 19 | scd2_version | INTEGER | YES | | 版本号 |
## 使用说明

View File

@@ -28,16 +28,16 @@
| 9 | site_table_id | BIGINT | YES | | 台桌 ID → dim_table0=非台桌服务) |
| 10 | tenant_member_id | BIGINT | YES | | 会员 ID → dim_member0=散客) |
| 11 | system_member_id | BIGINT | YES | | 系统会员 ID0=散客) |
| 12 | assistant_no | VARCHAR | YES | | 助教工号。**样本值**: "2", "9"等 |
| 13 | nickname | VARCHAR | YES | | 助教昵称。**样本值**: "佳怡", "婉婉", "七七"等 |
| 12 | assistant_no | VARCHAR(64) | YES | | 助教工号。**样本值**: "2", "9"等 |
| 13 | nickname | VARCHAR(64) | YES | | 助教昵称。**样本值**: "佳怡", "婉婉", "七七"等 |
| 14 | site_assistant_id | BIGINT | YES | | 助教 ID → dim_assistant |
| 15 | user_id | BIGINT | YES | | 助教用户 ID |
| 16 | assistant_team_id | BIGINT | YES | | 助教团队 ID。**枚举值**: 2792011585884037=1组, 2959085810992645=2组 |
| 17 | person_org_id | BIGINT | YES | | 人事组织 ID |
| 18 | assistant_level | INTEGER | YES | | 助教等级。**枚举值**: 8=助教管理, 10=初级, 20=中级, 30=高级, 40=星级 |
| 19 | level_name | VARCHAR | YES | | 等级名称。**枚举值**: "助教管理", "初级", "中级", "高级", "星级" |
| 19 | level_name | VARCHAR(64) | YES | | 等级名称。**枚举值**: "助教管理", "初级", "中级", "高级", "星级" |
| 20 | skill_id | BIGINT | YES | | 技能 ID **枚举值**: 2790683529513797 = 基础课 , 2790683529513798 = 附加课/激励课, 3039912271463941 = 包厢课 |
| 21 | skill_name | VARCHAR | YES | | 技能名称。 **枚举值**: "基础课","附加课","包厢课"|
| 21 | skill_name | VARCHAR(64) | YES | | 技能名称。 **枚举值**: "基础课","附加课","包厢课"|
| 22 | ledger_unit_price | NUMERIC(10,2) | YES | | 单价(元/小时),**样本值**: 98.00/108.00/190.00 等 |
| 23 | ledger_amount | NUMERIC(10,2) | YES | | 计费金额 |
| 24 | projected_income | NUMERIC(10,2) | YES | | 预估收入 |
@@ -49,6 +49,7 @@
| 30 | start_use_time | TIMESTAMPTZ | YES | | 服务开始时间 |
| 31 | last_use_time | TIMESTAMPTZ | YES | | 服务结束时间 |
| 32 | is_delete | INTEGER | YES | | 删除标记。**枚举值**: 0=未删除 |
| 33 | real_service_money | NUMERIC(18,2) | YES | | 实际服务费金额 |
## 使用说明

View File

@@ -21,12 +21,13 @@
| 2 | site_id | BIGINT | YES | | 门店 ID |
| 3 | table_id | BIGINT | YES | | 台桌 ID → dim_table |
| 4 | table_area_id | BIGINT | YES | | 台区 ID |
| 5 | assistant_no | VARCHAR | YES | | 助教工号/昵称。**样本值**: "七七", "乔西", "球球"等 |
| 6 | assistant_name | VARCHAR | YES | | 助教名称,与 assistant_no 相同 |
| 5 | assistant_no | VARCHAR(32) | YES | | 助教工号/昵称。**样本值**: "七七", "乔西", "球球"等 |
| 6 | assistant_name | VARCHAR(64) | YES | | 助教名称,与 assistant_no 相同 |
| 7 | charge_minutes_raw | INTEGER | YES | | 原计费时长(秒)。**样本值**: 0, 3600=1h, 10800=3h 等 |
| 8 | abolish_amount | NUMERIC(18,2) | YES | | 作废金额(元)。**样本值**: 0.00, 190.00, 570.00 等 |
| 9 | trash_reason | VARCHAR | YES | | 作废原因(当前数据全为 NULL |
| 9 | trash_reason | VARCHAR(255) | YES | | 作废原因(当前数据全为 NULL |
| 10 | create_time | TIMESTAMPTZ | YES | | 创建时间 |
| 11 | tenant_id | BIGINT | YES | | 租户 ID |
## 使用说明

View File

@@ -35,11 +35,13 @@
| 16 | ledger_amount | NUMERIC(18,2) | YES | | 账本金额(元)。**样本值**: 48.00, 96.00, 68.00 等 |
| 17 | coupon_money | NUMERIC(18,2) | YES | | 券面额(元)。**样本值**: 48.00, 116.00, 96.00, 68.00 等 |
| 18 | promotion_seconds | INTEGER | YES | | 促销时长(秒)。**样本值**: 3600=1h, 7200=2h, 14400=4h 等 |
| 19 | coupon_code | VARCHAR | YES | | 券码 |
| 19 | coupon_code | VARCHAR(64) | YES | | 券码 |
| 20 | is_single_order | INTEGER | YES | | 是否独立订单。**枚举值**: 0=否, 1=是 |
| 21 | is_delete | INTEGER | YES | | 删除标记。**枚举值**: 0=未删除 |
| 22 | ledger_name | VARCHAR | YES | | 套餐名称。**样本值**: "全天A区中八一小时", "中八A区新人特惠一小时" 等 |
| 22 | ledger_name | VARCHAR(128) | YES | | 套餐名称。**样本值**: "全天A区中八一小时", "中八A区新人特惠一小时" 等 |
| 23 | create_time | TIMESTAMPTZ | YES | | 创建时间 |
| 24 | member_discount_money | NUMERIC(18,2) | YES | | 会员折扣金额 |
| 25 | coupon_sale_id | BIGINT | YES | | 优惠券销售 ID |
## 使用说明

View File

@@ -25,9 +25,9 @@
| 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 | | 会员手机号快照 |
| 9 | card_type_name | VARCHAR(32) | YES | | 卡类型名称。**枚举值**: "储值卡", "活动抵用券", "台费卡", "酒水卡", "年卡", "月卡" |
| 10 | member_name | VARCHAR(64) | YES | | 会员名称快照 |
| 11 | member_mobile | VARCHAR(20) | YES | | 会员手机号快照 |
| 12 | balance_before | NUMERIC(18,2) | YES | | 变动前余额 |
| 13 | change_amount | NUMERIC(18,2) | YES | | 变动金额(正=充值/赠送,负=消费) |
| 14 | balance_after | NUMERIC(18,2) | YES | | 变动后余额 |
@@ -35,7 +35,10 @@
| 16 | payment_method | INTEGER | YES | | 支付方式,暂未启用。 |
| 17 | change_time | TIMESTAMPTZ | YES | | 变动时间 |
| 18 | is_delete | INTEGER | YES | | 删除标记 |
| 19 | remark | VARCHAR | YES | | 备注。**样本值**: "注销会员", "充值退款" 等 |
| 19 | remark | VARCHAR(255) | YES | | 备注。**样本值**: "注销会员", "充值退款" 等 |
| 20 | principal_before | NUMERIC(18,2) | YES | | 变动前本金 |
| 21 | principal_after | NUMERIC(18,2) | YES | | 变动后本金 |
| 22 | principal_change_amount | NUMERIC(18,2) | YES | | 本金变动金额(正=增加,负=减少) |
## 卡类型余额变动分布

View File

@@ -28,6 +28,7 @@
| 9 | create_time | TIMESTAMPTZ | YES | | 创建时间 |
| 10 | pay_time | TIMESTAMPTZ | YES | | 支付时间 |
| 11 | pay_date | DATE | YES | | 支付日期 |
| 12 | tenant_id | BIGINT | YES | | 租户 ID |
## 使用说明

View File

@@ -20,9 +20,9 @@
| 1 | platform_coupon_redemption_id | BIGINT | NO | PK | 核销 ID |
| 2 | tenant_id | BIGINT | YES | | 租户 ID |
| 3 | site_id | BIGINT | YES | | 门店 ID |
| 4 | coupon_code | VARCHAR | YES | | 券码 |
| 4 | coupon_code | VARCHAR(64) | YES | | 券码 |
| 5 | coupon_channel | INTEGER | YES | | 券渠道。**枚举值**: 1=美团, 2=抖音 |
| 6 | coupon_name | VARCHAR | YES | | 券名称。**样本值**: "【全天可用】中八桌球一小时A区", "【全天可用】中八桌球两小时A区" 等 |
| 6 | coupon_name | VARCHAR(200) | YES | | 券名称。**样本值**: "【全天可用】中八桌球一小时A区", "【全天可用】中八桌球两小时A区" 等 |
| 7 | sale_price | NUMERIC(10,2) | YES | | 售卖价(元)。**样本值**: 29.90, 69.90, 59.90, 39.90, 19.90 等 |
| 8 | coupon_money | NUMERIC(10,2) | YES | | 券面额(元)。**样本值**: 48.00, 96.00, 116.00, 68.00 等 |
| 9 | coupon_free_time | INTEGER | YES | | 券赠送时长(当前数据全为 0 |
@@ -31,8 +31,8 @@
| 12 | group_package_id | BIGINT | YES | | 团购套餐 ID当前数据全为 0 |
| 13 | site_order_id | BIGINT | YES | | 门店订单 ID |
| 14 | table_id | BIGINT | YES | | 台桌 ID → dim_table |
| 15 | certificate_id | VARCHAR | YES | | 凭证 ID |
| 16 | verify_id | VARCHAR | YES | | 核验 ID仅抖音券有值 |
| 15 | certificate_id | VARCHAR(64) | YES | | 凭证 ID |
| 16 | verify_id | VARCHAR(64) | YES | | 核验 ID仅抖音券有值 |
| 17 | use_status | INTEGER | YES | | 使用状态。**枚举值**: 1=已使用, 2=已撤销 |
| 18 | is_delete | INTEGER | YES | | 删除标记。**枚举值**: 0=未删除 |
| 19 | create_time | TIMESTAMPTZ | YES | | 创建时间 |

View File

@@ -20,19 +20,19 @@
| 1 | order_settle_id | BIGINT | NO | PK | 结账单 ID |
| 2 | tenant_id | BIGINT | YES | | 租户 ID |
| 3 | site_id | BIGINT | YES | | 门店 ID → dim_site |
| 4 | site_name | VARCHAR | YES | | 门店名称。**当前值**: "朗朗桌球" |
| 4 | site_name | VARCHAR(100) | YES | | 门店名称。**当前值**: "朗朗桌球" |
| 5 | table_id | BIGINT | YES | | 台桌 ID → dim_table0=非台桌订单,如商城订单) |
| 6 | settle_name | VARCHAR | YES | | 结账名称。**样本值**: "商城订单", "A区 A3", "A区 A4", "斯诺克区 S1" |
| 6 | settle_name | VARCHAR(100) | YES | | 结账名称。**样本值**: "商城订单", "A区 A3", "A区 A4", "斯诺克区 S1" |
| 7 | order_trade_no | BIGINT | YES | | 订单号 |
| 8 | create_time | TIMESTAMPTZ | YES | | 创建时间 |
| 9 | pay_time | TIMESTAMPTZ | YES | | 支付时间 |
| 10 | settle_type | INTEGER | YES | | 结账类型。**枚举值**: 1=台桌结账, 3=商城订单, 6=退货订单, 7=退款订单 |
| 11 | revoke_order_id | BIGINT | YES | | 撤销订单 ID当前数据全为 0 |
| 12 | member_id | BIGINT | YES | | 会员 ID → dim_member0=散客,占比约 82.8% |
| 13 | member_name | VARCHAR | YES | | 会员名称 |
| 14 | member_phone | VARCHAR | YES | | 会员电话 |
| 13 | member_name | VARCHAR(100) | YES | | 会员名称 |
| 14 | member_phone | VARCHAR(50) | YES | | 会员电话 |
| 15 | member_card_account_id | BIGINT | YES | | 会员卡账户 ID当前数据全为 0 |
| 16 | member_card_type_name | VARCHAR | YES | | 卡类型名称(当前数据全为空) |
| 16 | member_card_type_name | VARCHAR(100) | YES | | 卡类型名称(当前数据全为空) |
| 17 | is_bind_member | BOOLEAN | YES | | 是否绑定会员。**枚举值**: False=否 |
| 18 | member_discount_amount | NUMERIC(18,2) | YES | | 会员折扣金额 |
| 19 | consume_money | NUMERIC(18,2) | YES | | 消费总金额(元) |
@@ -40,7 +40,7 @@
| 21 | goods_money | NUMERIC(18,2) | YES | | 商品金额 |
| 22 | real_goods_money | NUMERIC(18,2) | YES | | 实收商品金额 |
| 23 | assistant_pd_money | NUMERIC(18,2) | YES | | 助教陪打费用 |
| 24 | assistant_cx_money | NUMERIC(18,2) | YES | | 助教促销费用 |
| 24 | assistant_cx_money | NUMERIC(18,2) | YES | | 助教超休费用 |
| 25 | adjust_amount | NUMERIC(18,2) | YES | | 调整金额 |
| 26 | pay_amount | NUMERIC(18,2) | YES | | 实付金额 |
| 27 | balance_amount | NUMERIC(18,2) | YES | | 余额支付金额 |
@@ -49,6 +49,11 @@
| 30 | coupon_amount | NUMERIC(18,2) | YES | | 券抵扣金额 |
| 31 | rounding_amount | NUMERIC(18,2) | YES | | 抹零金额 |
| 32 | point_amount | NUMERIC(18,2) | YES | | 积分抵扣等值金额 |
| 33 | electricity_money | NUMERIC(18,2) | YES | | 电费金额 |
| 34 | real_electricity_money | NUMERIC(18,2) | YES | | 实际电费金额 |
| 35 | electricity_adjust_money | NUMERIC(18,2) | YES | | 电费调整金额 |
| 36 | pl_coupon_sale_amount | NUMERIC(18,2) | YES | | 平台券销售额 |
| 37 | mervou_sales_amount | NUMERIC(18,2) | YES | | 商户券销售额 |
## 使用说明

View File

@@ -29,8 +29,8 @@
| 10 | tenant_goods_category_id | BIGINT | YES | | 商品分类 ID |
| 11 | tenant_goods_business_id | BIGINT | YES | | 业务大类 ID |
| 12 | site_table_id | BIGINT | YES | | 台桌 ID0=商城订单,非台桌消费) |
| 13 | ledger_name | VARCHAR | YES | | 商品名称。**样本值**: "哇哈哈矿泉水", "东方树叶", "可乐" 等 |
| 14 | ledger_group_name | VARCHAR | YES | | 商品分类。**样本值**: "酒水", "零食", "香烟" 等 |
| 13 | ledger_name | VARCHAR(200) | YES | | 商品名称。**样本值**: "哇哈哈矿泉水", "东方树叶", "可乐" 等 |
| 14 | ledger_group_name | VARCHAR(100) | YES | | 商品分类。**样本值**: "酒水", "零食", "香烟" 等 |
| 15 | ledger_unit_price | NUMERIC(18,2) | YES | | 单价(元) |
| 16 | ledger_count | INTEGER | YES | | 购买数量。**样本值**: 1, 2, 3, 4 等 |
| 17 | ledger_amount | NUMERIC(18,2) | YES | | 销售金额(元) |
@@ -40,6 +40,7 @@
| 21 | ledger_status | INTEGER | YES | | 账本状态。**枚举值**: 1=已结算 |
| 22 | is_delete | INTEGER | YES | | 删除标记。**枚举值**: 0=未删除 |
| 23 | create_time | TIMESTAMPTZ | YES | | 创建时间 |
| 24 | coupon_share_money | NUMERIC(18,2) | YES | | 优惠券分摊金额 |
## 使用说明

View File

@@ -24,11 +24,15 @@
| 5 | site_id | BIGINT | YES | | 门店 ID |
| 6 | table_id | BIGINT | YES | | 台桌 ID → dim_table |
| 7 | table_area_id | BIGINT | YES | | 台区 ID |
| 8 | table_area_name | VARCHAR | YES | | 台区名称(当前数据全为 NULL |
| 8 | table_area_name | VARCHAR(64) | YES | | 台区名称(当前数据全为 NULL |
| 9 | tenant_table_area_id | BIGINT | YES | | 租户台区 ID |
| 10 | ledger_amount | NUMERIC(18,2) | YES | | 调整金额(元) |
| 11 | ledger_status | INTEGER | YES | | 账本状态。**枚举值**: 0=待确认, 1=已确认 |
| 12 | is_delete | INTEGER | YES | | 删除标记。**枚举值**: 0=未删除 |
| 13 | table_name | TEXT | YES | | 台桌名称 |
| 14 | table_price | NUMERIC(18,2) | YES | | 台桌价格 |
| 15 | charge_free | BOOLEAN | YES | | 是否免费 |
| 16 | adjust_time | TIMESTAMPTZ | YES | | 调整时间 |
## 使用说明

View File

@@ -25,10 +25,10 @@
| 6 | site_id | BIGINT | YES | | 门店 ID |
| 7 | site_table_id | BIGINT | YES | | 台桌 ID → dim_table |
| 8 | site_table_area_id | BIGINT | YES | | 台区 ID |
| 9 | site_table_area_name | VARCHAR | YES | | 台区名称。**枚举值**: "A区", "B区", "斯诺克区", "麻将房", "C区", "补时长", "VIP包厢" 等 |
| 9 | site_table_area_name | VARCHAR(64) | YES | | 台区名称。**枚举值**: "A区", "B区", "斯诺克区", "麻将房", "C区", "补时长", "VIP包厢" 等 |
| 10 | tenant_table_area_id | BIGINT | YES | | 租户级台区 ID |
| 11 | member_id | BIGINT | YES | | 会员 ID0=散客,占比约 82.4% |
| 12 | ledger_name | VARCHAR | YES | | 台桌名称。**样本值**: "A3", "A5", "A4", "S1", "B5", "M3" 等 |
| 12 | ledger_name | VARCHAR(64) | YES | | 台桌名称。**样本值**: "A3", "A5", "A4", "S1", "B5", "M3" 等 |
| 13 | ledger_unit_price | NUMERIC(18,2) | YES | | 单价(元/小时),如 48.00/58.00/68.00 |
| 14 | ledger_count | INTEGER | YES | | 计费时长(秒)。**样本值**: 3600=1h, 7200=2h, 10800=3h 等 |
| 15 | ledger_amount | NUMERIC(18,2) | YES | | 计费金额(元) |
@@ -44,6 +44,8 @@
| 25 | ledger_status | INTEGER | YES | | 账本状态。**枚举值**: 1=已结算 |
| 26 | is_single_order | INTEGER | YES | | 是否独立订单。**枚举值**: 0=合并订单, 1=独立订单 |
| 27 | is_delete | INTEGER | YES | | 删除标记。**枚举值**: 0=未删除 |
| 28 | activity_discount_amount | NUMERIC(18,2) | YES | | 活动折扣金额 |
| 29 | real_service_money | NUMERIC(18,2) | YES | | 实际服务费金额 |
## 使用说明

View File

@@ -0,0 +1,74 @@
# cfg_area_category 台区分类映射表
> 生成时间2026-02-03
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | billiards_dws |
| 表名 | cfg_area_category |
| 主键 | category_id |
| 数据来源 | 手工维护/seed脚本基于dim_table实际数据 |
| 说明 | 将dim_table.site_table_area_name映射到财务报表区域分类 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 主键 | 说明 |
|------|--------|------|------|------|------|
| 1 | category_id | SERIAL | NO | PK | 分类ID自增 |
| 2 | source_area_name | VARCHAR(100) | NO | UK | 源区域名称来自dim_table.site_table_area_name |
| 3 | category_code | VARCHAR(20) | NO | | 分类代码。**枚举值**: BILLIARD, BILLIARD_VIP, SNOOKER, MAHJONG, KTV, SPECIAL, OTHER |
| 4 | category_name | VARCHAR(50) | NO | | 分类名称 |
| 5 | match_type | VARCHAR(10) | NO | | 匹配类型。**枚举值**: EXACT精确, LIKE模糊, DEFAULT兜底 |
| 6 | match_priority | INTEGER | NO | | 匹配优先级(数字越小优先级越高) |
| 7 | is_active | BOOLEAN | NO | | 是否启用 |
| 8 | description | TEXT | YES | | 说明 |
| 9 | created_at | TIMESTAMPTZ | NO | | 创建时间 |
| 10 | updated_at | TIMESTAMPTZ | NO | | 更新时间 |
## 分类映射示例
| 源区域名称 | 分类代码 | 分类名称 |
|------------|----------|----------|
| A区 | BILLIARD | 台球散台 |
| B区 | BILLIARD | 台球散台 |
| C区 | BILLIARD | 台球散台 |
| TV台 | BILLIARD | 台球散台 |
| VIP包厢 | BILLIARD_VIP | 台球VIP |
| 斯诺克区 | SNOOKER | 斯诺克 |
| 麻将房 | MAHJONG | 麻将棋牌 |
| M7 | MAHJONG | 麻将棋牌 |
| M8 | MAHJONG | 麻将棋牌 |
| 666 | MAHJONG | 麻将棋牌 |
| 发财 | MAHJONG | 麻将棋牌 |
| K包 | KTV | K歌娱乐 |
| k包活动区 | KTV | K歌娱乐 |
| 幸会158 | KTV | K歌娱乐 |
| 补时长 | SPECIAL | 补时长 |
## 使用说明
**取值方式**
```sql
-- 将台区名称映射到分类
SELECT
dt.site_table_area_name,
COALESCE(ac.category_code, 'OTHER') AS category_code,
COALESCE(ac.category_name, '其他') AS category_name
FROM billiards_dwd.dim_table dt
LEFT JOIN billiards_dws.cfg_area_category ac
ON dt.site_table_area_name = ac.source_area_name
AND ac.is_active = TRUE
WHERE dt.scd2_is_current = 1;
-- 按分类汇总收入
SELECT
COALESCE(ac.category_name, '其他') AS category_name,
SUM(tfl.ledger_amount) AS total_amount
FROM billiards_dwd.dwd_table_fee_log tfl
LEFT JOIN billiards_dwd.dim_table dt ON dt.table_id = tfl.site_table_id
LEFT JOIN billiards_dws.cfg_area_category ac ON dt.site_table_area_name = ac.source_area_name
GROUP BY COALESCE(ac.category_name, '其他');
```

View File

@@ -0,0 +1,56 @@
# cfg_assistant_level_price 助教等级定价表
> 生成时间2026-02-03
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | billiards_dws |
| 表名 | cfg_assistant_level_price |
| 主键 | price_id |
| 数据来源 | 手工维护/seed脚本 |
| 说明 | 助教等级对应的基础课和附加课单价配置 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 主键 | 说明 |
|------|--------|------|------|------|------|
| 1 | price_id | SERIAL | NO | PK | 定价ID自增 |
| 2 | level_code | INTEGER | NO | | 等级代码。**枚举值**: 8=助教管理, 10=初级, 20=中级, 30=高级, 40=星级 |
| 3 | level_name | VARCHAR(20) | NO | | 等级名称 |
| 4 | base_course_price | NUMERIC(10,2) | NO | | 基础课单价(元/小时) |
| 5 | bonus_course_price | NUMERIC(10,2) | NO | | 附加课单价(元/小时固定50元 |
| 6 | effective_from | DATE | NO | | 生效起始日期(含) |
| 7 | effective_to | DATE | NO | | 生效截止日期(含) |
| 8 | description | TEXT | YES | | 说明 |
| 9 | created_at | TIMESTAMPTZ | NO | | 创建时间 |
| 10 | updated_at | TIMESTAMPTZ | NO | | 更新时间 |
## 定价配置示例
| 等级代码 | 等级名称 | 基础课单价 | 附加课单价 |
|----------|----------|------------|------------|
| 8 | 助教管理 | 98元/小时 | 50元/小时 |
| 10 | 初级 | 98元/小时 | 50元/小时 |
| 20 | 中级 | 108元/小时 | 50元/小时 |
| 30 | 高级 | 118元/小时 | 50元/小时 |
| 40 | 星级 | 138元/小时 | 50元/小时 |
## 使用说明
**取值方式**
SCD2口径助教等级来自dim_assistant取数时需按有效期as-of join
```sql
-- 获取助教在指定日期的等级定价
SELECT p.*
FROM billiards_dws.cfg_assistant_level_price p
JOIN billiards_dwd.dim_assistant a ON p.level_code = a.level
WHERE a.assistant_id = 123
AND a.scd2_start_time <= '2026-01-15'
AND (a.scd2_end_time IS NULL OR a.scd2_end_time > '2026-01-15')
AND p.effective_from <= '2026-01-15'
AND p.effective_to >= '2026-01-15';
```

View File

@@ -0,0 +1,73 @@
# cfg_bonus_rules 奖金规则配置表
> 生成时间2026-02-03
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | billiards_dws |
| 表名 | cfg_bonus_rules |
| 主键 | rule_id |
| 数据来源 | 手工维护/seed脚本 |
| 说明 | 冲刺奖金按小时阈值和Top3排名奖金配置 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 主键 | 说明 |
|------|--------|------|------|------|------|
| 1 | rule_id | SERIAL | NO | PK | 规则ID自增 |
| 2 | rule_type | VARCHAR(20) | NO | | 规则类型。**枚举值**: SPRINT冲刺奖金, TOP_RANKTop排名奖金 |
| 3 | rule_code | VARCHAR(30) | NO | | 规则代码。**枚举值**: SPRINT_190, SPRINT_220, TOP_1, TOP_2, TOP_3 |
| 4 | rule_name | VARCHAR(50) | NO | | 规则名称 |
| 5 | threshold_hours | NUMERIC(10,2) | YES | | 小时数阈值(冲刺奖金用) |
| 6 | rank_position | INTEGER | YES | | 排名位置Top奖金用 |
| 7 | bonus_amount | NUMERIC(12,2) | NO | | 奖金金额(元) |
| 8 | is_cumulative | BOOLEAN | NO | | 是否可累计冲刺奖金为FALSE取最高档 |
| 9 | priority | INTEGER | NO | | 优先级(数字越大优先级越高) |
| 10 | effective_from | DATE | NO | | 生效起始日期(含) |
| 11 | effective_to | DATE | NO | | 生效截止日期(含) |
| 12 | description | TEXT | YES | | 说明 |
| 13 | created_at | TIMESTAMPTZ | NO | | 创建时间 |
| 14 | updated_at | TIMESTAMPTZ | NO | | 更新时间 |
## 奖金规则示例
### 冲刺奖金(不累计,取最高档)
| 规则代码 | 小时阈值 | 奖金金额 | 优先级 |
|----------|----------|----------|--------|
| SPRINT_190 | 190小时 | 300元 | 1 |
| SPRINT_220 | 220小时 | 800元 | 2 |
### Top3排名奖金独立发放
| 规则代码 | 排名 | 奖金金额 |
|----------|------|----------|
| TOP_1 | 第1名 | 1000元 |
| TOP_2 | 第2名 | 600元 |
| TOP_3 | 第3名 | 400元 |
## 使用说明
**取值方式**
```sql
-- 获取冲刺奖金(取最高档)
SELECT * FROM billiards_dws.cfg_bonus_rules
WHERE rule_type = 'SPRINT'
AND threshold_hours <= 200 -- 实际小时数
AND effective_from <= '2026-01-01'
AND effective_to >= '2026-01-01'
ORDER BY priority DESC
LIMIT 1;
-- 获取Top3排名奖金
SELECT * FROM billiards_dws.cfg_bonus_rules
WHERE rule_type = 'TOP_RANK'
AND rank_position = 1 -- 排名
AND effective_from <= '2026-01-01'
AND effective_to >= '2026-01-01';
```
**排名口径说明**
- Top3排名按有效业绩小时数effective_hours降序排列
- 如遇并列则都算如2个第一则记为2个第一下一个是第三

View File

@@ -0,0 +1,71 @@
# cfg_performance_tier 绩效档位配置表
> 生成时间2026-02-03
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | billiards_dws |
| 表名 | cfg_performance_tier |
| 主键 | tier_id |
| 数据来源 | 手工维护/seed脚本 |
| 说明 | 助教绩效档位配置包含6档阈值、抽成比例、假期天数 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 主键 | 说明 |
|------|--------|------|------|------|------|
| 1 | tier_id | SERIAL | NO | PK | 档位ID自增 |
| 2 | tier_code | VARCHAR(20) | NO | | 档位代码。**枚举值**: T0, T1, T2, T3, T4, T5, NEW |
| 3 | tier_name | VARCHAR(50) | NO | | 档位名称 |
| 4 | tier_level | INTEGER | NO | | 档位等级(数字越大档位越高) |
| 5 | min_hours | NUMERIC(10,2) | NO | | 最低业绩小时数阈值(>= |
| 6 | max_hours | NUMERIC(10,2) | YES | | 最高业绩小时数阈值(<NULL表示无上限 |
| 7 | base_deduction | NUMERIC(10,2) | NO | | 专业课抽成(元/小时),球房从基础课扣除 |
| 8 | bonus_deduction_ratio | NUMERIC(5,4) | NO | | 打赏课抽成比例0-1 |
| 9 | vacation_days | INTEGER | NO | | 次月可休假天数 |
| 10 | vacation_unlimited | BOOLEAN | NO | | 是否休假自由5档为TRUE |
| 11 | is_new_hire_tier | BOOLEAN | NO | | 是否为新入职专用档位 |
| 12 | effective_from | DATE | NO | | 生效起始日期(含) |
| 13 | effective_to | DATE | NO | | 生效截止日期(含) |
| 14 | description | TEXT | YES | | 档位说明 |
| 15 | created_at | TIMESTAMPTZ | NO | | 创建时间 |
| 16 | updated_at | TIMESTAMPTZ | NO | | 更新时间 |
## 档位配置示例
| 档位代码 | 档位名称 | 小时数范围 | 专业课抽成 | 打赏课抽成 | 假期 |
|----------|----------|------------|------------|------------|------|
| T0 | 0档 | 0-100 | 23元/小时 | 45% | 4天 |
| T1 | 1档 | 100-130 | 20元/小时 | 42% | 5天 |
| T2 | 2档 | 130-160 | 17元/小时 | 40% | 6天 |
| T3 | 3档 | 160-190 | 13元/小时 | 35% | 7天 |
| T4 | 4档 | 190-230 | 8元/小时 | 30% | 8天 |
| T5 | 5档 | 230+ | 0元/小时 | 0% | 自由 |
| NEW | 新入职 | 任意 | 23元/小时 | 45% | 4天 |
## 使用说明
**取值方式**
按月份匹配生效的配置:
```sql
-- 获取指定月份的档位配置
SELECT * FROM billiards_dws.cfg_performance_tier
WHERE effective_from <= '2026-01-01'
AND effective_to >= '2026-01-01'
ORDER BY min_hours;
-- 根据有效业绩小时数匹配档位
SELECT * FROM billiards_dws.cfg_performance_tier
WHERE effective_from <= '2026-01-01'
AND effective_to >= '2026-01-01'
AND min_hours <= 185 -- 有效小时数
AND (max_hours IS NULL OR max_hours > 185)
LIMIT 1;
```
**薪资计算公式**
- 基础课收入 = 基础课小时数 × (客户支付价格 - base_deduction)
- 附加课收入 = 附加课小时数 × 190 × (1 - bonus_deduction_ratio)

View File

@@ -0,0 +1,62 @@
# cfg_skill_type 技能→课程类型映射表
> 生成时间2026-02-03
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | billiards_dws |
| 表名 | cfg_skill_type |
| 主键 | skill_type_id |
| 数据来源 | 手工维护/seed脚本 |
| 说明 | 将skill_id映射到课程类型基础课/附加课避免依赖skill_name文本匹配 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 主键 | 说明 |
|------|--------|------|------|------|------|
| 1 | skill_type_id | SERIAL | NO | PK | 映射ID自增 |
| 2 | skill_id | BIGINT | NO | UK | 技能ID来自dwd_assistant_service_log.skill_id |
| 3 | skill_name | VARCHAR(50) | YES | | 技能名称(仅用于展示和校验) |
| 4 | course_type_code | VARCHAR(10) | NO | | 课程类型代码。**枚举值**: BASE基础课, BONUS附加课 |
| 5 | course_type_name | VARCHAR(20) | NO | | 课程类型名称 |
| 6 | is_active | BOOLEAN | NO | | 是否启用 |
| 7 | description | TEXT | YES | | 说明 |
| 8 | created_at | TIMESTAMPTZ | NO | | 创建时间 |
| 9 | updated_at | TIMESTAMPTZ | NO | | 更新时间 |
## 技能映射示例
| skill_id | skill_name | 课程类型代码 | 课程类型名称 |
|----------|------------|--------------|--------------|
| 2791903611396869 | 陪打/PD | BASE | 基础课 |
| 2807440316432197 | 超休/CX | BONUS | 附加课 |
## 使用说明
**取值方式**
```sql
-- 将服务记录分类为基础课/附加课
SELECT
asl.*,
COALESCE(st.course_type_code, 'BASE') AS course_type_code,
COALESCE(st.course_type_name, '基础课') AS course_type_name
FROM billiards_dwd.dwd_assistant_service_log asl
LEFT JOIN billiards_dws.cfg_skill_type st
ON asl.skill_id = st.skill_id
AND st.is_active = TRUE;
-- 按课程类型汇总小时数
SELECT
COALESCE(st.course_type_code, 'BASE') AS course_type,
SUM(asl.income_seconds) / 3600.0 AS total_hours
FROM billiards_dwd.dwd_assistant_service_log asl
LEFT JOIN billiards_dws.cfg_skill_type st ON asl.skill_id = st.skill_id
GROUP BY COALESCE(st.course_type_code, 'BASE');
```
**说明**
- 基础课(陪打/PD: 按等级定价客户支付98-138元/小时
- 附加课(超休/CX: 固定客户支付190元/小时助教收入50元/小时

View File

@@ -0,0 +1,98 @@
# dws_assistant_customer_stats 助教服务客户统计表
> 生成时间2026-02-03
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | billiards_dws |
| 表名 | dws_assistant_customer_stats |
| 主键 | id |
| 唯一键 | (site_id, assistant_id, member_id, stat_date) |
| 数据来源 | dwd_assistant_service_log |
| 更新频率 | 每日更新 |
| 说明 | 以"助教+客户"为粒度,统计服务关系和滚动窗口指标 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 说明 |
|------|--------|------|------|------|
| 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 | member_id | BIGINT | NO | 客户IDmember_id=0散客不入此表 |
| 7 | member_nickname | VARCHAR(100) | YES | 客户昵称 |
| 8 | member_mobile | VARCHAR(20) | YES | 客户手机号(脱敏) |
| 9 | stat_date | DATE | NO | 统计基准日期 |
| 10 | first_service_date | DATE | YES | 首次服务日期 |
| 11 | last_service_date | DATE | YES | 最近服务日期 |
| 12 | total_service_count | INTEGER | NO | 累计服务次数 |
| 13 | total_service_hours | NUMERIC(10,2) | NO | 累计服务小时数 |
| 14 | total_service_amount | NUMERIC(12,2) | NO | 累计服务金额 |
| 15-20 | service_count_7d/10d/15d/30d/60d/90d | INTEGER | NO | 近N天服务次数 |
| 21-26 | service_hours_7d/10d/15d/30d/60d/90d | NUMERIC(10,2) | NO | 近N天服务小时数 |
| 27-32 | service_amount_7d/10d/15d/30d/60d/90d | NUMERIC(12,2) | NO | 近N天服务金额 |
| 33 | days_since_last | INTEGER | YES | 距离最近服务的天数 |
| 34 | is_active_7d | BOOLEAN | NO | 近7天是否活跃 |
| 35 | is_active_30d | BOOLEAN | NO | 近30天是否活跃 |
| 36 | created_at | TIMESTAMPTZ | NO | 创建时间 |
| 37 | updated_at | TIMESTAMPTZ | NO | 更新时间 |
## 数据来源
### 滚动窗口计算
```sql
-- 统计每个助教-客户组合的滚动窗口指标
WITH service_data AS (
SELECT
site_id,
site_assistant_id AS assistant_id,
tenant_member_id AS member_id,
DATE(create_time) AS service_date,
COUNT(*) AS service_count,
SUM(income_seconds) / 3600.0 AS service_hours,
SUM(ledger_amount) AS service_amount
FROM billiards_dwd.dwd_assistant_service_log
WHERE is_delete = 0
AND tenant_member_id != 0 -- 排除散客
GROUP BY site_id, site_assistant_id, tenant_member_id, DATE(create_time)
)
SELECT
assistant_id,
member_id,
:stat_date AS stat_date,
MIN(service_date) AS first_service_date,
MAX(service_date) AS last_service_date,
SUM(service_count) AS total_service_count,
SUM(CASE WHEN service_date >= :stat_date - 6 THEN service_count ELSE 0 END) AS service_count_7d,
SUM(CASE WHEN service_date >= :stat_date - 29 THEN service_count ELSE 0 END) AS service_count_30d,
-- ... 其他窗口
FROM service_data
GROUP BY assistant_id, member_id;
```
## 使用说明
**散客处理**
- member_id=0 的散客不进入此表统计
- 仅统计有会员身份的客户
**活跃度判断**
```sql
-- 近7天活跃 = 近7天有服务记录
is_active_7d = (service_count_7d > 0)
-- 近30天活跃 = 近30天有服务记录
is_active_30d = (service_count_30d > 0)
```
## 可回溯性
| 项目 | 说明 |
|------|------|
| 可回溯 | ✅ 完全可回溯 |
| 数据范围 | 2025-07-21 ~ 至今 |
| 依赖表 | dwd_assistant_service_log, dim_member |
| 注意事项 | 滚动窗口需要足够的历史数据支撑 |

View File

@@ -0,0 +1,109 @@
# dws_assistant_daily_detail 助教日度业绩明细表
> 生成时间2026-02-03
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | billiards_dws |
| 表名 | dws_assistant_daily_detail |
| 主键 | id |
| 唯一键 | (site_id, assistant_id, stat_date) |
| 数据来源 | dwd_assistant_service_log + dwd_assistant_trash_event |
| 更新频率 | 每小时增量更新 |
| 说明 | 以"助教+日期"为粒度,汇总每日业绩明细 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 说明 |
|------|--------|------|------|------|
| 1 | id | BIGSERIAL | NO | 自增主键 |
| 2 | site_id | BIGINT | NO | 门店ID |
| 3 | tenant_id | BIGINT | NO | 租户ID |
| 4 | assistant_id | BIGINT | NO | 助教IDdim_assistant.assistant_id |
| 5 | assistant_nickname | VARCHAR(50) | YES | 助教花名(冗余,便于查询展示) |
| 6 | stat_date | DATE | NO | 统计日期 |
| 7 | assistant_level_code | INTEGER | YES | 助教等级代码SCD2口径取stat_date当日生效的等级 |
| 8 | assistant_level_name | VARCHAR(20) | YES | 助教等级名称 |
| 9 | total_service_count | INTEGER | NO | 总服务次数 |
| 10 | base_service_count | INTEGER | NO | 基础课服务次数 |
| 11 | bonus_service_count | INTEGER | NO | 附加课服务次数 |
| 12 | total_seconds | INTEGER | NO | 总计费时长(秒) |
| 13 | base_seconds | INTEGER | NO | 基础课计费时长(秒) |
| 14 | bonus_seconds | INTEGER | NO | 附加课计费时长(秒) |
| 15 | total_hours | NUMERIC(10,2) | NO | 总计费小时数 |
| 16 | base_hours | NUMERIC(10,2) | NO | 基础课小时数 |
| 17 | bonus_hours | NUMERIC(10,2) | NO | 附加课小时数 |
| 18 | total_ledger_amount | NUMERIC(12,2) | NO | 总计费金额(元) |
| 19 | base_ledger_amount | NUMERIC(12,2) | NO | 基础课计费金额 |
| 20 | bonus_ledger_amount | NUMERIC(12,2) | NO | 附加课计费金额 |
| 21 | unique_customers | INTEGER | NO | 服务客户数(去重) |
| 22 | unique_tables | INTEGER | NO | 服务台桌数(去重) |
| 23 | trashed_seconds | INTEGER | NO | 被废除的服务时长(秒) |
| 24 | trashed_count | INTEGER | NO | 被废除的服务次数 |
| 25 | created_at | TIMESTAMPTZ | NO | 创建时间 |
| 26 | updated_at | TIMESTAMPTZ | NO | 更新时间 |
## 数据来源
### 主要来源dwd_assistant_service_log
```sql
SELECT
site_id,
DATE(create_time) AS stat_date,
site_assistant_id AS assistant_id,
nickname AS assistant_nickname,
COUNT(*) AS total_service_count,
SUM(income_seconds) AS total_seconds,
SUM(ledger_amount) AS total_ledger_amount,
COUNT(DISTINCT tenant_member_id) AS unique_customers,
COUNT(DISTINCT site_table_id) AS unique_tables
FROM billiards_dwd.dwd_assistant_service_log
WHERE is_delete = 0
GROUP BY site_id, DATE(create_time), site_assistant_id, nickname;
```
### 废除记录dwd_assistant_trash_event
```sql
SELECT
site_id,
DATE(create_time) AS stat_date,
assistant_no,
assistant_name,
SUM(charge_minutes_raw * 60) AS trashed_seconds,
COUNT(*) AS trashed_count
FROM billiards_dwd.dwd_assistant_trash_event
GROUP BY site_id, DATE(create_time), assistant_no, assistant_name;
```
## 使用说明
**时间分层查询**
```sql
-- 近2天
SELECT * FROM billiards_dws.dws_assistant_daily_detail
WHERE stat_date >= CURRENT_DATE - 1;
-- 近1月
SELECT * FROM billiards_dws.dws_assistant_daily_detail
WHERE stat_date >= CURRENT_DATE - INTERVAL '1 month';
-- 月度汇总
SELECT
assistant_id,
DATE_TRUNC('month', stat_date) AS stat_month,
SUM(total_hours) AS total_hours,
SUM(base_hours) AS base_hours,
SUM(bonus_hours) AS bonus_hours
FROM billiards_dws.dws_assistant_daily_detail
GROUP BY assistant_id, DATE_TRUNC('month', stat_date);
```
## 可回溯性
| 项目 | 说明 |
|------|------|
| 可回溯 | ✅ 完全可回溯 |
| 数据范围 | 2025-07-21 ~ 至今 |
| 依赖表 | dwd_assistant_service_log, dwd_assistant_trash_event, dim_assistant |

View File

@@ -0,0 +1,88 @@
# dws_assistant_finance_analysis 助教收支分析表
> 生成时间2026-02-03
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | billiards_dws |
| 表名 | dws_assistant_finance_analysis |
| 主键 | id |
| 唯一键 | (site_id, stat_date, assistant_id) |
| 数据来源 | dwd_assistant_service_log + dws_assistant_salary_calc |
| 更新频率 | 每日更新 |
| 说明 | 以"日期+助教"为粒度,分析助教产出的收入和成本 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 说明 |
|------|--------|------|------|------|
| 1 | id | BIGSERIAL | NO | 自增主键 |
| 2 | site_id | BIGINT | NO | 门店ID |
| 3 | tenant_id | BIGINT | NO | 租户ID |
| 4 | stat_date | DATE | NO | 统计日期 |
| 5 | assistant_id | BIGINT | NO | 助教ID |
| 6 | assistant_nickname | VARCHAR(50) | YES | 助教花名 |
| 7 | revenue_total | NUMERIC(14,2) | NO | 助教产出收入ledger_amount汇总 |
| 8 | revenue_base | NUMERIC(14,2) | NO | 基础课收入 |
| 9 | revenue_bonus | NUMERIC(14,2) | NO | 附加课收入 |
| 10 | cost_daily | NUMERIC(14,2) | NO | 日均工资成本(月工资/工作天数) |
| 11 | gross_profit | NUMERIC(14,2) | NO | 毛利 = 收入 - 成本 |
| 12 | gross_margin | NUMERIC(5,4) | NO | 毛利率 |
| 13 | service_count | INTEGER | NO | 服务次数 |
| 14 | service_hours | NUMERIC(10,2) | NO | 服务小时数 |
| 15 | unique_customers | INTEGER | NO | 服务客户数 |
| 16 | created_at | TIMESTAMPTZ | NO | 创建时间 |
| 17 | updated_at | TIMESTAMPTZ | NO | 更新时间 |
## 数据来源
### 收入来源dwd_assistant_service_log
```sql
SELECT
DATE(create_time) AS stat_date,
site_assistant_id AS assistant_id,
SUM(ledger_amount) AS revenue_total,
SUM(CASE WHEN skill_id = 2791903611396869 THEN ledger_amount ELSE 0 END) AS revenue_base,
SUM(CASE WHEN skill_id = 2807440316432197 THEN ledger_amount ELSE 0 END) AS revenue_bonus,
COUNT(*) AS service_count,
SUM(income_seconds) / 3600.0 AS service_hours,
COUNT(DISTINCT tenant_member_id) AS unique_customers
FROM billiards_dwd.dwd_assistant_service_log
WHERE is_delete = 0
GROUP BY DATE(create_time), site_assistant_id;
```
### 成本来源dws_assistant_salary_calc
```sql
-- 日均成本 = 月度应发工资 / 当月工作天数
SELECT
assistant_id,
salary_month,
gross_salary / NULLIF(work_days, 0) AS cost_daily
FROM billiards_dws.dws_assistant_salary_calc sc
JOIN billiards_dws.dws_assistant_monthly_summary ms
ON sc.assistant_id = ms.assistant_id AND sc.salary_month = ms.stat_month;
```
## 使用说明
**毛利计算**
```
gross_profit = revenue_total - cost_daily
gross_margin = gross_profit / NULLIF(revenue_total, 0)
```
**注意事项**
- cost_daily 基于月度工资分摊,非实际日薪
- 当月数据在月末工资计算前 cost_daily 可能不准确
## 可回溯性
| 项目 | 说明 |
|------|------|
| 可回溯 | ⚠️ 部分可回溯 |
| 数据范围 | 2025-07-21 ~ 至今 |
| 依赖表 | dwd_assistant_service_log, dws_assistant_salary_calc |
| 限制 | cost_daily 依赖 salary_calc需先完成薪资计算 |

View File

@@ -0,0 +1,110 @@
# dws_assistant_monthly_summary 助教月度业绩汇总表
> 生成时间2026-02-03
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | billiards_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 | total_hours | NUMERIC(10,2) | NO | 总计费小时数 |
| 16 | base_hours | NUMERIC(10,2) | NO | 基础课小时数 |
| 17 | bonus_hours | NUMERIC(10,2) | NO | 附加课小时数 |
| 18 | effective_hours | NUMERIC(10,2) | NO | 有效业绩小时数(影响档位)= total_hours - trashed_hours |
| 19 | trashed_hours | NUMERIC(10,2) | NO | 被废除小时数 |
| 20 | total_ledger_amount | NUMERIC(12,2) | NO | 总计费金额 |
| 21 | base_ledger_amount | NUMERIC(12,2) | NO | 基础课计费金额 |
| 22 | bonus_ledger_amount | NUMERIC(12,2) | NO | 附加课计费金额 |
| 23 | unique_customers | INTEGER | NO | 月度服务客户数(去重) |
| 24 | unique_tables | INTEGER | NO | 月度服务台桌数(去重) |
| 25 | avg_service_seconds | NUMERIC(10,2) | NO | 平均单次服务时长(秒) |
| 26 | tier_id | INTEGER | YES | 匹配的档位ID |
| 27 | tier_code | VARCHAR(20) | YES | 档位代码T0-T5/NEW |
| 28 | tier_name | VARCHAR(50) | YES | 档位名称 |
| 29 | rank_by_hours | INTEGER | YES | 月度排名按effective_hours降序 |
| 30 | rank_with_ties | INTEGER | YES | 考虑并列的排名 |
| 31 | created_at | TIMESTAMPTZ | NO | 创建时间 |
| 32 | 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(total_hours) AS total_hours,
SUM(base_hours) AS base_hours,
SUM(bonus_hours) AS bonus_hours,
SUM(trashed_seconds) / 3600.0 AS trashed_hours
FROM billiards_dws.dws_assistant_daily_detail
GROUP BY site_id, tenant_id, assistant_id, DATE_TRUNC('month', stat_date);
```
### 档位匹配
```sql
-- 根据有效业绩匹配档位
SELECT * FROM billiards_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
AND is_new_hire_tier = :is_new_hire
LIMIT 1;
```
## 使用说明
**新入职判断**
- 入职日期 >= 统计月1日0点 则为新入职
- 新入职使用NEW档位配置
**排名计算**
```sql
-- rank_with_ties: 并列排名如2个第一则都是1下一个是3
SELECT
assistant_id,
effective_hours,
RANK() OVER (ORDER BY effective_hours DESC) AS rank_with_ties
FROM billiards_dws.dws_assistant_monthly_summary
WHERE stat_month = '2026-01-01';
```
## 可回溯性
| 项目 | 说明 |
|------|------|
| 可回溯 | ✅ 完全可回溯 |
| 数据范围 | 2025年8月起需要完整月数据 |
| 依赖表 | dws_assistant_daily_detail, cfg_performance_tier, dim_assistant |

View File

@@ -0,0 +1,84 @@
# dws_assistant_recharge_commission 助教充值提成表
> 生成时间2026-02-03
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | billiards_dws |
| 表名 | dws_assistant_recharge_commission |
| 主键 | id |
| 数据来源 | Excel手动导入 |
| 更新频率 | 按需导入 |
| 说明 | 以"助教+月份+充值订单"为粒度,记录充值提成 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 说明 |
|------|--------|------|------|------|
| 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 | commission_month | DATE | NO | 提成月份(月第一天) |
| 7 | recharge_order_id | BIGINT | YES | 充值订单ID |
| 8 | recharge_order_no | VARCHAR(50) | YES | 充值订单号 |
| 9 | recharge_amount | NUMERIC(12,2) | NO | 充值订单金额 |
| 10 | commission_amount | NUMERIC(12,2) | NO | 提成金额 |
| 11 | commission_ratio | NUMERIC(5,4) | YES | 提成比例 |
| 12 | import_batch_no | VARCHAR(50) | YES | 导入批次号 |
| 13 | import_file_name | VARCHAR(200) | YES | 导入文件名 |
| 14 | import_time | TIMESTAMPTZ | YES | 导入时间 |
| 15 | import_user | VARCHAR(50) | YES | 导入操作人 |
| 16 | remark | TEXT | YES | 备注 |
| 17 | created_at | TIMESTAMPTZ | NO | 创建时间 |
| 18 | updated_at | TIMESTAMPTZ | NO | 更新时间 |
## Excel导入模板
| 月份 | 助教号 | 助教花名 | 充值订单金额 | 提成金额 | 备注 |
|------|--------|----------|--------------|----------|------|
| 2026-01 | 1 | 小燕 | 5000.00 | 300.00 | ge |
| 2026-01 | 2 | 小明 | 3000.00 | 180.00 | 续充 |
### 导入规则
- **月份**: 必填,格式 2026-01 或 2026/01/01
- **助教号**: 必填,数字(如 1, 2, 31
- **助教花名**: 必填,与助教号组合确定唯一助教
- **充值订单金额**: 选填,单位:元
- **提成金额**: 必填,单位:元
- **备注**: 选填
### 助教匹配逻辑
```sql
-- 通过 assistant_no + nickname 查找 assistant_id
SELECT assistant_id
FROM billiards_dwd.dim_assistant
WHERE assistant_no = :assistant_no
AND nickname = :nickname
AND scd2_is_current = 1;
```
## 使用说明
**汇总到薪资计算**
```sql
-- 获取助教某月的充值提成总额
SELECT
assistant_id,
commission_month,
SUM(commission_amount) AS total_commission
FROM billiards_dws.dws_assistant_recharge_commission
WHERE commission_month = '2026-01-01'
GROUP BY assistant_id, commission_month;
```
## 可回溯性
| 项目 | 说明 |
|------|------|
| 可回溯 | ❌ 不可自动回溯 |
| 原因 | 数据来源为Excel手工导入DWD层无此数据 |
| 处理 | 需要人工补录历史数据 |

View File

@@ -0,0 +1,98 @@
# dws_assistant_salary_calc 助教工资计算详情表
> 生成时间2026-02-03
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | billiards_dws |
| 表名 | dws_assistant_salary_calc |
| 主键 | id |
| 唯一键 | (site_id, assistant_id, salary_month) |
| 数据来源 | dws_assistant_monthly_summary + cfg_* 配置表 |
| 更新频率 | 月初计算上月工资 |
| 说明 | 以"助教+月份"为粒度,计算月度工资明细 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 说明 |
|------|--------|------|------|------|
| 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 | salary_month | DATE | NO | 工资月份(月第一天) |
| 7 | assistant_level_code | INTEGER | YES | 助教等级代码 |
| 8 | assistant_level_name | VARCHAR(20) | YES | 助教等级名称 |
| 9 | hire_date | DATE | YES | 入职日期 |
| 10 | is_new_hire | BOOLEAN | NO | 是否新入职 |
| 11 | effective_hours | NUMERIC(10,2) | NO | 有效业绩小时数 |
| 12 | base_hours | NUMERIC(10,2) | NO | 基础课小时数 |
| 13 | bonus_hours | NUMERIC(10,2) | NO | 附加课小时数 |
| 14 | tier_id | INTEGER | YES | 档位ID |
| 15 | tier_code | VARCHAR(20) | YES | 档位代码 |
| 16 | tier_name | VARCHAR(50) | YES | 档位名称 |
| 17 | rank_with_ties | INTEGER | YES | 月度排名(考虑并列) |
| 18 | base_course_price | NUMERIC(10,2) | NO | 基础课客户支付价格 |
| 19 | bonus_course_price | NUMERIC(10,2) | NO | 附加课客户支付价格固定190 |
| 20 | base_deduction | NUMERIC(10,2) | NO | 专业课抽成(元/小时) |
| 21 | bonus_deduction_ratio | NUMERIC(5,4) | NO | 打赏课抽成比例 |
| 22 | base_income | NUMERIC(12,2) | NO | 基础课收入 |
| 23 | bonus_income | NUMERIC(12,2) | NO | 附加课收入 |
| 24 | total_course_income | NUMERIC(12,2) | NO | 课时收入合计 |
| 25 | sprint_bonus | NUMERIC(12,2) | NO | 冲刺奖金 |
| 26 | top_rank_bonus | NUMERIC(12,2) | NO | Top3排名奖金 |
| 27 | recharge_commission | NUMERIC(12,2) | NO | 充值提成 |
| 28 | other_bonus | NUMERIC(12,2) | NO | 其他奖金 |
| 29 | total_bonus | NUMERIC(12,2) | NO | 奖金合计 |
| 30 | gross_salary | NUMERIC(12,2) | NO | 应发工资 |
| 31 | vacation_days | INTEGER | NO | 次月可休假天数 |
| 32 | vacation_unlimited | BOOLEAN | NO | 休假自由标记 |
| 33 | calc_notes | TEXT | YES | 计算备注 |
| 34 | created_at | TIMESTAMPTZ | NO | 创建时间 |
| 35 | updated_at | TIMESTAMPTZ | NO | 更新时间 |
## 工资计算公式
### 课时收入
```
基础课收入 = base_hours × (base_course_price - base_deduction)
附加课收入 = bonus_hours × 190 × (1 - bonus_deduction_ratio)
课时收入合计 = 基础课收入 + 附加课收入
```
### 奖金
```
冲刺奖金: H>=190得300元, H>=220得800元不累计取最高
Top3奖金: 1st=1000元, 2nd=600元, 3rd=400元
充值提成: 来自dws_assistant_recharge_commission
```
### 应发工资
```
gross_salary = total_course_income + total_bonus
```
## 计算示例
| 项目 | 数值 | 计算过程 |
|------|------|----------|
| 基础课小时数 | 170 | 来自monthly_summary |
| 附加课小时数 | 15 | 来自monthly_summary |
| 等级 | 中级(20) | base_course_price=108 |
| 档位 | T3 | base_deduction=13, bonus_ratio=0.35 |
| 基础课收入 | 16,150 | 170 × (108-13) |
| 附加课收入 | 1,852.5 | 15 × 190 × 0.65 |
| 冲刺奖金 | 300 | 185>=190 |
| 应发工资 | 18,302.5 | 16,150 + 1,852.5 + 300 |
## 可回溯性
| 项目 | 说明 |
|------|------|
| 可回溯 | ⚠️ 部分可回溯 |
| 数据范围 | 2025年8月起 |
| 依赖表 | dws_assistant_monthly_summary, cfg_*, dws_assistant_recharge_commission |
| 限制 | 充值提成需手工导入历史数据 |

View File

@@ -0,0 +1,125 @@
# dws_finance_daily_summary 财务日度汇总表
> 生成时间2026-02-03
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | billiards_dws |
| 表名 | dws_finance_daily_summary |
| 主键 | id |
| 唯一键 | (site_id, stat_date) |
| 数据来源 | dwd_settlement_head + 多个DWD事实表 |
| 更新频率 | 每小时更新当日数据 |
| 说明 | 以"日期"为粒度,汇总当日财务数据 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 说明 |
|------|--------|------|------|------|
| 1 | id | BIGSERIAL | NO | 自增主键 |
| 2 | site_id | BIGINT | NO | 门店ID |
| 3 | tenant_id | BIGINT | NO | 租户ID |
| 4 | stat_date | DATE | NO | 统计日期 |
| 5 | gross_amount | NUMERIC(14,2) | NO | 发生额合计 |
| 6 | table_fee_amount | NUMERIC(14,2) | NO | 台费正价 |
| 7 | goods_amount | NUMERIC(14,2) | NO | 商品正价 |
| 8 | assistant_pd_amount | NUMERIC(14,2) | NO | 助教基础课正价(陪打) |
| 9 | assistant_cx_amount | NUMERIC(14,2) | NO | 助教激励课正价(超休) |
| 10 | discount_total | NUMERIC(14,2) | NO | 优惠合计 |
| 11 | discount_groupbuy | NUMERIC(14,2) | NO | 团购优惠 |
| 12 | discount_vip | NUMERIC(14,2) | NO | 会员折扣 |
| 13 | discount_gift_card | NUMERIC(14,2) | NO | 赠送卡抵扣 |
| 14 | discount_manual | NUMERIC(14,2) | NO | 手动调整 |
| 15 | discount_rounding | NUMERIC(14,2) | NO | 抹零 |
| 16 | discount_other | NUMERIC(14,2) | NO | 其他优惠 |
| 17 | confirmed_income | NUMERIC(14,2) | NO | 确认收入 = 发生额 - 优惠 |
| 18 | cash_inflow_total | NUMERIC(14,2) | NO | 现金流入合计 |
| 19 | cash_pay_amount | NUMERIC(14,2) | NO | 收银实付 |
| 20 | groupbuy_pay_amount | NUMERIC(14,2) | NO | 团购支付金额 |
| 21 | platform_settlement_amount | NUMERIC(14,2) | NO | 平台回款金额(导入) |
| 22 | platform_fee_amount | NUMERIC(14,2) | NO | 平台佣金+服务费(导入) |
| 23 | recharge_cash_inflow | NUMERIC(14,2) | NO | 充值现金流入 |
| 24 | card_consume_total | NUMERIC(14,2) | NO | 卡消费合计 |
| 25 | cash_card_consume | NUMERIC(14,2) | NO | 储值卡消费 |
| 26 | gift_card_consume | NUMERIC(14,2) | NO | 赠送卡消费 |
| 27 | cash_outflow_total | NUMERIC(14,2) | NO | 现金流出合计 |
| 28 | cash_balance_change | NUMERIC(14,2) | NO | 现金余额变动 |
| 29 | recharge_count | INTEGER | NO | 充值笔数 |
| 30 | recharge_total | NUMERIC(14,2) | NO | 充值总额(含赠送) |
| 31 | recharge_cash | NUMERIC(14,2) | NO | 充值现金部分 |
| 32 | recharge_gift | NUMERIC(14,2) | NO | 充值赠送部分 |
| 33 | first_recharge_count | INTEGER | NO | 首充笔数 |
| 34 | first_recharge_amount | NUMERIC(14,2) | NO | 首充金额 |
| 35 | renewal_count | INTEGER | NO | 续充笔数 |
| 36 | renewal_amount | NUMERIC(14,2) | NO | 续充金额 |
| 37 | order_count | INTEGER | NO | 结账单数 |
| 38 | member_order_count | INTEGER | NO | 会员订单数 |
| 39 | guest_order_count | INTEGER | NO | 散客订单数 |
| 40 | avg_order_amount | NUMERIC(12,2) | NO | 平均客单价 |
| 41 | created_at | TIMESTAMPTZ | NO | 创建时间 |
| 42 | updated_at | TIMESTAMPTZ | NO | 更新时间 |
## 数据来源
### 结账汇总dwd_settlement_head
```sql
SELECT
DATE(pay_time) AS stat_date,
SUM(table_charge_money) AS table_fee_amount,
SUM(goods_money) AS goods_amount,
SUM(assistant_pd_money) AS assistant_pd_amount,
SUM(assistant_cx_money) AS assistant_cx_amount,
SUM(member_discount_amount) AS discount_vip,
SUM(adjust_amount) AS discount_manual,
SUM(rounding_amount) AS discount_rounding,
SUM(pay_amount) AS cash_pay_amount,
SUM(balance_amount) AS cash_card_consume,
SUM(gift_card_amount) AS gift_card_consume,
COUNT(*) AS order_count
FROM billiards_dwd.dwd_settlement_head
WHERE settle_type = 1
GROUP BY DATE(pay_time);
```
### 团购核销dwd_groupbuy_redemption
```sql
SELECT
DATE(create_time) AS stat_date,
SUM(coupon_money) AS groupbuy_pay_amount
FROM billiards_dwd.dwd_groupbuy_redemption
WHERE is_delete = 0
GROUP BY DATE(create_time);
```
### 充值订单dwd_recharge_order
```sql
SELECT
DATE(pay_time) AS stat_date,
COUNT(*) AS recharge_count,
SUM(pay_amount) AS recharge_cash,
SUM(point_amount) AS recharge_gift,
SUM(CASE WHEN is_first = 1 THEN 1 ELSE 0 END) AS first_recharge_count
FROM billiards_dwd.dwd_recharge_order
GROUP BY DATE(pay_time);
```
## 使用说明
**计算公式**
```
gross_amount = table_fee_amount + goods_amount + assistant_pd_amount + assistant_cx_amount
discount_total = discount_groupbuy + discount_vip + discount_gift_card + discount_manual + discount_rounding + discount_other
confirmed_income = gross_amount - discount_total
cash_inflow_total = cash_pay_amount + groupbuy_pay_amount + platform_settlement_amount + recharge_cash_inflow
```
## 可回溯性
| 项目 | 说明 |
|------|------|
| 可回溯 | ✅ 完全可回溯 |
| 数据范围 | 2025-07-16 ~ 至今 |
| 依赖表 | dwd_settlement_head, dwd_groupbuy_redemption, dwd_recharge_order, dws_platform_settlement |
| 注意 | platform_settlement需Excel导入 |

View File

@@ -0,0 +1,90 @@
# dws_finance_discount_detail 优惠明细表
> 生成时间2026-02-03
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | billiards_dws |
| 表名 | dws_finance_discount_detail |
| 主键 | id |
| 唯一键 | (site_id, stat_date, discount_type_code) |
| 数据来源 | dwd_settlement_head + dwd_groupbuy_redemption |
| 更新频率 | 每日更新 |
| 说明 | 以"日期+优惠类型"为粒度,分析优惠构成 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 说明 |
|------|--------|------|------|------|
| 1 | id | BIGSERIAL | NO | 自增主键 |
| 2 | site_id | BIGINT | NO | 门店ID |
| 3 | tenant_id | BIGINT | NO | 租户ID |
| 4 | stat_date | DATE | NO | 统计日期 |
| 5 | discount_type_code | VARCHAR(30) | NO | 优惠类型代码 |
| 6 | discount_type_name | VARCHAR(50) | NO | 优惠类型名称 |
| 7 | discount_amount | NUMERIC(14,2) | NO | 优惠金额 |
| 8 | discount_ratio | NUMERIC(5,4) | NO | 优惠占比(占总优惠) |
| 9 | usage_count | INTEGER | NO | 使用次数 |
| 10 | affected_orders | INTEGER | NO | 影响订单数 |
| 11 | created_at | TIMESTAMPTZ | NO | 创建时间 |
| 12 | updated_at | TIMESTAMPTZ | NO | 更新时间 |
## 优惠类型说明
| discount_type_code | discount_type_name | 数据来源 |
|--------------------|--------------------|----------|
| GROUPBUY | 团购优惠 | dwd_settlement_head.coupon_amount |
| VIP | 会员折扣 | dwd_settlement_head.member_discount_amount |
| GIFT_CARD | 赠送卡抵扣 | dwd_settlement_head.gift_card_amount |
| MANUAL | 手动调整 | dwd_settlement_head.adjust_amount |
| ROUNDING | 抹零 | dwd_settlement_head.rounding_amount |
| BIG_CUSTOMER | 大客户优惠 | dwd_settlement_head特定会员优惠 |
| OTHER | 其他优惠 | 其他无法归类的优惠 |
## 数据来源
```sql
-- 从结账头表提取各类优惠
SELECT
DATE(pay_time) AS stat_date,
'VIP' AS discount_type_code,
'会员折扣' AS discount_type_name,
SUM(member_discount_amount) AS discount_amount,
COUNT(CASE WHEN member_discount_amount > 0 THEN 1 END) AS usage_count,
COUNT(DISTINCT CASE WHEN member_discount_amount > 0 THEN order_settle_id END) AS affected_orders
FROM billiards_dwd.dwd_settlement_head
WHERE settle_type = 1
GROUP BY DATE(pay_time)
UNION ALL
SELECT
DATE(pay_time) AS stat_date,
'GROUPBUY' AS discount_type_code,
'团购优惠' AS discount_type_name,
SUM(coupon_amount) AS discount_amount,
COUNT(CASE WHEN coupon_amount > 0 THEN 1 END) AS usage_count,
COUNT(DISTINCT CASE WHEN coupon_amount > 0 THEN order_settle_id END) AS affected_orders
FROM billiards_dwd.dwd_settlement_head
WHERE settle_type = 1
GROUP BY DATE(pay_time)
-- ... 其他优惠类型
```
## 使用说明
**占比计算**
```sql
discount_ratio = discount_amount / SUM(discount_amount) OVER (PARTITION BY stat_date)
```
## 可回溯性
| 项目 | 说明 |
|------|------|
| 可回溯 | ✅ 完全可回溯 |
| 数据范围 | 2025-07-16 ~ 至今 |
| 依赖表 | dwd_settlement_head, dwd_groupbuy_redemption |

View File

@@ -0,0 +1,87 @@
# dws_finance_expense_summary 支出结构表
> 生成时间2026-02-03
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | billiards_dws |
| 表名 | dws_finance_expense_summary |
| 主键 | id |
| 唯一键 | (site_id, expense_month, expense_type_code, import_batch_no) |
| 数据来源 | Excel手动导入 |
| 更新频率 | 按需导入 |
| 说明 | 以"月份+支出类型"为粒度,记录支出数据 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 说明 |
|------|--------|------|------|------|
| 1 | id | BIGSERIAL | NO | 自增主键 |
| 2 | site_id | BIGINT | NO | 门店ID |
| 3 | tenant_id | BIGINT | NO | 租户ID |
| 4 | expense_month | DATE | NO | 支出月份(月第一天) |
| 5 | expense_type_code | VARCHAR(30) | NO | 支出类型代码 |
| 6 | expense_type_name | VARCHAR(50) | NO | 支出类型名称 |
| 7 | expense_category | VARCHAR(20) | YES | 支出大类 |
| 8 | expense_amount | NUMERIC(14,2) | NO | 支出金额 |
| 9 | expense_detail | TEXT | YES | 支出明细说明 |
| 10 | import_batch_no | VARCHAR(50) | YES | 导入批次号 |
| 11 | import_file_name | VARCHAR(200) | YES | 导入文件名 |
| 12 | import_time | TIMESTAMPTZ | YES | 导入时间 |
| 13 | import_user | VARCHAR(50) | YES | 导入操作人 |
| 14 | remark | TEXT | YES | 备注 |
| 15 | created_at | TIMESTAMPTZ | NO | 创建时间 |
| 16 | updated_at | TIMESTAMPTZ | NO | 更新时间 |
## 支出类型说明
| expense_type_code | expense_type_name | expense_category |
|-------------------|-------------------|------------------|
| RENT | 房租 | FIXED_COST |
| UTILITY | 水电费 | FIXED_COST |
| PROPERTY | 物业费 | FIXED_COST |
| SALARY | 工资 | VARIABLE_COST |
| REIMBURSE | 报销 | VARIABLE_COST |
| PLATFORM_FEE | 平台费用 | VARIABLE_COST |
| MAINTENANCE | 维修保养 | VARIABLE_COST |
| CONSUMABLES | 耗材 | VARIABLE_COST |
| MARKETING | 营销费用 | VARIABLE_COST |
| OTHER | 其他 | OTHER |
## Excel导入模板
| 月份 | 支出类型 | 支出金额 | 明细说明 | 备注 |
|------|----------|----------|----------|------|
| 2026-01 | 房租 | 50000.00 | 1月房租 | |
| 2026-01 | 水电费 | 8000.00 | 1月水电 | |
| 2026-01 | 工资 | 120000.00 | 员工工资 | |
### 导入规则
- **月份**: 必填,格式 2026-01 或 2026/01/01
- **支出类型**: 必填,需匹配支出类型名称
- **支出金额**: 必填,单位:元
- **明细说明**: 选填
- **备注**: 选填
## 使用说明
**月度支出汇总**
```sql
SELECT
expense_month,
expense_category,
SUM(expense_amount) AS total_expense
FROM billiards_dws.dws_finance_expense_summary
GROUP BY expense_month, expense_category
ORDER BY expense_month, expense_category;
```
## 可回溯性
| 项目 | 说明 |
|------|------|
| 可回溯 | ❌ 不可自动回溯 |
| 原因 | 数据来源为Excel手工导入DWD层无此数据 |
| 处理 | 需要人工补录历史数据 |

View File

@@ -0,0 +1,88 @@
# dws_finance_income_structure 收入结构分析表
> 生成时间2026-02-03
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | billiards_dws |
| 表名 | dws_finance_income_structure |
| 主键 | id |
| 唯一键 | (site_id, stat_date, structure_type, category_code) |
| 数据来源 | dwd_table_fee_log + dwd_assistant_service_log + cfg_area_category |
| 更新频率 | 每日更新 |
| 说明 | 以"日期+区域/类型"为粒度,分析收入结构 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 说明 |
|------|--------|------|------|------|
| 1 | id | BIGSERIAL | NO | 自增主键 |
| 2 | site_id | BIGINT | NO | 门店ID |
| 3 | tenant_id | BIGINT | NO | 租户ID |
| 4 | stat_date | DATE | NO | 统计日期 |
| 5 | structure_type | VARCHAR(20) | NO | 结构类型。**枚举值**: AREA区域, INCOME_TYPE收入类型 |
| 6 | category_code | VARCHAR(30) | NO | 分类代码 |
| 7 | category_name | VARCHAR(50) | NO | 分类名称 |
| 8 | income_amount | NUMERIC(14,2) | NO | 收入金额 |
| 9 | income_ratio | NUMERIC(5,4) | NO | 收入占比 |
| 10 | order_count | INTEGER | NO | 订单数 |
| 11 | duration_minutes | INTEGER | NO | 时长(分钟) |
| 12 | created_at | TIMESTAMPTZ | NO | 创建时间 |
| 13 | updated_at | TIMESTAMPTZ | NO | 更新时间 |
## 分类代码说明
### 按区域分析 (structure_type = 'AREA')
| category_code | category_name | 来源 |
|---------------|---------------|------|
| BILLIARD | 台球散台 | A区/B区/C区/TV台 |
| BILLIARD_VIP | 台球VIP | VIP包厢 |
| SNOOKER | 斯诺克 | 斯诺克区 |
| MAHJONG | 麻将棋牌 | 麻将房/M7/M8/666/发财 |
| KTV | K歌娱乐 | K包/k包活动区/幸会158 |
| SPECIAL | 补时长 | 补时长 |
| OTHER | 其他 | 未映射区域 |
### 按收入类型分析 (structure_type = 'INCOME_TYPE')
| category_code | category_name |
|---------------|---------------|
| TABLE_FEE | 台费收入 |
| GOODS | 商品收入 |
| ASSISTANT_BASE | 助教基础课收入 |
| ASSISTANT_BONUS | 助教附加课收入 |
## 数据来源
### 按区域汇总台费
```sql
SELECT
DATE(tfl.ledger_end_time) AS stat_date,
COALESCE(ac.category_code, 'OTHER') AS category_code,
COALESCE(ac.category_name, '其他') AS category_name,
SUM(tfl.ledger_amount) AS income_amount,
SUM(tfl.ledger_count) AS duration_seconds,
COUNT(DISTINCT tfl.order_settle_id) AS order_count
FROM billiards_dwd.dwd_table_fee_log tfl
LEFT JOIN billiards_dwd.dim_table dt ON dt.table_id = tfl.site_table_id
LEFT JOIN billiards_dws.cfg_area_category ac ON dt.site_table_area_name = ac.source_area_name
WHERE tfl.is_delete = 0
GROUP BY DATE(tfl.ledger_end_time), COALESCE(ac.category_code, 'OTHER'), COALESCE(ac.category_name, '其他');
```
## 使用说明
**占比计算**
```sql
-- income_ratio = 当前分类收入 / 当日总收入
income_ratio = income_amount / SUM(income_amount) OVER (PARTITION BY stat_date, structure_type)
```
## 可回溯性
| 项目 | 说明 |
|------|------|
| 可回溯 | ✅ 完全可回溯 |
| 数据范围 | 2025-07-21 ~ 至今 |
| 依赖表 | dwd_table_fee_log, dwd_assistant_service_log, dim_table, cfg_area_category |

View File

@@ -0,0 +1,95 @@
# dws_finance_recharge_summary 充值统计表
> 生成时间2026-02-03
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | billiards_dws |
| 表名 | dws_finance_recharge_summary |
| 主键 | id |
| 唯一键 | (site_id, stat_date) |
| 数据来源 | dwd_recharge_order |
| 更新频率 | 每日更新 |
| 说明 | 以"日期"为粒度,统计充值数据,区分首充/续充 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 说明 |
|------|--------|------|------|------|
| 1 | id | BIGSERIAL | NO | 自增主键 |
| 2 | site_id | BIGINT | NO | 门店ID |
| 3 | tenant_id | BIGINT | NO | 租户ID |
| 4 | stat_date | DATE | NO | 统计日期 |
| 5 | recharge_count | INTEGER | NO | 充值笔数 |
| 6 | recharge_total | NUMERIC(14,2) | NO | 充值总额(含赠送) |
| 7 | recharge_cash | NUMERIC(14,2) | NO | 现金充值金额 |
| 8 | recharge_gift | NUMERIC(14,2) | NO | 赠送金额 |
| 9 | first_recharge_count | INTEGER | NO | 首充笔数 |
| 10 | first_recharge_cash | NUMERIC(14,2) | NO | 首充现金 |
| 11 | first_recharge_gift | NUMERIC(14,2) | NO | 首充赠送 |
| 12 | first_recharge_total | NUMERIC(14,2) | NO | 首充总额 |
| 13 | renewal_count | INTEGER | NO | 续充笔数 |
| 14 | renewal_cash | NUMERIC(14,2) | NO | 续充现金 |
| 15 | renewal_gift | NUMERIC(14,2) | NO | 续充赠送 |
| 16 | renewal_total | NUMERIC(14,2) | NO | 续充总额 |
| 17 | recharge_member_count | INTEGER | NO | 充值会员数(去重) |
| 18 | new_member_count | INTEGER | NO | 新增会员数 |
| 19 | total_card_balance | NUMERIC(14,2) | NO | 全部会员卡余额(当日末) |
| 20 | cash_card_balance | NUMERIC(14,2) | NO | 储值卡余额 |
| 21 | gift_card_balance | NUMERIC(14,2) | NO | 赠送卡余额 |
| 22 | created_at | TIMESTAMPTZ | NO | 创建时间 |
| 23 | updated_at | TIMESTAMPTZ | NO | 更新时间 |
## 数据来源
### 充值订单dwd_recharge_order
```sql
SELECT
DATE(pay_time) AS stat_date,
COUNT(*) AS recharge_count,
SUM(pay_amount + point_amount) AS recharge_total,
SUM(pay_amount) AS recharge_cash,
SUM(point_amount) AS recharge_gift,
-- 首充
SUM(CASE WHEN is_first = 1 THEN 1 ELSE 0 END) AS first_recharge_count,
SUM(CASE WHEN is_first = 1 THEN pay_amount ELSE 0 END) AS first_recharge_cash,
SUM(CASE WHEN is_first = 1 THEN point_amount ELSE 0 END) AS first_recharge_gift,
-- 续充
SUM(CASE WHEN is_first = 0 THEN 1 ELSE 0 END) AS renewal_count,
SUM(CASE WHEN is_first = 0 THEN pay_amount ELSE 0 END) AS renewal_cash,
-- 会员数
COUNT(DISTINCT member_id) AS recharge_member_count
FROM billiards_dwd.dwd_recharge_order
GROUP BY DATE(pay_time);
```
### 卡余额快照dim_member_card_account
```sql
-- 截至stat_date当日末的卡余额
SELECT
SUM(balance) AS total_card_balance,
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 billiards_dwd.dim_member_card_account
WHERE scd2_start_time <= :stat_date + INTERVAL '1 day'
AND (scd2_end_time IS NULL OR scd2_end_time > :stat_date + INTERVAL '1 day');
```
## 使用说明
**首充判断**
- is_first = 1: 首充
- is_first = 0: 续充
**储值卡ID**
- 储值卡 card_type_id = 2793249295533893
## 可回溯性
| 项目 | 说明 |
|------|------|
| 可回溯 | ✅ 完全可回溯 |
| 数据范围 | 2025-07-21 ~ 至今 |
| 依赖表 | dwd_recharge_order, dim_member_card_account |

View File

@@ -0,0 +1,102 @@
# dws_member_consumption_summary 会员消费汇总表
> 生成时间2026-02-03
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | billiards_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 | 会员IDmember_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 | 累计消费金额 |
| 14 | total_recharge_amount | NUMERIC(14,2) | NO | 累计充值金额 |
| 15 | total_table_fee | NUMERIC(14,2) | NO | 累计台费 |
| 16 | total_goods_amount | NUMERIC(14,2) | NO | 累计商品消费 |
| 17 | total_assistant_amount | NUMERIC(14,2) | NO | 累计助教服务消费 |
| 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 | cash_card_balance | NUMERIC(14,2) | NO | 储值卡余额 |
| 31 | gift_card_balance | NUMERIC(14,2) | NO | 赠送卡余额 |
| 32 | total_card_balance | NUMERIC(14,2) | NO | 总卡余额 |
| 33 | days_since_last | INTEGER | YES | 距离最近消费的天数 |
| 34 | is_active_7d | BOOLEAN | NO | 近7天是否活跃 |
| 35 | is_active_30d | BOOLEAN | NO | 近30天是否活跃 |
| 36 | is_active_90d | BOOLEAN | NO | 近90天是否活跃 |
| 37 | customer_tier | VARCHAR(20) | YES | 客户分层(高价值/中等/低活跃/流失) |
| 38 | created_at | TIMESTAMPTZ | NO | 创建时间 |
| 39 | updated_at | TIMESTAMPTZ | NO | 更新时间 |
## 数据来源
### 消费统计来源dwd_settlement_head
```sql
SELECT
site_id,
member_id,
DATE(pay_time) AS consume_date,
COUNT(*) AS visit_count,
SUM(consume_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 billiards_dwd.dwd_settlement_head
WHERE member_id != 0 -- 排除散客
AND settle_type = 1 -- 已结账
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 billiards_dwd.dim_member_card_account
WHERE scd2_is_current = 1
GROUP BY tenant_member_id;
```
## 使用说明
**散客处理**
- member_id=0 的散客不进入此表统计
**客户分层规则**
```sql
customer_tier = CASE
WHEN consume_amount_30d >= 1000 THEN '高价值'
WHEN consume_amount_30d >= 300 THEN '中等'
WHEN is_active_30d THEN '低活跃'
ELSE '流失'
END
```
## 可回溯性
| 项目 | 说明 |
|------|------|
| 可回溯 | ✅ 完全可回溯 |
| 数据范围 | 2025-07-16 ~ 至今 |
| 依赖表 | dwd_settlement_head, dim_member, dim_member_card_account |

View File

@@ -0,0 +1,119 @@
# dws_member_visit_detail 会员来店明细表
> 生成时间2026-02-03
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | billiards_dws |
| 表名 | dws_member_visit_detail |
| 主键 | id |
| 唯一键 | (site_id, member_id, order_settle_id) |
| 数据来源 | 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散客不入此表 |
| 5 | order_settle_id | BIGINT | NO | 结账单ID |
| 6 | visit_date | DATE | NO | 来店日期 |
| 7 | visit_time | TIMESTAMPTZ | YES | 来店时间 |
| 8 | member_nickname | VARCHAR(100) | YES | 会员昵称 |
| 9 | member_mobile | VARCHAR(20) | YES | 手机号 |
| 10 | member_birthday | DATE | YES | 会员生日 |
| 11 | table_id | BIGINT | YES | 台桌ID |
| 12 | table_name | VARCHAR(50) | YES | 台桌名称 |
| 13 | area_name | VARCHAR(50) | YES | 区域名称(原始) |
| 14 | area_category | VARCHAR(20) | YES | 区域分类 |
| 15 | table_fee | NUMERIC(12,2) | NO | 台费 |
| 16 | goods_amount | NUMERIC(12,2) | NO | 商品金额 |
| 17 | assistant_amount | NUMERIC(12,2) | NO | 助教服务金额 |
| 18 | total_consume | NUMERIC(12,2) | NO | 消费总额(正价) |
| 19 | total_discount | NUMERIC(12,2) | NO | 优惠总额 |
| 20 | actual_pay | NUMERIC(12,2) | NO | 实付金额 |
| 21 | cash_pay | NUMERIC(12,2) | NO | 现金/刷卡支付 |
| 22 | cash_card_pay | NUMERIC(12,2) | NO | 储值卡支付 |
| 23 | gift_card_pay | NUMERIC(12,2) | NO | 赠送卡支付 |
| 24 | groupbuy_pay | NUMERIC(12,2) | NO | 团购券支付 |
| 25 | table_duration_min | INTEGER | NO | 台桌使用时长(分钟) |
| 26 | assistant_duration_min | INTEGER | NO | 助教服务时长(分钟) |
| 27 | assistant_services | JSONB | YES | 助教服务列表 |
| 28 | created_at | TIMESTAMPTZ | NO | 创建时间 |
| 29 | updated_at | TIMESTAMPTZ | NO | 更新时间 |
## 数据来源
### 主表来源dwd_settlement_head
```sql
SELECT
site_id,
tenant_id,
member_id,
order_settle_id,
DATE(pay_time) AS visit_date,
pay_time AS visit_time,
member_name AS member_nickname,
member_phone AS member_mobile,
table_id,
table_charge_money AS table_fee,
goods_money AS goods_amount,
assistant_pd_money + assistant_cx_money AS assistant_amount,
consume_money AS total_consume,
member_discount_amount + coupon_amount + adjust_amount AS total_discount,
pay_amount AS actual_pay,
balance_amount AS cash_card_pay,
gift_card_amount AS gift_card_pay
FROM billiards_dwd.dwd_settlement_head
WHERE member_id != 0
AND settle_type = 1;
```
### 助教服务明细dwd_assistant_service_log
```sql
-- 聚合为JSONB格式
SELECT
order_settle_id,
jsonb_agg(jsonb_build_object(
'assistant_id', site_assistant_id,
'nickname', nickname,
'duration_min', income_seconds / 60,
'amount', ledger_amount
)) AS assistant_services
FROM billiards_dwd.dwd_assistant_service_log
GROUP BY order_settle_id;
```
## 使用说明
**assistant_services JSON格式**
```json
[
{"assistant_id": 123, "nickname": "小燕", "duration_min": 60, "amount": 108.00},
{"assistant_id": 456, "nickname": "小明", "duration_min": 30, "amount": 54.00}
]
```
**区域分类映射**
```sql
-- 通过cfg_area_category映射
area_category = COALESCE(
(SELECT category_name FROM billiards_dws.cfg_area_category
WHERE source_area_name = dim_table.site_table_area_name),
'其他'
)
```
## 可回溯性
| 项目 | 说明 |
|------|------|
| 可回溯 | ✅ 完全可回溯 |
| 数据范围 | 2025-07-16 ~ 至今 |
| 依赖表 | dwd_settlement_head, dwd_assistant_service_log, dim_table, dim_member |

View File

@@ -0,0 +1,100 @@
# dws_platform_settlement 平台回款/服务费表
> 生成时间2026-02-03
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | billiards_dws |
| 表名 | dws_platform_settlement |
| 主键 | id |
| 数据来源 | Excel手动导入 |
| 更新频率 | 按需导入 |
| 说明 | 以"回款日期+平台+订单"为粒度,记录平台结算数据 |
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 说明 |
|------|--------|------|------|------|
| 1 | id | BIGSERIAL | NO | 自增主键 |
| 2 | site_id | BIGINT | NO | 门店ID |
| 3 | tenant_id | BIGINT | NO | 租户ID |
| 4 | settlement_date | DATE | NO | 回款日期 |
| 5 | platform_type | VARCHAR(30) | NO | 平台类型。**枚举值**: MEITUAN, DOUYIN, DIANPING, OTHER |
| 6 | platform_name | VARCHAR(50) | YES | 平台名称 |
| 7 | platform_order_no | VARCHAR(100) | YES | 平台订单号 |
| 8 | order_settle_id | BIGINT | YES | 关联的结账单ID |
| 9 | settlement_amount | NUMERIC(14,2) | NO | 回款金额(实际入账) |
| 10 | commission_amount | NUMERIC(14,2) | NO | 佣金(平台抽成) |
| 11 | service_fee | NUMERIC(14,2) | NO | 服务费 |
| 12 | gross_amount | NUMERIC(14,2) | NO | 订单原始金额 |
| 13 | import_batch_no | VARCHAR(50) | YES | 导入批次号 |
| 14 | import_file_name | VARCHAR(200) | YES | 导入文件名 |
| 15 | import_time | TIMESTAMPTZ | YES | 导入时间 |
| 16 | import_user | VARCHAR(50) | YES | 导入操作人 |
| 17 | remark | TEXT | YES | 备注 |
| 18 | created_at | TIMESTAMPTZ | NO | 创建时间 |
| 19 | updated_at | TIMESTAMPTZ | NO | 更新时间 |
## 平台类型说明
| platform_type | platform_name | 说明 |
|---------------|---------------|------|
| MEITUAN | 美团 | 美团团购/外卖 |
| DOUYIN | 抖音 | 抖音团购 |
| DIANPING | 大众点评 | 大众点评团购 |
| OTHER | 其他 | 其他平台 |
## Excel导入模板
| 回款日期 | 平台 | 平台订单号 | 订单金额 | 回款金额 | 佣金 | 服务费 | 备注 |
|----------|------|------------|----------|----------|------|--------|------|
| 2026-01-15 | 美团 | MT202601150001 | 200.00 | 186.00 | 12.00 | 2.00 | |
| 2026-01-15 | 抖音 | DY202601150001 | 150.00 | 142.50 | 6.00 | 1.50 | |
### 导入规则
- **回款日期**: 必填,实际到账日期
- **平台**: 必填,美团/抖音/大众点评/其他
- **平台订单号**: 选填,用于追溯
- **订单金额**: 必填,订单原始金额
- **回款金额**: 必填,实际到账金额
- **佣金**: 选填,平台抽成
- **服务费**: 选填
### 金额关系
```
settlement_amount = gross_amount - commission_amount - service_fee
```
## 使用说明
**日度平台回款汇总**
```sql
SELECT
settlement_date,
platform_type,
SUM(settlement_amount) AS total_settlement,
SUM(commission_amount) AS total_commission,
SUM(service_fee) AS total_service_fee
FROM billiards_dws.dws_platform_settlement
GROUP BY settlement_date, platform_type
ORDER BY settlement_date, platform_type;
```
**关联到财务日度汇总**
```sql
-- dws_finance_daily_summary.platform_settlement_amount
SELECT stat_date, SUM(settlement_amount)
FROM billiards_dws.dws_platform_settlement
WHERE settlement_date = :stat_date
GROUP BY stat_date;
```
## 可回溯性
| 项目 | 说明 |
|------|------|
| 可回溯 | ❌ 不可自动回溯 |
| 原因 | 数据来源为Excel手工导入需从平台后台导出 |
| 处理 | 需要人工补录历史平台结算数据 |

View File

@@ -0,0 +1,585 @@
# DWS 数据字典
## 概述
DWSData Warehouse Service层是数据仓库的汇总层基于DWD明细层数据构建为上层应用和报表提供预聚合的数据服务。
### 表清单
| 分类 | 表名 | 说明 | 更新频率 |
|------|------|------|----------|
| **配置表** | cfg_performance_tier | 绩效档位配置 | 手动维护 |
| | cfg_assistant_level_price | 助教等级定价 | 手动维护 |
| | cfg_bonus_rules | 奖金规则配置 | 手动维护 |
| | cfg_area_category | 台区分类映射 | 手动维护 |
| | cfg_skill_type | 技能课程类型映射 | 手动维护 |
| **助教维度** | dws_assistant_daily_detail | 助教日度业绩明细 | 每小时 |
| | dws_assistant_monthly_summary | 助教月度业绩汇总 | 每日 |
| | dws_assistant_customer_stats | 助教服务客户统计 | 每日 |
| | dws_assistant_salary_calc | 助教工资计算详情 | 月初 |
| | dws_assistant_recharge_commission | 助教充值提成 | Excel导入 |
| **客户维度** | dws_member_consumption_summary | 会员消费汇总 | 每日 |
| | dws_member_visit_detail | 会员来店明细 | 每日 |
| **财务维度** | dws_finance_daily_summary | 财务日度汇总 | 每小时 |
| | dws_finance_income_structure | 收入结构分析 | 每日 |
| | dws_finance_discount_detail | 优惠明细 | 每日 |
| | dws_finance_recharge_summary | 充值统计 | 每日 |
| | dws_finance_expense_summary | 支出结构 | Excel导入 |
| | dws_assistant_finance_analysis | 助教收支分析 | 每日 |
| | dws_platform_settlement | 平台回款/服务费 | Excel导入 |
| **订单汇总** | dws_order_summary | 订单汇总 | 每日 |
---
## 一、配置表
### 1.1 cfg_performance_tier - 绩效档位配置
| 字段 | 类型 | 说明 |
|------|------|------|
| tier_id | SERIAL | 档位ID主键 |
| tier_code | VARCHAR(20) | 档位代码T0-T5, NEW |
| tier_name | VARCHAR(50) | 档位名称 |
| tier_level | INTEGER | 档位等级(-1=新入职, 0-5=正常档位) |
| min_hours | NUMERIC(10,2) | 最低业绩小时数阈值(>= |
| max_hours | NUMERIC(10,2) | 最高业绩小时数阈值(<NULL=无上限 |
| base_deduction | NUMERIC(10,2) | 专业课抽成(元/小时),球房从基础课扣除 |
| bonus_deduction_ratio | NUMERIC(5,4) | 打赏课抽成比例0-1球房从附加课扣除 |
| vacation_days | INTEGER | 次月可休假天数 |
| vacation_unlimited | BOOLEAN | 休假自由标记5档为TRUE |
| is_new_hire_tier | BOOLEAN | 是否为新入职专用档位 |
| effective_from | DATE | 生效起始日期 |
| effective_to | DATE | 生效截止日期 |
**档位配置来自DWS数据库处理需求.md**
| tier_code | tier_name | 业绩阈值 | 专业课抽成 | 打赏课抽成 | 休假 |
|-----------|-----------|----------|-----------|-----------|------|
| T0 | 0档-淘汰压力 | H < 100 | 28元/时 | 50% | 3天 |
| T1 | 1档-及格档 | 100 ≤ H < 130 | 18元/时 | 40% | 4天 |
| T2 | 2档-良好档 | 130 ≤ H < 160 | 15元/时 | 38% | 4天 |
| T3 | 3档-优秀档 | 160 ≤ H < 190 | 13元/时 | 35% | 5天 |
| T4 | 4档-卓越加速档 | 190 ≤ H < 220 | 10元/时 | 33% | 6天 |
| T5 | 5档-冠军加速档 | H ≥ 220 | 8元/时 | 30% | 休假自由 |
| NEW | 新入职档位 | - | 18元/时 | 40% | 4天 |
**业务规则:**
- 6档绩效T0-T5根据有效业绩小时数基础课+附加课)匹配
- 新入职档位月1日0点后入职者首月使用NEW档位按1档抽成标准
- 支持按时间生效,历史月份使用历史规则
### 1.2 cfg_assistant_level_price - 助教等级定价
| 字段 | 类型 | 说明 |
|------|------|------|
| price_id | SERIAL | 定价ID主键 |
| level_code | INTEGER | 等级代码8/10/20/30/40 |
| level_name | VARCHAR(20) | 等级名称 |
| base_course_price | NUMERIC(10,2) | 基础课客户支付价格(元/小时) |
| bonus_course_price | NUMERIC(10,2) | 附加课客户支付价格固定190元 |
| effective_from | DATE | 生效起始日期 |
| effective_to | DATE | 生效截止日期 |
**等级定价(客户支付价格):**
| level_code | level_name | 基础课价格 | 附加课价格 |
|------------|------------|-----------|-----------|
| 8 | 助教管理 | 98元/时 | 190元/时 |
| 10 | 初级 | 98元/时 | 190元/时 |
| 20 | 中级 | 108元/时 | 190元/时 |
| 30 | 高级 | 118元/时 | 190元/时 |
| 40 | 星级 | 138元/时 | 190元/时 |
**注意:** 此价格为客户支付价格,助教实际收入需减去档位抽成
### 1.3 cfg_bonus_rules - 奖金规则配置
| 字段 | 类型 | 说明 |
|------|------|------|
| rule_id | SERIAL | 规则ID主键 |
| rule_type | VARCHAR(20) | 规则类型SPRINT/TOP_RANK |
| rule_code | VARCHAR(30) | 规则代码 |
| rule_name | VARCHAR(50) | 规则名称 |
| threshold_hours | NUMERIC(10,2) | 小时数阈值(冲刺奖金) |
| rank_position | INTEGER | 排名位置Top奖金 |
| bonus_amount | NUMERIC(12,2) | 奖金金额(元) |
| is_cumulative | BOOLEAN | 是否可累计 |
| priority | INTEGER | 优先级 |
| effective_from | DATE | 生效起始日期 |
| effective_to | DATE | 生效截止日期 |
**业务规则:**
- 冲刺奖金H>=190得300元H>=220得800元不累计取最高档
- Top3奖金1st=1000元2nd=600元3rd=400元并列都算
### 1.4 cfg_area_category - 台区分类映射
| 字段 | 类型 | 说明 |
|------|------|------|
| category_id | SERIAL | 分类ID主键 |
| source_area_name | VARCHAR(100) | 源区域名称来自dim_table.site_table_area_name |
| category_code | VARCHAR(20) | 分类代码 |
| category_name | VARCHAR(50) | 分类名称 |
| match_type | VARCHAR(10) | 匹配类型exact/like/default |
| match_priority | INTEGER | 匹配优先级(数字越小优先级越高) |
| is_active | BOOLEAN | 是否启用 |
**分类代码基于BD_manual_dim_table.md实际数据**
| category_code | category_name | 匹配规则 |
|---------------|---------------|----------|
| BILLIARD | 普通台球区 | A区, B区, C区 |
| BILLIARD_VIP | VIP台球包厢 | VIP包厢 |
| SNOOKER | 斯诺克区 | 斯诺克区 |
| MAHJONG | 麻将房 | 麻将房 |
| KTV | KTV包间 | K包 |
| SPECIAL | 补时长专用 | 补时长 |
| OTHER | 其他区域 | 默认匹配 |
### 1.5 cfg_skill_type - 技能课程类型映射
| 字段 | 类型 | 说明 |
|------|------|------|
| skill_type_id | SERIAL | 映射ID主键 |
| skill_id | BIGINT | 技能ID |
| skill_name | VARCHAR(50) | 技能名称 |
| course_type_code | VARCHAR(10) | 课程类型代码 |
| course_type_name | VARCHAR(20) | 课程类型名称 |
| is_active | BOOLEAN | 是否启用 |
**课程类型:**
- BASE = 基础课/陪打
- BONUS = 附加课/超休
---
## 二、助教维度表
### 2.1 dws_assistant_daily_detail - 助教日度业绩明细
**粒度:** 助教 + 日期
| 字段 | 类型 | 说明 |
|------|------|------|
| id | BIGSERIAL | 主键 |
| site_id | BIGINT | 门店ID |
| tenant_id | BIGINT | 租户ID |
| assistant_id | BIGINT | 助教ID |
| assistant_nickname | VARCHAR(50) | 助教花名 |
| stat_date | DATE | 统计日期 |
| assistant_level_code | INTEGER | 助教等级代码SCD2 as-of |
| assistant_level_name | VARCHAR(20) | 助教等级名称 |
| total_service_count | INTEGER | 总服务次数 |
| base_service_count | INTEGER | 基础课服务次数 |
| bonus_service_count | INTEGER | 附加课服务次数 |
| total_seconds | INTEGER | 总计费时长(秒) |
| base_seconds | INTEGER | 基础课计费时长 |
| bonus_seconds | INTEGER | 附加课计费时长 |
| total_hours | NUMERIC(10,2) | 总计费小时数 |
| base_hours | NUMERIC(10,2) | 基础课小时数 |
| bonus_hours | NUMERIC(10,2) | 附加课小时数 |
| total_ledger_amount | NUMERIC(12,2) | 总计费金额 |
| base_ledger_amount | NUMERIC(12,2) | 基础课计费金额 |
| bonus_ledger_amount | NUMERIC(12,2) | 附加课计费金额 |
| unique_customers | INTEGER | 服务客户数(去重) |
| unique_tables | INTEGER | 服务台桌数(去重) |
| trashed_seconds | INTEGER | 被废除的服务时长 |
| trashed_count | INTEGER | 被废除的服务次数 |
**数据来源:** dwd_assistant_service_log + dwd_assistant_trash_event
### 2.2 dws_assistant_monthly_summary - 助教月度业绩汇总
**粒度:** 助教 + 月份
| 字段 | 类型 | 说明 |
|------|------|------|
| id | BIGSERIAL | 主键 |
| site_id | BIGINT | 门店ID |
| assistant_id | BIGINT | 助教ID |
| stat_month | DATE | 统计月份(月第一天) |
| hire_date | DATE | 入职日期 |
| is_new_hire | BOOLEAN | 是否新入职 |
| work_days | INTEGER | 有服务天数 |
| total_hours | NUMERIC(10,2) | 总计费小时数 |
| base_hours | NUMERIC(10,2) | 基础课小时数 |
| bonus_hours | NUMERIC(10,2) | 附加课小时数 |
| effective_hours | NUMERIC(10,2) | 有效业绩小时数 |
| trashed_hours | NUMERIC(10,2) | 被废除小时数 |
| tier_id | INTEGER | 档位ID |
| tier_code | VARCHAR(20) | 档位代码 |
| tier_name | VARCHAR(50) | 档位名称 |
| rank_by_hours | INTEGER | 月度排名 |
| rank_with_ties | INTEGER | 考虑并列的排名 |
**业务规则:**
- 有效业绩 = total_hours - trashed_hours
- 新入职判断:入职日期 >= 月1日0点
- 排名按effective_hours降序并列都算
### 2.3 dws_assistant_customer_stats - 助教服务客户统计
**粒度:** 助教 + 客户 + 统计日期
| 字段 | 类型 | 说明 |
|------|------|------|
| id | BIGSERIAL | 主键 |
| assistant_id | BIGINT | 助教ID |
| member_id | BIGINT | 客户ID |
| stat_date | DATE | 统计基准日期 |
| first_service_date | DATE | 首次服务日期 |
| last_service_date | DATE | 最近服务日期 |
| total_service_count | INTEGER | 累计服务次数 |
| total_service_hours | NUMERIC(10,2) | 累计服务小时数 |
| service_count_7d | INTEGER | 近7天服务次数 |
| service_count_30d | INTEGER | 近30天服务次数 |
| service_count_90d | INTEGER | 近90天服务次数 |
| is_active_7d | BOOLEAN | 近7天是否活跃 |
| is_active_30d | BOOLEAN | 近30天是否活跃 |
**业务规则:**
- 散客member_id=0不进入此表
- 滚动窗口7/10/15/30/60/90天
### 2.4 dws_assistant_salary_calc - 助教工资计算详情
**粒度:** 助教 + 工资月份
| 字段 | 类型 | 说明 |
|------|------|------|
| id | BIGSERIAL | 主键 |
| assistant_id | BIGINT | 助教ID |
| assistant_nickname | VARCHAR(50) | 助教花名 |
| salary_month | DATE | 工资月份(月第一天) |
| assistant_level_code | INTEGER | 助教等级代码8/10/20/30/40 |
| assistant_level_name | VARCHAR(20) | 助教等级名称 |
| hire_date | DATE | 入职日期 |
| is_new_hire | BOOLEAN | 是否新入职 |
| effective_hours | NUMERIC(10,2) | 有效业绩小时数(基础课+附加课-废除) |
| base_hours | NUMERIC(10,2) | 基础课/专业课小时数 |
| bonus_hours | NUMERIC(10,2) | 附加课/打赏课小时数 |
| tier_id | INTEGER | 档位ID |
| tier_code | VARCHAR(20) | 档位代码T0-T5/NEW |
| tier_name | VARCHAR(50) | 档位名称 |
| rank_with_ties | INTEGER | 月度排名考虑并列用于Top3奖金 |
| base_course_price | NUMERIC(10,2) | 基础课客户支付价格98/108/118/138 |
| bonus_course_price | NUMERIC(10,2) | 附加课客户支付价格固定190 |
| base_deduction | NUMERIC(10,2) | 专业课抽成(元/小时),档位决定 |
| bonus_deduction_ratio | NUMERIC(5,4) | 打赏课抽成比例0-1档位决定 |
| base_income | NUMERIC(12,2) | 基础课收入 |
| bonus_income | NUMERIC(12,2) | 附加课收入 |
| total_course_income | NUMERIC(12,2) | 课时收入合计 |
| sprint_bonus | NUMERIC(12,2) | 冲刺奖金H>=190:300, H>=220:800 |
| top_rank_bonus | NUMERIC(12,2) | Top3排名奖金1st:1000, 2nd:600, 3rd:400 |
| recharge_commission | NUMERIC(12,2) | 充值提成 |
| other_bonus | NUMERIC(12,2) | 其他奖金(手动调整) |
| total_bonus | NUMERIC(12,2) | 奖金合计 |
| gross_salary | NUMERIC(12,2) | 应发工资 |
| vacation_days | INTEGER | 次月可休假天数 |
| vacation_unlimited | BOOLEAN | 休假自由标记5档为TRUE |
| calc_notes | TEXT | 计算备注(异常说明等) |
**工资计算公式来自DWS数据库处理需求.md**
```
基础课收入 = 基础课小时数 × (客户支付价格 - 专业课抽成)
附加课收入 = 附加课小时数 × 190 × (1 - 打赏课抽成比例)
应发工资 = 课时收入 + 奖金
```
**计算示例中级助教185小时3档**
- 基础课170小时: 170 × (108 - 13) = 16,150元
- 附加课15小时: 15 × 190 × (1 - 0.35) = 1,852.5元
- 课时收入: 18,002.5元
- 冲刺奖金H≥190未达到: 0元
- 应发工资: 18,002.5元
---
## 三、客户维度表
### 3.1 dws_member_consumption_summary - 会员消费汇总
**粒度:** 会员 + 统计日期
| 字段 | 类型 | 说明 |
|------|------|------|
| id | BIGSERIAL | 主键 |
| member_id | BIGINT | 会员ID |
| stat_date | DATE | 统计基准日期 |
| first_consume_date | DATE | 首次消费日期 |
| last_consume_date | DATE | 最近消费日期 |
| total_visit_count | INTEGER | 累计到店次数 |
| total_consume_amount | NUMERIC(14,2) | 累计消费金额 |
| visit_count_7d | INTEGER | 近7天到店次数 |
| visit_count_30d | INTEGER | 近30天到店次数 |
| consume_amount_30d | NUMERIC(14,2) | 近30天消费金额 |
| cash_card_balance | NUMERIC(14,2) | 储值卡余额 |
| gift_card_balance | NUMERIC(14,2) | 赠送卡余额 |
| customer_tier | VARCHAR(20) | 客户分层 |
**客户分层规则:**
- 高价值90天内消费>=3次 且 消费金额>=1000
- 中等30天内有消费
- 低活跃90天内有消费但30天内无消费
- 流失90天内无消费
### 3.2 dws_member_visit_detail - 会员来店明细
**粒度:** 会员 + 订单
| 字段 | 类型 | 说明 |
|------|------|------|
| id | BIGSERIAL | 主键 |
| member_id | BIGINT | 会员ID |
| order_settle_id | BIGINT | 结账单ID |
| visit_date | DATE | 来店日期 |
| table_name | VARCHAR(50) | 台桌名称 |
| area_category | VARCHAR(20) | 区域分类 |
| table_fee | NUMERIC(12,2) | 台费 |
| goods_amount | NUMERIC(12,2) | 商品金额 |
| assistant_amount | NUMERIC(12,2) | 助教服务金额 |
| total_consume | NUMERIC(12,2) | 消费总额 |
| actual_pay | NUMERIC(12,2) | 实付金额 |
| assistant_services | JSONB | 助教服务明细JSON |
---
## 四、财务维度表
### 4.1 dws_finance_daily_summary - 财务日度汇总
**粒度:** 日期
| 字段 | 类型 | 说明 |
|------|------|------|
| id | BIGSERIAL | 主键 |
| stat_date | DATE | 统计日期 |
| gross_amount | NUMERIC(14,2) | 发生额合计 |
| table_fee_amount | NUMERIC(14,2) | 台费正价 |
| goods_amount | NUMERIC(14,2) | 商品正价 |
| assistant_pd_amount | NUMERIC(14,2) | 助教基础课正价 |
| assistant_cx_amount | NUMERIC(14,2) | 助教激励课正价 |
| discount_total | NUMERIC(14,2) | 优惠合计 |
| discount_groupbuy | NUMERIC(14,2) | 团购优惠 |
| discount_vip | NUMERIC(14,2) | 会员折扣 |
| discount_gift_card | NUMERIC(14,2) | 赠送卡抵扣 |
| discount_manual | NUMERIC(14,2) | 手动调整 |
| discount_rounding | NUMERIC(14,2) | 抹零 |
| discount_other | NUMERIC(14,2) | 其他优惠(手动调整拆分) |
| confirmed_income | NUMERIC(14,2) | 确认收入 |
| cash_inflow_total | NUMERIC(14,2) | 现金流入合计 |
| cash_pay_amount | NUMERIC(14,2) | 收银实付 |
| groupbuy_pay_amount | NUMERIC(14,2) | 团购支付金额 |
| platform_settlement_amount | NUMERIC(14,2) | 平台回款金额 |
| platform_fee_amount | NUMERIC(14,2) | 平台服务费+佣金 |
| recharge_cash_inflow | NUMERIC(14,2) | 充值现金流入 |
| card_consume_total | NUMERIC(14,2) | 卡消费合计 |
| cash_card_consume | NUMERIC(14,2) | 储值卡消费 |
| gift_card_consume | NUMERIC(14,2) | 赠送卡消费 |
| cash_outflow_total | NUMERIC(14,2) | 现金流出合计 |
| cash_balance_change | NUMERIC(14,2) | 现金结余 |
| recharge_count | INTEGER | 充值笔数 |
| recharge_total | NUMERIC(14,2) | 充值总额 |
| recharge_cash | NUMERIC(14,2) | 充值现金部分 |
| recharge_gift | NUMERIC(14,2) | 充值赠送部分 |
| first_recharge_count | INTEGER | 首充笔数 |
| renewal_count | INTEGER | 续充笔数 |
| order_count | INTEGER | 结账单数 |
| member_order_count | INTEGER | 会员订单数 |
| guest_order_count | INTEGER | 散客订单数 |
| avg_order_amount | NUMERIC(12,2) | 平均客单价 |
**计算公式:**
- 发生额 = table_charge_money + goods_money + assistant_pd_money + assistant_cx_money
- 团购支付金额 = pl_coupon_sale_amount > 0 ? pl_coupon_sale_amount : groupbuy_redemption.ledger_unit_price
- 团购优惠 = coupon_amount - 团购支付金额
- 优惠合计 = 团购优惠 + 会员折扣 + 赠送卡抵扣 + 手动调整 + 抹零
- 其他优惠 = adjust_amount - 大客户优惠不足0按0处理
- 确认收入 = 发生额 - 优惠合计
- 平台回款金额 = dws_platform_settlement.settlement_amount若无导入则使用团购支付金额
- 平台服务费 = commission_amount + service_fee
- 现金流入合计 = 收银实付 + 平台回款金额 + 充值现金流入
- 现金流出合计 = 支出汇总 + 平台服务费
- 现金结余 = 现金流入合计 - 现金流出合计
**财务指标数据来源矩阵(字段 → 来源 → 口径)**
| 字段 | 来源表 | 口径说明 |
|------|--------|----------|
| gross_amount | dwd_settlement_head | table_charge_money + goods_money + assistant_pd_money + assistant_cx_money |
| discount_groupbuy | dwd_settlement_head + dwd_groupbuy_redemption | coupon_amount - 团购支付金额 |
| discount_vip | dwd_settlement_head | member_discount_amount |
| discount_gift_card | dwd_settlement_head | gift_card_amount |
| discount_manual | dwd_settlement_head | adjust_amount手动调整总额 |
| discount_rounding | dwd_settlement_head | rounding_amount |
| discount_other | dwd_settlement_head | adjust_amount - 大客户优惠(配置映射) |
| confirmed_income | dwd_settlement_head | gross_amount - discount_total |
| cash_pay_amount | dwd_settlement_head | pay_amount收银实付 |
| groupbuy_pay_amount | dwd_settlement_head + dwd_groupbuy_redemption | pl_coupon_sale_amount 或 ledger_unit_price |
| platform_settlement_amount | dws_platform_settlement | settlement_amountExcel导入 |
| platform_fee_amount | dws_platform_settlement | commission_amount + service_fee |
| recharge_cash_inflow | dwd_recharge_order | pay_money现金充值 |
| cash_inflow_total | dwd_settlement_head + dws_platform_settlement + dwd_recharge_order | 收银实付 + 平台回款 + 充值现金 |
| cash_outflow_total | dws_finance_expense_summary + dws_platform_settlement | 支出汇总 + 平台服务费 |
| cash_balance_change | dws_finance_daily_summary | cash_inflow_total - cash_outflow_total |
### 4.2 dws_finance_recharge_summary - 充值统计
**粒度:** 日期
| 字段 | 类型 | 说明 |
|------|------|------|
| id | BIGSERIAL | 主键 |
| stat_date | DATE | 统计日期 |
| recharge_count | INTEGER | 充值笔数 |
| recharge_total | NUMERIC(14,2) | 充值总额(含赠送) |
| recharge_cash | NUMERIC(14,2) | 现金充值金额 |
| recharge_gift | NUMERIC(14,2) | 赠送金额 |
| first_recharge_count | INTEGER | 首充笔数 |
| first_recharge_cash | NUMERIC(14,2) | 首充现金 |
| renewal_count | INTEGER | 续充笔数 |
| renewal_cash | NUMERIC(14,2) | 续充现金 |
| cash_card_balance | NUMERIC(14,2) | 储值卡余额 |
| gift_card_balance | NUMERIC(14,2) | 赠送卡余额 |
**数据来源:** dwd_recharge_orderis_first字段区分首充/续充)
### 4.3 dws_finance_income_structure - 收入结构分析
**粒度:** 日期 + 结构类型 + 分类
| 字段 | 类型 | 说明 |
|------|------|------|
| id | BIGSERIAL | 主键 |
| stat_date | DATE | 统计日期 |
| structure_type | VARCHAR(20) | 结构类型INCOME_TYPE/AREA |
| category_code | VARCHAR(30) | 分类代码 |
| category_name | VARCHAR(50) | 分类名称 |
| income_amount | NUMERIC(14,2) | 收入金额 |
| income_ratio | NUMERIC(5,4) | 收入占比 |
| order_count | INTEGER | 订单数 |
| duration_minutes | INTEGER | 时长(分钟) |
**结构类型说明:**
1. **INCOME_TYPE按收入类型**
- TABLE_FEE = 台费收入
- GOODS = 商品收入
- ASSISTANT_BASE = 助教基础课
- ASSISTANT_BONUS = 助教附加课
2. **AREA按区域**
- 使用cfg_area_category映射BILLIARD/BILLIARD_VIP/SNOOKER/MAHJONG/KTV/OTHER
**数据来源:** dwd_settlement_head, dwd_table_fee_log, dwd_assistant_service_log
### 4.4 dws_finance_discount_detail - 优惠明细
**粒度:** 日期 + 优惠类型
| 字段 | 类型 | 说明 |
|------|------|------|
| id | BIGSERIAL | 主键 |
| stat_date | DATE | 统计日期 |
| discount_type_code | VARCHAR(30) | 优惠类型代码 |
| discount_type_name | VARCHAR(50) | 优惠类型名称 |
| discount_amount | NUMERIC(14,2) | 优惠金额 |
| discount_ratio | NUMERIC(5,4) | 优惠占比(占总优惠) |
| usage_count | INTEGER | 使用次数 |
| affected_orders | INTEGER | 影响订单数 |
**优惠类型:**
- GROUPBUY = 团购优惠coupon_amount - 团购实付金额)
- VIP = 会员折扣member_discount_amount
- GIFT_CARD = 赠送卡抵扣gift_card_amount
- ROUNDING = 抹零rounding_amount
- BIG_CUSTOMER = 大客户优惠(基于配置映射的手动调整)
- OTHER = 其他优惠(手动调整中除大客户外部分)
**数据来源:** dwd_settlement_head, dwd_groupbuy_redemption
### 4.5 dws_finance_expense_summary - 支出结构Excel导入
**粒度:** 月份 + 支出类型
| 字段 | 类型 | 说明 |
|------|------|------|
| id | BIGSERIAL | 主键 |
| expense_month | DATE | 支出月份 |
| expense_type_code | VARCHAR(30) | 支出类型代码 |
| expense_type_name | VARCHAR(50) | 支出类型名称 |
| expense_category | VARCHAR(20) | 支出大类 |
| expense_amount | NUMERIC(14,2) | 支出金额 |
| import_batch_no | VARCHAR(50) | 导入批次号 |
**支出类型:**
- RENT = 房租
- UTILITY = 水电费
- PROPERTY = 物业费
- SALARY = 工资
- REIMBURSE = 报销
- PLATFORM_FEE = 平台服务费
- OTHER = 其他
### 4.6 dws_platform_settlement - 平台回款Excel导入
**粒度:** 回款日期 + 平台 + 订单
| 字段 | 类型 | 说明 |
|------|------|------|
| id | BIGSERIAL | 主键 |
| settlement_date | DATE | 回款日期 |
| platform_type | VARCHAR(30) | 平台类型 |
| platform_name | VARCHAR(50) | 平台名称 |
| platform_order_no | VARCHAR(100) | 平台订单号 |
| order_settle_id | BIGINT | 关联的结账单ID |
| settlement_amount | NUMERIC(14,2) | 回款金额 |
| commission_amount | NUMERIC(14,2) | 佣金 |
| service_fee | NUMERIC(14,2) | 服务费 |
| gross_amount | NUMERIC(14,2) | 订单原始金额 |
| import_batch_no | VARCHAR(50) | 导入批次号 |
---
## 五、时间分层机制
### 5.1 时间口径定义
| 时间窗口 | 说明 | 边界规则 |
|----------|------|----------|
| 本周 | 从本周一到今天 | 周起始日为周一 |
| 上周 | 上周一到上周日 | 完整7天 |
| 本月 | 从月1日到今天 | 月第一天0点起 |
| 上月 | 上月完整月份 | 完整自然月 |
| 前3个月不含本月 | 三个月前月初到上月末 | 不含当前月 |
| 前3个月含本月 | 两个月前月初到今天 | 含当前月 |
| 本季度 | 季度第一月1日到今天 | 季度起始 |
| 上季度 | 上季度完整三个月 | 完整自然季 |
| 最近半年 | 往前6个月不含本月 | 不含当前月 |
### 5.2 滚动窗口
支持以下滚动窗口统计:
- 近7天
- 近10天
- 近15天
- 近30天
- 近60天
- 近90天
### 5.3 环比计算
环比规则:对比上一个等长区间
- 如查询1月1日-1月15日环比为12月17日-12月31日
---
## 六、数据更新策略
| 表类型 | 更新频率 | 幂等方式 |
|--------|----------|----------|
| 日度明细表 | 每小时 | delete-before-insert按日期窗口 |
| 日度汇总表 | 每小时 | delete-before-insert按日期 |
| 月度汇总表 | 每日 | delete-before-insert按月份 |
| 客户统计表 | 每日 | delete-before-insert按统计日期 |
| Excel导入表 | 手动 | 按import_batch_no去重 |

View File

@@ -0,0 +1,494 @@
## 1. 客户召回表
| 客户姓名 | 召回指数 |
|----------|----------|
| 陈腾鑫 | 10.00 |
| 章先生 | 10.00 |
| 孙总 | 10.00 |
| 梅 | 10.00 |
| 胡先生 | 10.00 |
| 黄先生 | 9.63 |
| 小熊 | 9.52 |
| 周先生 | 9.41 |
| 李先生 | 9.39 |
| 王 | 9.27 |
| 张无忌 | 9.20 |
| 黄先生 | 8.96 |
| 陈德韩 | 8.94 |
| 胡总 | 8.93 |
| T | 8.89 |
| 候 | 8.88 |
| 孙先生 | 8.87 |
| 王先生 | 8.86 |
| 清 | 8.86 |
| amy | 8.84 |
| 林先生 | 8.84 |
| 张先生 | 8.79 |
| 刘先生 | 8.79 |
| 黄国磊 | 8.79 |
| 游 | 8.79 |
| 陈先生 | 8.79 |
| 陈 | 8.79 |
| 大G | 8.79 |
| 李先生 | 8.79 |
| 孙启明 | 8.79 |
| 陈先生 | 8.79 |
| 罗先生 | 8.79 |
| 刘哥 | 8.79 |
| 杨 | 8.79 |
| 枫先生 | 8.79 |
| 老宋 | 8.79 |
| 黄先生 | 8.79 |
| 刘女士 | 8.79 |
| 彭先生 | 8.79 |
| 李 | 8.79 |
| 桂先生 | 8.79 |
| 王先生 | 8.79 |
| 潘先生 | 8.79 |
| 方先生 | 8.79 |
| 郑先生 | 8.79 |
| 阿亮 | 8.79 |
| 孟紫龙 | 8.79 |
| 林总 | 8.78 |
| 林志铭 | 8.64 |
| 罗超 | 8.63 |
| 张丹逸 | 8.52 |
| 谢俊 | 8.07 |
| 王龙 | 7.80 |
| 唐先生 | 7.79 |
| 周周 | 7.47 |
| 曾巧明 | 6.83 |
| 昌哥 | 6.17 |
| 江先生 | 5.84 |
| 袁 | 5.24 |
| 蔡总 | 4.73 |
| 胡先生 | 4.51 |
| 陈先生 | 4.45 |
| 明哥 | 3.92 |
| 公孙先生 | 3.57 |
| 曾先生 | 3.47 |
| 黄生 | 3.46 |
| 葛先生 | 3.35 |
| 轩哥 | 3.32 |
| 张先生 | 2.73 |
| 叶先生 | 2.61 |
| 小燕 | 2.39 |
| 罗先生 | 2.38 |
| 李先生 | 2.23 |
| 陈淑涛 | 2.23 |
| 肖先生 | 2.23 |
| 范先生 | 2.14 |
| 常总 | 1.47 |
| 董贝 | 1.04 |
| 陈小姐 | 1.04 |
| 林先生 | 0.90 |
| 柳先生 | 0.61 |
| 林先生 | 0.20 |
| 潘先生 | 0.20 |
| 曾丹烨 | 0.07 |
| 魏先生 | 0.00 |
| 艾宇民 | 0.00 |
| 吴生 | 0.00 |
| 卢广贤 | 0.00 |
| 陈泽斌 | 0.00 |
| 李先生 | 0.00 |
共 90 条记录
## 2. 助教客户关系表
| 助教花名 | 客户姓名 | 关系指数 |
|----------|----------|----------|
| 卡顿 | 葛先生 | 10.00 |
| 小燕 | 葛先生 | 10.00 |
| 七七 | 轩哥 | 10.00 |
| 佳怡 | 罗先生 | 10.00 |
| 璇子 | 轩哥 | 10.00 |
| 阿清 | 张先生 | 10.00 |
| 璇子 | 江先生 | 10.00 |
| CC | 周周 | 10.00 |
| 周周 | 周周 | 10.00 |
| 小燕 | 小燕 | 10.00 |
| 卡顿 | 小燕 | 10.00 |
| 姜姜 | 张先生 | 10.00 |
| 小侯 | 张先生 | 10.00 |
| 渔渔 | 张先生 | 10.00 |
| 欣欣 | 张先生 | 10.00 |
| 千千 | 张先生 | 10.00 |
| 小A | 张先生 | 10.00 |
| 甜甜 | 张先生 | 10.00 |
| 小A | 周先生 | 10.00 |
| 欣欣 | 周先生 | 10.00 |
| 千千 | 周先生 | 10.00 |
| 甜甜 | 周先生 | 10.00 |
| 涛涛 | 蔡总 | 10.00 |
| 婉婉 | 吴先生 | 10.00 |
| 千千 | 梅 | 10.00 |
| 甜甜 | 梅 | 10.00 |
| 小A | 梅 | 10.00 |
| 欣欣 | 梅 | 10.00 |
| 球球 | 周周 | 10.00 |
| 涛涛 | 轩哥 | 10.00 |
| 小不点 | 周周 | 10.00 |
| 小柔 | 蔡总 | 10.00 |
| 年糕 | 葛先生 | 10.00 |
| 佳怡 | 陈腾鑫 | 10.00 |
| 小不点 | 罗先生 | 10.00 |
| 球球 | 罗先生 | 10.00 |
| 小柔 | 轩哥 | 10.00 |
| 阿清 | 梅 | 10.00 |
| 阿清 | 胡先生 | 10.00 |
| 佳怡 | 陈先生 | 10.00 |
| 小不点 | 轩哥 | 10.00 |
| 佳怡 | 小熊 | 10.00 |
| 球球 | 轩哥 | 10.00 |
| 阿清 | 孙总 | 10.00 |
| CC | 罗先生 | 10.00 |
| 周周 | 罗先生 | 10.00 |
| 小柔 | 明哥 | 9.96 |
| 渔渔 | 李先生 | 9.88 |
| 姜姜 | 李先生 | 9.88 |
| 小侯 | 李先生 | 9.88 |
| 年糕 | 常总 | 9.85 |
| 婉婉 | 明哥 | 9.61 |
| 乔西 | 陈先生 | 9.59 |
| 璇子 | 蔡总 | 9.46 |
| CC | 常总 | 9.40 |
| 周周 | 常总 | 9.40 |
| 七七 | 蔡总 | 9.24 |
| 甜甜 | 孙总 | 9.24 |
| 小A | 孙总 | 9.24 |
| 欣欣 | 孙总 | 9.24 |
| 千千 | 孙总 | 9.24 |
| 七七 | 胡先生 | 9.20 |
| 千千 | 小熊 | 9.02 |
| 甜甜 | 小熊 | 9.02 |
| 欣欣 | 小熊 | 9.02 |
| 小A | 小熊 | 9.02 |
| 佳怡 | 胡先生 | 9.02 |
| 涛涛 | 小燕 | 8.66 |
| 阿清 | 轩哥 | 8.53 |
| 年糕 | 叶先生 | 8.51 |
| 小不点 | 张先生 | 8.39 |
| 球球 | 张先生 | 8.39 |
| 阿清 | 葛先生 | 8.36 |
| 周周 | 张先生 | 8.30 |
| CC | 张先生 | 8.30 |
| 甜甜 | 胡先生 | 8.04 |
| 千千 | 胡先生 | 8.04 |
| 欣欣 | 胡先生 | 8.04 |
| 小A | 胡先生 | 8.04 |
| 小不点 | 小熊 | 7.88 |
| 球球 | 小熊 | 7.88 |
| 小侯 | 胡先生 | 7.86 |
| 姜姜 | 胡先生 | 7.86 |
| 渔渔 | 胡先生 | 7.86 |
| 乔西 | 罗先生 | 7.86 |
| 小不点 | 胡先生 | 7.65 |
| 球球 | 胡先生 | 7.65 |
| 球球 | 孙总 | 7.56 |
| 小不点 | 孙总 | 7.56 |
| 璇子 | 孙总 | 7.46 |
| 阿清 | 清 | 7.35 |
| 小A | 小燕 | 7.09 |
| 甜甜 | 小燕 | 7.09 |
| 欣欣 | 小燕 | 7.09 |
| 千千 | 小燕 | 7.09 |
| 甜甜 | 公孙先生 | 7.07 |
| 千千 | 公孙先生 | 7.07 |
| 欣欣 | 公孙先生 | 7.07 |
| 小A | 公孙先生 | 7.07 |
| 婉婉 | 孙总 | 7.03 |
| 菲菲 | 陈腾鑫 | 6.92 |
| 橙子 | 陈腾鑫 | 6.92 |
| 希希 | 陈腾鑫 | 6.92 |
| 婉婉 | 章先生 | 6.91 |
| 婉婉 | 公孙先生 | 6.86 |
| CC | 林先生 | 6.77 |
| 周周 | 林先生 | 6.77 |
| 阿清 | 小燕 | 6.76 |
| 苏苏 | 蔡总 | 6.64 |
| 七七 | 小燕 | 6.60 |
| 小不点 | 江先生 | 6.59 |
| 球球 | 江先生 | 6.59 |
| 涛涛 | 罗先生 | 6.52 |
| 凤梨 | 葛先生 | 6.51 |
| 佳怡 | 轩哥 | 6.49 |
| 年糕 | 轩哥 | 6.44 |
| 年糕 | 小燕 | 6.43 |
| CC | 轩哥 | 6.26 |
| 周周 | 轩哥 | 6.26 |
| yy | 公孙先生 | 6.13 |
| 阿清 | 陈腾鑫 | 6.04 |
| 佳怡 | 周周 | 6.03 |
| 七七 | 江先生 | 5.93 |
| CC | 林先生 | 5.87 |
| 周周 | 林先生 | 5.87 |
| 年糕 | 王 | 5.76 |
| 年糕 | 李先生 | 5.72 |
| 七七 | 孙总 | 5.69 |
| 苏苏 | 黄先生 | 5.66 |
| 婉婉 | 叶先生 | 5.55 |
| 涛涛 | 叶先生 | 5.55 |
| 凤梨 | 叶先生 | 5.54 |
| 小A | 黄先生 | 5.53 |
| 甜甜 | 黄先生 | 5.53 |
| 千千 | 黄先生 | 5.53 |
| 欣欣 | 黄先生 | 5.53 |
| yy | 叶先生 | 5.53 |
| 苏苏 | 罗先生 | 5.48 |
| 小侯 | 葛先生 | 5.47 |
| 渔渔 | 葛先生 | 5.47 |
| 姜姜 | 葛先生 | 5.47 |
| 佳怡 | 林志铭 | 5.45 |
| 婉婉 | 葛先生 | 5.37 |
| CC | 小熊 | 5.29 |
| 周周 | 小熊 | 5.29 |
| 涛涛 | 孙总 | 5.20 |
| 小敌 | 李先生 | 5.09 |
| 吱吱 | 李先生 | 5.09 |
| 周周 | 葛先生 | 5.08 |
| CC | 葛先生 | 5.08 |
| 甜甜 | 蔡总 | 5.04 |
| 千千 | 蔡总 | 5.04 |
| 欣欣 | 蔡总 | 5.04 |
| 小A | 蔡总 | 5.04 |
| 婉婉 | 轩哥 | 5.03 |
| 年糕 | 胡先生 | 5.02 |
| 吱吱 | 葛先生 | 4.88 |
| 小敌 | 葛先生 | 4.88 |
| 婉婉 | 王 | 4.87 |
| yy | 张先生 | 4.66 |
| 璇子 | 罗先生 | 4.65 |
| yy | 葛先生 | 4.59 |
| 苏苏 | 柳先生 | 4.58 |
| 乔西 | 蔡总 | 4.50 |
| 七七 | 张先生 | 4.36 |
| 乔西 | 葛先生 | 4.33 |
| 乔西 | 小熊 | 4.33 |
| 周周 | 江先生 | 4.32 |
| CC | 江先生 | 4.32 |
| Amy | 轩哥 | 4.31 |
| 年糕 | 罗超 | 4.20 |
| yy | 林志铭 | 4.19 |
| 年糕 | 艾宇民 | 4.16 |
| 阿清 | 黄先生 | 4.14 |
| 七七 | 罗超 | 4.12 |
| 年糕 | 范先生 | 4.08 |
| 凤梨 | 林先生 | 4.07 |
| 璇子 | 张先生 | 4.06 |
| 球球 | 常总 | 4.05 |
| 小不点 | 常总 | 4.05 |
| yy | 孙总 | 3.99 |
| 七七 | 葛先生 | 3.93 |
| 乔西 | 轩哥 | 3.90 |
| 年糕 | 小熊 | 3.85 |
| 千千 | 李先生 | 3.73 |
| 欣欣 | 李先生 | 3.73 |
| 小A | 李先生 | 3.73 |
| 甜甜 | 李先生 | 3.73 |
| 姜姜 | 轩哥 | 3.62 |
| 渔渔 | 轩哥 | 3.62 |
| 小侯 | 轩哥 | 3.62 |
| 迟迟 | 轩哥 | 3.60 |
| 泡芙 | 轩哥 | 3.60 |
| 小琳 | 轩哥 | 3.60 |
| 七七 | 罗先生 | 3.57 |
| 年糕 | 胡总 | 3.47 |
| 欣欣 | 葛先生 | 3.43 |
| 甜甜 | 葛先生 | 3.43 |
| 千千 | 葛先生 | 3.43 |
| 小A | 葛先生 | 3.43 |
| 七七 | 林总 | 3.43 |
| 乔西 | 陈德韩 | 3.38 |
| 泡芙 | 林总 | 3.31 |
| 迟迟 | 林总 | 3.31 |
| 小琳 | 林总 | 3.31 |
| 涛涛 | 葛先生 | 3.27 |
| 阿清 | 罗先生 | 3.16 |
| 璇子 | 周周 | 3.16 |
| 阿清 | 王先生 | 3.14 |
| 小柳 | 轩哥 | 3.06 |
| 迟迟 | 陈腾鑫 | 3.04 |
| 小琳 | 陈腾鑫 | 3.04 |
| 泡芙 | 陈腾鑫 | 3.04 |
| 瑶瑶 | 蔡总 | 2.92 |
| 图图 | 蔡总 | 2.92 |
| 小A | 轩哥 | 2.91 |
| 千千 | 轩哥 | 2.91 |
| 欣欣 | 轩哥 | 2.91 |
| 甜甜 | 轩哥 | 2.91 |
| 年糕 | 罗先生 | 2.84 |
| 小不点 | 黄先生 | 2.73 |
| 球球 | 黄先生 | 2.73 |
| 渔渔 | 梅 | 2.72 |
| 姜姜 | 梅 | 2.72 |
| 小侯 | 梅 | 2.72 |
| 欣欣 | 陈先生 | 2.68 |
| 千千 | 陈先生 | 2.68 |
| 小A | 陈先生 | 2.68 |
| 甜甜 | 陈先生 | 2.68 |
| 婉婉 | 江先生 | 2.67 |
| 千千 | 枫先生 | 2.67 |
| 欣欣 | 枫先生 | 2.67 |
| 小A | 枫先生 | 2.67 |
| 甜甜 | 枫先生 | 2.67 |
| 阿清 | 枫先生 | 2.67 |
| 乔西 | 张无忌 | 2.55 |
| 甜甜 | 范先生 | 2.51 |
| 千千 | 范先生 | 2.51 |
| 小A | 范先生 | 2.51 |
| 欣欣 | 范先生 | 2.51 |
| 七七 | 林先生 | 2.45 |
| CC | T | 2.36 |
| 周周 | T | 2.36 |
| 苏苏 | 周周 | 2.36 |
| 小侯 | 周先生 | 2.28 |
| 渔渔 | 周先生 | 2.28 |
| 姜姜 | 周先生 | 2.28 |
| 涛涛 | 胡总 | 2.28 |
| 苏苏 | 林先生 | 2.14 |
| 渔渔 | 彭先生 | 2.07 |
| 小侯 | 彭先生 | 2.07 |
| 姜姜 | 彭先生 | 2.07 |
| 小侯 | 清 | 2.03 |
| 甜甜 | 清 | 2.03 |
| 小A | 清 | 2.03 |
| 欣欣 | 清 | 2.03 |
| 千千 | 清 | 2.03 |
| 渔渔 | 清 | 2.03 |
| 姜姜 | 清 | 2.03 |
| 苏苏 | 张先生 | 1.94 |
| 千千 | 林总 | 1.88 |
| 甜甜 | 林总 | 1.88 |
| 欣欣 | 林总 | 1.88 |
| 小A | 林总 | 1.88 |
| 甜甜 | 陈腾鑫 | 1.82 |
| 欣欣 | 陈腾鑫 | 1.82 |
| 千千 | 陈腾鑫 | 1.82 |
| 小A | 陈腾鑫 | 1.82 |
| 佳怡 | 彭先生 | 1.80 |
| 婉婉 | 周先生 | 1.77 |
| 苏苏 | 周先生 | 1.68 |
| CC | 昌哥 | 1.64 |
| 周周 | 昌哥 | 1.64 |
| 球球 | 蔡总 | 1.57 |
| 小不点 | 蔡总 | 1.57 |
| 苏苏 | 李先生 | 1.53 |
| 吱吱 | 李先生 | 1.50 |
| 小敌 | 李先生 | 1.50 |
| 婉婉 | 刘哥 | 1.46 |
| CC | 林总 | 1.39 |
| 周周 | 林总 | 1.39 |
| 小不点 | T | 1.38 |
| 球球 | T | 1.38 |
| 悠悠 | 张先生 | 1.38 |
| 布丁 | 张先生 | 1.38 |
| 小怡 | 周先生 | 1.37 |
| 雯雯 | 周先生 | 1.37 |
| 素素 | 周先生 | 1.37 |
| 嘉嘉 | 轩哥 | 1.31 |
| 小柔 | 葛先生 | 1.30 |
| 乔西 | 张先生 | 1.29 |
| 小不点 | 候 | 1.23 |
| 球球 | 候 | 1.23 |
| 嘉嘉 | 罗先生 | 1.22 |
| 小侯 | T | 1.19 |
| 渔渔 | T | 1.19 |
| 姜姜 | T | 1.19 |
| 小侯 | 黄先生 | 1.19 |
| 小敌 | 林先生 | 1.19 |
| 姜姜 | 黄先生 | 1.19 |
| 吱吱 | 林先生 | 1.19 |
| 渔渔 | 黄先生 | 1.19 |
| 球球 | 葛先生 | 1.16 |
| 小不点 | 葛先生 | 1.16 |
| Amy | amy | 1.15 |
| 乔西 | T | 1.12 |
| 球球 | 老宋 | 1.10 |
| 小不点 | 老宋 | 1.10 |
| 乔西 | 林先生 | 1.01 |
| 素素 | 张先生 | 0.98 |
| 小怡 | 张先生 | 0.98 |
| 雯雯 | 张先生 | 0.98 |
| 佳怡 | T | 0.96 |
| 年糕 | 张先生 | 0.94 |
| 小侯 | 陈腾鑫 | 0.88 |
| 渔渔 | 陈腾鑫 | 0.88 |
| 姜姜 | 陈腾鑫 | 0.88 |
| 阿清 | 李先生 | 0.85 |
| 球球 | 林总 | 0.83 |
| 小不点 | 林总 | 0.83 |
| 婉婉 | 常总 | 0.77 |
| 小侯 | 艾宇民 | 0.76 |
| 姜姜 | 艾宇民 | 0.76 |
| 渔渔 | 艾宇民 | 0.76 |
| 小敌 | 郑先生 | 0.74 |
| 吱吱 | 郑先生 | 0.74 |
| 千千 | 罗先生 | 0.72 |
| 甜甜 | 罗先生 | 0.72 |
| 小A | 罗先生 | 0.72 |
| 欣欣 | 罗先生 | 0.72 |
| 球球 | 小燕 | 0.67 |
| 小不点 | 小燕 | 0.67 |
| 年糕 | 周先生 | 0.65 |
| 卡顿 | 罗先生 | 0.62 |
| 小燕 | 罗先生 | 0.62 |
| 小敌 | 刘哥 | 0.60 |
| 吱吱 | 刘哥 | 0.60 |
| 小柔 | 孟紫龙 | 0.56 |
| 阿清 | 候 | 0.54 |
| 乔西 | 候 | 0.49 |
| 小敌 | 张先生 | 0.46 |
| 甜甜 | T | 0.46 |
| 小A | T | 0.46 |
| 欣欣 | T | 0.46 |
| 千千 | T | 0.46 |
| 吱吱 | 张先生 | 0.46 |
| 小A | 游 | 0.38 |
| 千千 | 游 | 0.38 |
| 甜甜 | 游 | 0.38 |
| 欣欣 | 游 | 0.38 |
| 苏苏 | 葛先生 | 0.34 |
| 渔渔 | 候 | 0.32 |
| 小侯 | 候 | 0.32 |
| 姜姜 | 候 | 0.32 |
| 苏苏 | T | 0.31 |
| 婉婉 | 罗先生 | 0.26 |
| 涛涛 | 候 | 0.24 |
| 苏苏 | 候 | 0.23 |
| 阿清 | 常总 | 0.23 |
| 小不点 | 李先生 | 0.22 |
| 球球 | 李先生 | 0.22 |
| 小柔 | T | 0.19 |
| 年糕 | 潘先生 | 0.19 |
| 婉婉 | 候 | 0.18 |
| 小柔 | 罗先生 | 0.17 |
| 梦梦 | 葛先生 | 0.14 |
| 欣怡 | 葛先生 | 0.14 |
| 大姚 | 葛先生 | 0.14 |
| 椰子 | 葛先生 | 0.14 |
| 璇子 | 林先生 | 0.11 |
| 年糕 | 明哥 | 0.09 |
| 涛涛 | 张先生 | 0.08 |
| 周周 | 大G | 0.02 |
| 佳怡 | 大G | 0.02 |
| CC | 大G | 0.02 |
| 周周 | 明哥 | 0.00 |
| Amy | 明哥 | 0.00 |
| 小怡 | 叶先生 | 0.00 |
| 乔西 | 林先生 | 0.00 |
| 素素 | 叶先生 | 0.00 |
| 雯雯 | 叶先生 | 0.00 |
| 梦梦 | 蔡总 | 0.00 |
| 欣怡 | 蔡总 | 0.00 |
| 椰子 | 蔡总 | 0.00 |
| 大姚 | 蔡总 | 0.00 |
| 周周 | 游 | 0.00 |
| 小柔 | 昌哥 | 0.00 |
| CC | 游 | 0.00 |
| 佳怡 | 游 | 0.00 |
| CC | 明哥 | 0.00 |
| 小柔 | 江先生 | 0.00 |
共 391 条记录

Binary file not shown.

View File

@@ -0,0 +1,167 @@
# 补充更多信息:
## DWD数据库更新
DWD的数据库若干表中新增了若干表可能会对整个DWS层设计有影响/优化,重新思考可用的字段。
## 支出/成本数据缺失
财务页需要房租、水电、物业、工资、报销、平台服务费等现金支出与“支出结构”DWD 里只有商品成本 dwd_store_goods_sale.cost_money但价格也不对。缺少费用/薪酬/平台服务费等表,导致“现金支出/现金结余/结余率/支出结构”无法落地。
### 更新:
- 这些内容先在数据库结构中预留后期会通过Excel等方式手动导入。
## 平台回款与团购差价口径不足
需求有“平台回款”“团购差价”DWD 只有团购核销/验券记录dwd_groupbuy_redemption/dwd_platform_coupon_redemption没有平台结算/回款/佣金/服务费明细,无法算“平台回款”与“平台服务费”。
### 更新:
- 确认的平台服务费与回款金额先在数据库结构中预留后期会通过Excel等方式手动导入。
## 优惠分类无法分拆
财务页要区分“团购优惠/大客户优惠/赠送卡抵扣/其他优惠”DWD 仅有 member_discount_amount / coupon_amount / adjust_amount / rounding_amount / gift_card_amount / recharge_card_amount 等汇总字段,且没有“大客户”标识或优惠原因维表,无法稳定拆分口径。
### 更新:
- 赠送卡抵扣 指的就是 酒水卡+台费卡+活动抵用券 结账 抵扣的。
- 团购优惠: ledger_amount + assistant_promotion_money - ledger_unit_price
- 大客户优惠和其他优惠就是手动调账产生的优惠订单中的折扣、台桌折扣、商品折扣、手动优惠这几项关系需要确认下找100个样本进行分析
## “发生额/正价”口径不清
- 结账记录中的正价: tableChargeMoney台费正价goodsMoney商品正价assistantPdMoney助教基础课正价assistantCxMoney助教激励课正价
- 团购中的正价ledger_amount(台桌正价) + assistant_promotion_money(助教正价)
- 团购中的核销价ledger_unit_price
## 区域/房型维度不规范
筛选要“大厅A/B/C、麻将房、团建房/包厢”DWD 只有 site_table_area_name 等自由文本,没有规范维表映射,容易导致前端筛选不可控。
### 更新
BD_manual_dim_table.md 中,有台区分布的对应关系
## 充值与赠送卡口径缺口
需求中“储值卡充值实收(首充/续费、不含赠送)”与“赠送卡新增/消费/余额”细分酒水卡/台费卡/抵用券。DWD 里 dwd_recharge_order 没有明确“赠送金额”字段dim_member_card_account / dwd_member_balance_change 仅有卡类型名称,缺少“是否赠送”“卡类别标准枚举”,需要补充规则/维表。
### 更新
- 酒水卡,台费卡活动抵用券,台费卡 是赠送卡 分类在dim_member_card_account 的card_type_id对应的数据库说明书中有介绍。
- 储值卡是充值的“现金卡”
## 助教薪酬规则未闭合
DWS 需求里“充值提成”空缺,且“冲刺奖/额外奖金”重复;没有助教工资/结算流水表,财务页“助教分成/奖惩”无法核算。
### 更新
- 充值提成数据库结构中预留后期会通过Excel等方式手动导入。会记录时间充值金额储值卡卡关联充值提成金额。
- “冲刺奖/额外奖金”重复:按照薪资说明进行相应调整。
- 没有助教工资/结算流水表:为我增加相应的表。满足业务逻辑。
## 时间分层与筛选不匹配
### 更新
- UI 需要“最近半年不含本月、上季度”等时间维度并且满足上葛周期的环比。DWS 分层仅到 3 个月,可能导致查询性能或需要额外聚合层。财务方面需要特殊处理。
## 缺失 DDL
方案里列出的表没有全部给出结构定义,包括 cfg_tier_effective_period、dws_assistant_salary_calc、dws_member_visit_detail、dws_finance_discount_detail、dws_finance_recharge_summary、dws_finance_expense_summary。这些在 DWS_任务计划_v1.md 中仅出现在清单里,但没有 DDL会导致实施阶段卡住。
### 更新
- 补全DLL。
## SCD2 维度取数口径
助教等级在 dws_assistant_monthly_summary 用了 SCD2_is_current=1这是否会把“当前等级”套到历史月份能否满足需求中的“历史月份”统计是否要加一些数据筛选条件是否需按业务时间点做 as-of join基于有效期
## 附加课/基础课口径
方案中用 skill_name 判断“超休/激励/打赏”为附加课但我希望换成skill_id进行枚举避免漏记或误记落在库中可以使用名称。
## 财务指标可追溯口径
dws_finance_daily_summary 已覆盖“发生额/优惠/确认收入/现金流/充值”等字段但缺少“数据来源矩阵”字段→DWD表→公式。财务需求对“发生额(正价)”和“优惠”拆分非常细,需明确“正价”来源(台费价、助教等级价、商品原价)与“优惠”拆分口径(团购差价、大客户折扣、赠送卡抵扣、免单/抹零、手动调整)。
### 更新
- 增加 数据来源矩阵,记录数据的来龙去脉
我觉得还不够全,给你一些我整理的内容。
# 1.2 DWD 核心表与关键字段
还差好多,举例:
## 助教服务相关:
dwd_assistant_service_log
| `order_assistant_type` | 服务类型 | 1=基础课或包厢课, 2=附加课/激励课 | 这个不重要用skill_id判断就好。
另外服务时keh长服务的助教ID与花名客户关联台桌号台桌分类关联等也很重要。
## 客户相关:
客户姓名手机号生日以及关联的会员卡。
## 财务:
还有从结账记录出发关联的台桌流水助教流水
结算路径
充值流水等。
以上是否要补充?
---------------
## 订单获取的字段更新
### 订单各项正价小计
- 台费正价table_charge_money
- 商品正价goods_money
- 助教基础课/陪打正价assistant_pd_money
- 助教激励课/超休正价assistant_cx_money
### 支付信息
- 会员卡支付金额recharge_card_amount。卡类型还要从dwd_settlement_head的order_settle_id 去dwd_member_balance_change表找到卡的类型。
- 收银实付pay_amount。
- 团购抵消的台费coupon_amount。
- 团购支付的金额2条路径若pl_coupon_sale_amount非0 则使用pl_coupon_sale_amount。若pl_coupon_sale_amount为0且coupon_amount不为0那么需要到dwd_groupbuy_redemption找到对应的订单的ledger_unit_price。
### 订单优惠与打折
- 台费打折adjust_amount
- 团购券优惠:团购抵消的台费 - 团购支付的金额
-----------------
单独任务:
大客户优惠;抹零;其他优惠 需要抽样分析,当作一个单独任务为我分析执行。
| **会员折扣** | dwd_settlement_head | `member_discount_amount` | 会员身份折扣 | 这个貌似没有启用过,也为我作为单独任务分析处理吧。。
---------------
时间分层机制需求明确“四层时间分层近2天/近1月/近3月/全量)”,方案只写了更新频率,需补齐具体实现(分区策略/分层表或物化汇总层/定期归档与清理作业)。
DDL 完整性:补充说明中提到缺失的表(如 cfg_tier_effective_period、dws_assistant_salary_calc、dws_member_visit_detail、dws_finance_discount_detail、dws_finance_recharge_summary、dws_finance_expense_summary需要在 schema_dws.sql 里落全方案里写了“更新DDL”但应明确完整DDL清单与字段级定义。
薪酬规则与生效期:档位、奖金、规则有“按月/按时间生效”的要求,方案目前只有 cfg_performance_tier/cfg_bonus_rules需要补充生效期字段或独立“规则生效期配置表”否则历史月份口径会错。
SCD2 / as-of 口径助教等级是SCD2维度历史月份不能直接用“当前等级”。方案需明确“按有效期 as-of join”的取数规则。
技能枚举规范:需求要求用 skill_id 判断基础课/附加课;方案应明确 skill_id→课程类型映射可用配置表避免 skill_name 漏记。
滚动区间统计:需求中明确 7/10/15/30/60/90 天窗口,方案未明确存储方式(建议在 dws_assistant_customer_stats、dws_member_consumption_summary 中直接落多窗口字段,或新增滚动汇总表)。
财务口径矩阵需全覆盖:方案已有“数据来源矩阵”,但需扩展至财务页面每一项指标(发生额/优惠拆分/确认收入/现金流/充值/平台回款/支出结构),确保每一项都有明确字段+公式+来源表。
手工导入表规范:支出/平台回款/充值提成的Excel导入要补“字段定义、时间粒度、门店维度、去重与校验规则”否则实现阶段会反复返工。
区域/房型维表:方案已有 cfg_area_category但需落地“具体映射规则 + 默认兜底 + 异常值处理”,并与 BD_manual_dim_table.md 一致。
# 更新
时间口径定义:本周/上周/本季度/上季度/最近半年不含本月 等窗口的“起止边界”为月第一天0点。周起始日为周一。
环比规则:开启对比时,是“对比上一个等长区间”相比。
有效业绩的排除规则:仅对“助教废除表”的记录进行处理排除。其影响绩效。
新入职定档规则月1日0点之后入住的计算为新入职。入职日以助教表入职时间为准。
Top3 奖金排名口径按绩效总小时数。如遇并列则都算比如2个第一则记为2个第一一个第三。
充值提成规则:比例/阶梯/时间口径缺失:通过手动导入表格,表格中会明确月份,提成关联充值订单金额和助教获得的提成金额。
大客户优惠/其他优惠划分规则:目前需要抽样分析。
平台回款/服务费口径:明确导入数据字段包含:回款金额、佣金、服务费、回款日期、平台类型、订单关联键。
散客处理member_id=0 的客户是散客。不进入客户维度统计。
门店/租户范围:现在只有一个门店,一个租户。

View File

@@ -0,0 +1,198 @@
# 筛选
- 按时间范围 本月/上个月/前3个月不加本月/前3个月+本月/最近半年不加本月/本季度含本月/上个季度/本周/上周
- 按区域筛选 大厅A区/B区/C区 /麻将房/团建房
# 新增功能
- 一个开关,打开后,可以与紧邻前一个等长区间进行对比(用上下箭头表示增/跌,并跟随百分比。)
- 对比数值的UI需要设计关闭状态和开启状态。
- 问号icon点击会有相应的弹窗显示内容。将弹出放在页面底部存在关闭按钮且默认5秒后自动消失。不影响滚动等操
# 数据展示调整
## 黑色banner 经营状况一览
### 行1收入概览 即 经营链:
- 发生额/正价。 点击提示icon
"
按台桌/包厢/助教/酒水的“正价”计算出的理论销售额,反映经营规模与业务量。
计算方式 = 各收入项目按正价 × 数量/时长汇总计算。
**不是最终收到了多少钱。**
"
- 总优惠 | 优惠比例。点击提示icon
"
本期因团购差价、大客户折扣、赠送卡抵扣、免单/抹零等导致的让利总额,用于解释“发生额”与“成交/确认收入”的差异。
计算方式 = 发生额 成交/确认收入
或 = 团购优惠 + 大客户优惠 + 赠送抵扣 + 其他优惠/免单/抹零(汇总)
"
- 成交/确认收入。点击提示icon
"
扣除各种优惠后的成交金额,**按记账规则统计的营业收入**。
计算方式 = 发生额 团购优惠 大客户优惠 赠送抵扣(及其他优惠)。
**不含充值营业收入** 充值是预收/负债,但会影响现金流。**
"
### 行2现金概览 注:往期为已结算,本期为预估:
- 实收/现金流入
"
统计真实进账的资金,包括现金 + 线上支付 + 平台回款。
计算方式 = 消费实收 + 平台团购 - 各类退款/冲正。
**此为现金口径,不等于营业收入。**区别为:充值属于预收款的现金流入,属于预存行为,球房债务。
"
- 现金支出。点击提示icon
"
本期所有支出项目的合计。
计算方式 = 房租 + 水电 + 进货成本支出 + 耗材 + 报销 + 助教分成 + 固定人员工资 + 平台服务费 + 其他费用
"
- 现金结余 | 结余率。点击提示icon
"
本期营业收入扣除全部成本后的利润,用于衡量经营质量。
计算方式= 实收/现金流入 总支出。
"
## AI分析
以下内容先占位真实内容会通过AI接口调用展示此处为标准Markdown内容排版。
优惠率Top团购(%) / 大客户(%) / 赠送卡(%)
差异最大项目:酒水 / 台桌 / 包厢 ...
财务分析:充值高但消耗低(或相反)提示
## 充值与预收
### 行1 会员卡概览
- 储值卡充值实收 首充 | 续费 | 合计。点击提示icon
"
本期储值卡充值到账的新增金额。
按照首充,续费,合计路径进行统计。
计算方式 = 本期储值卡充值订单的实收金额。
不含赠送金额
"
- 全类别会员卡余额合计 **仅经营参考,非财务属性**。点击提示icon
"
截至本期末,顾客充值后尚未消费的储值余额,包括赠送的台费卡酒水卡等类别,用于判断未来可转化的消费规模。
计算方式 = 各类会员卡往期余额 + 本期充值到账与赠送到账 本期卡消耗 ± 调整(退款/冲正/手工修正)
"
### 行2 储值卡统计详情
- 储值卡充值。点击提示icon
"
本期储值卡充值到账的新增金额。
"
- 储值卡消耗。点击提示icon
"
余额卡在查询周期内消耗金额。
计算方式 = 本期消耗 ± 调整
"
- 储值卡总余额。点击提示icon
"
截至本期末,余额卡可用的余额。
计算方式 = 期初余额卡余额 + 本期新增 本期消耗 ± 调整
"
### 行3 赠送卡统计详情
需要设计下页面,主要字段是合计,且细分的也要展示。
- 赠送卡新增合计;细分 酒水卡|台费卡|抵用券。点击提示icon
"
本期各类型赠送卡的新增金额。
"
- 赠送卡消费合计;细分酒水卡|台费卡|抵用券。点击提示icon
"
本期各类型赠送卡在查询周期内消耗金额。
计算方式 = 本期消耗 ± 调整
"
- 赠送卡总余额合计;细分酒水卡|台费卡|抵用券。点击提示icon
"
截至本期末,各类型赠送卡可用的余额。
计算方式 = 期初余额 + 本期新增 本期消耗 ± 调整
"
## 发生额 → 入账收入 及 优惠影响
页面字段结构:
### 收入确认(损益链)
发生额(正价) ¥123,456
├─ 团购优惠 -¥ 6,200
├─ 手动调整 + 大客户优惠 -¥ 4,800
├─ 赠送卡抵扣(台桌卡+酒水卡+抵用券) -¥ 2,336
└─ 其他优惠 免单+抹零 -¥ 0
成交/确认收入 ¥110,120
支付方式构成
├─ 由储值卡结算冲销 ¥60,120
├─ 现金/线上支付 ¥60,120
└─ 团购核销确认收入(团购成交价) ¥60,120
现金流
消费现金流入:现金+线上+平台回款−退款 ¥60,120
充值到账(首充/续费) ¥60,120
现金流入合计 ¥60,120
### 收入结构
收入结构(发生额 | 优惠 | 入账
开台与包厢 ¥xx,xxx | -¥x,xxx | ¥xx,xxx
├─ A区 ¥xx,xxx | -¥x,xxx | ¥xx,xxx
├─ B区 ¥xx,xxx | -¥x,xxx | ¥xx,xxx
├─ C区 ¥xx,xxx | -¥x,xxx | ¥xx,xxx
├─ 团建区 ¥xx,xxx | -¥x,xxx | ¥xx,xxx
└─ 麻将区 ¥xx,xxx | -¥x,xxx | ¥xx,xxx
助教(基础课) ¥xx,xxx | -¥ | ¥xx,xxx
助教(激励课) ¥xx,xxx | -¥ | ¥xx,xxx
食品酒水 ¥xx,xxx | -¥x,xxx | ¥xx,xxx
## 支出结构
助教分成基础¥x,xxx 附加¥x,xxx 充值提成¥x,xxx
助教额外奖金¥x,xxx
食品饮料进货¥x,xxx 耗材¥x,xxx 报销¥x,xxx
房租¥x,xxx 水电¥x,xxx 物业¥x,xxx
固定人员工资¥x,xxx
汇来米平台服务费¥x,xxx
美团服务费¥x,xxx 抖音服务费¥x,xxx
支出合计 ¥ xx,xxx
## 助教收支分析
助教基础课 客户支付 | 球房抽成 | 球房均小时抽成
├─ 初级 客户支付 | 球房抽成 | 球房均小时抽成
├─ 中级 客户支付 | 球房抽成 | 球房均小时抽成
├─ 高级 客户支付 | 球房抽成 | 球房均小时抽成
└─ 星级 客户支付 | 球房抽成 | 球房均小时抽成
助教激励课 客户支付 | 球房抽成 | 球房均小时抽成