售后服务
我们是专业的

Day 39下午-1:主题域划分 - 用户、车辆、工单三大核心域的深度建模

🎯 为什么说主题域划分是数据建模的「灵魂」?

2023年夏天,某造车新势力的数据团队陷入了困境:

他们花了6个月时间,建了127张数据表,写了3500+个字段,但当业务部门问:「最近3个月购买过延保的用户,他们的平均客单价是多少?」

数据团队傻眼了:

  • 用户信息分散在8张表里
  • 延保信息在CRM系统的订单表
  • 客单价需要从售后系统的工单表计算
  • 三个系统的用户ID关联规则还不统一

一个看似简单的问题,3个数据分析师花了整整5天才给出答案。

他们的问题在哪?没有做主题域划分,数据散落各处,像一盘散沙。


📐 什么是主题域(Subject Area)?

主题域 = 按业务主题组织的数据集合,是企业数据资产的「图书馆分类法」。

类比:图书馆的启示

想象一个图书馆,如果没有分类:

  • 10万本书随机堆放
  • 找一本书需要翻遍整个图书馆
  • 书与书之间的关系无从得知

但有了图书分类法(文学、历史、科学...)后:

  • 每本书都有明确的归属
  • 同类书籍聚在一起
  • 找书只需要定位到对应分类

主题域就是数据世界的「图书分类法」。


🏗️ 售后业务的五大主题域

经过对100+家新能源车企的售后数据架构分析,我们提炼出通用的五大主题域

售后业务数据架构
├─ 用户主题域 (Customer Domain)
├─ 车辆主题域 (Vehicle Domain)
├─ 工单主题域 (Service Order Domain)
├─ 配件主题域 (Parts Domain)
└─ 人员主题域 (Staff Domain)

今天我们深度拆解前三大核心域。


👤 用户主题域 (Customer Domain)

核心问题:我们的用户是谁?他们有什么特征?

用户主题域回答三类问题:

  1. 是谁:用户的身份属性(姓名、性别、年龄、职业...)
  2. 在哪:用户的地理属性(城市、区域、距最近门店距离...)
  3. 怎样:用户的行为属性(累计消费、服务次数、会员等级、生命周期...)

用户主题域的数据模型设计

核心实体:dim_user(用户维度表)

设计原则:一个用户,一行记录(使用SCD Type 2处理历史变化)

CREATE TABLE dim_user (
  -- 主键
  user_key INT PRIMARY KEY AUTO_INCREMENT,  -- 代理键
  user_id VARCHAR(50) UNIQUE,               -- 业务键(CRM用户ID)

  -- 身份属性
  user_name VARCHAR(100),
  id_card VARCHAR(18),
  phone VARCHAR(20),
  email VARCHAR(100),
  gender VARCHAR(10),  -- 男/女/未知
  birth_date DATE,
  age INT,

  -- 地理属性
  province VARCHAR(50),
  city VARCHAR(50),
  district VARCHAR(50),
  address TEXT,
  nearest_center_id INT,           -- 最近服务中心ID
  distance_to_center DECIMAL(5,1), -- 距最近中心的距离(km)

  -- 职业与收入(选填)
  occupation VARCHAR(100),
  income_range VARCHAR(50),  -- <10万/10-20万/20-50万/>50万
  education VARCHAR(50),

  -- 会员属性
  membership_level VARCHAR(50),     -- 普通/银卡/金卡/白金/黑卡
  membership_start_date DATE,
  membership_points INT,

  -- 车辆关系(冗余字段,提升查询性能)
  vehicle_count INT,               -- 拥有车辆数
  first_vehicle_purchase_date DATE,-- 首次购车日期
  main_vehicle_model VARCHAR(100), -- 主力车型

  -- 行为统计(定期更新)
  total_orders INT,                -- 累计工单数
  total_spend DECIMAL(12,2),       -- 累计消费金额
  avg_order_value DECIMAL(10,2),   -- 平均客单价
  last_service_date DATE,          -- 最近服务日期
  days_since_last_service INT,     -- 距上次服务天数
  lifetime_value DECIMAL(12,2),    -- 客户终身价值(预测)

  -- 偏好属性
  preferred_advisor VARCHAR(100),  -- 偏好服务顾问
  preferred_service_time VARCHAR(50), -- 偏好服务时段(工作日上午/下午/晚上,周末...)
  preferred_contact_method VARCHAR(50), -- 偏好联系方式(短信/电话/APP)

  -- 风险标签
  is_vip BOOLEAN,
  is_high_risk BOOLEAN,            -- 是否高流失风险
  churn_probability DECIMAL(3,2),  -- 流失概率(0-1)
  satisfaction_trend VARCHAR(20),  -- 满意度趋势(上升/稳定/下降)

  -- SCD字段
  effective_date DATE,
  expiry_date DATE,
  is_current BOOLEAN,

  -- 数据质量与审计
  data_source VARCHAR(50),         -- CRM/DMS/APP/导入
  data_quality_score INT,          -- 数据质量评分(0-100)
  created_at TIMESTAMP,
  updated_at TIMESTAMP,
  created_by VARCHAR(50)
);

字段数:42个(这是一张典型的宽表)


真实案例:蔚来的用户360°画像

蔚来的用户维度表有180+个字段,构建了业内最完善的用户画像系统。

基础信息层(30字段)

  • 身份信息、联系方式、地理位置

车辆关系层(25字段)

  • 拥有车型、购车时间、车辆配置、电池方案(租赁/买断)

消费行为层(40字段)

  • 累计工单数、累计消费、平均客单价
  • 服务频次、最近活跃时间、活跃度评分
  • 保养习惯、配件购买偏好

服务偏好层(30字段)

  • 偏好服务顾问、偏好服务时间
  • 偏好支付方式、是否使用代步车
  • 是否预约、预约提前天数

社交属性层(25字段)

  • APP活跃度、社区发帖数、点赞数
  • NIO Radio听歌时长、参加活动次数
  • 推荐新用户数量

风险预警层(30字段)

  • 流失风险评分、满意度趋势
  • 投诉次数、投诉类型分布
  • 竞品关注度(通过APP行为推测)

这套体系让蔚来能够:

  • 提前90天识别高流失风险用户,挽回率提升65%
  • 精准推送服务提醒,预约率提升40%
  • 个性化服务推荐,增值服务渗透率提升3.2倍

用户主题域的3个设计难点

难点1:多车用户如何处理?

**场景:**一个用户拥有2辆车,Model 3和Model Y。

方案A:用户表中冗余主力车型(推荐)

dim_user表:
  user_id: U123456
  main_vehicle_model: "Model 3"  -- 主力车型
  vehicle_count: 2

方案B:建立用户-车辆关系表

bridge_user_vehicle表:
  user_id: U123456, vehicle_id: V001, is_main: TRUE
  user_id: U123456, vehicle_id: V002, is_main: FALSE

实战建议:

  • 如果90%以上用户只有1辆车:用方案A
  • 如果多车用户比例>10%:用方案B

难点2:用户属性变化如何追溯?

**场景:**用户张三在2023年是「普通会员」,2024年升级为「金卡会员」。分析2023年数据时,应该用哪个会员等级?

解决方案:SCD Type 2(缓慢变化维度)

-- 2023年的记录
user_key: 1001
user_id: "U123456"
user_name: "张三"
membership_level: "普通会员"
effective_date: "2023-01-01"
expiry_date: "2023-12-31"
is_current: FALSE

-- 2024年的记录
user_key: 1002
user_id: "U123456"
user_name: "张三"
membership_level: "金卡会员"
effective_date: "2024-01-01"
expiry_date: "9999-12-31"
is_current: TRUE

查询2023年数据时:

SELECT u.membership_level
FROM fact_service_order f
JOIN dim_user u ON f.user_key = u.user_key
WHERE f.order_date BETWEEN '2023-01-01' AND '2023-12-31';
-- 自动关联到user_key=1001,显示「普通会员」✅

这样就保证了历史数据分析的准确性。


难点3:用户数据质量如何保证?

常见问题:

  • 手机号为空或格式错误
  • 地址不完整
  • 重复用户(同一人多个ID)

蔚来的数据质量评分体系:

data_quality_score = 
  (手机号完整性 × 30%) +
  (地址完整性 × 20%) +
  (车辆关联完整性 × 20%) +
  (行为数据完整性 × 15%) +
  (重复率检查 × 15%)

实施效果:

  • 数据质量评分<60分的用户,触发人工审核
  • 每季度清洗一次,数据完整率从68%提升到94%

🚗 车辆主题域 (Vehicle Domain)

核心问题:我们在服务哪些车?它们的状态如何?

车辆主题域回答三类问题:

  1. 是什么车:车型、配置、VIN码...
  2. 用了多久:购车日期、行驶里程、车龄...
  3. 什么状态:保修状态、电池健康度、历史维修记录...

车辆主题域的数据模型设计

核心实体:dim_vehicle(车辆维度表)

CREATE TABLE dim_vehicle (
  -- 主键
  vehicle_key INT PRIMARY KEY AUTO_INCREMENT,
  vehicle_id VARCHAR(50) UNIQUE,  -- 业务键(车辆ID)
  vin VARCHAR(17) UNIQUE,         -- VIN码(车辆识别代号)

  -- 车辆基本信息
  brand VARCHAR(50),              -- 品牌(特斯拉/蔚来/小鹏...)
  model VARCHAR(100),             -- 车型(Model 3/ES8...)
  variant VARCHAR(100),           -- 配置(标准续航/长续航...)
  model_year INT,                 -- 年款(2023/2024...)
  color VARCHAR(50),              -- 车身颜色
  interior_color VARCHAR(50),     -- 内饰颜色

  -- 动力与电池
  power_type VARCHAR(50),         -- 纯电/混动/增程
  battery_capacity DECIMAL(5,1),  -- 电池容量(kWh)
  battery_brand VARCHAR(50),      -- 电池品牌(宁德时代/比亚迪...)
  battery_ownership VARCHAR(20),  -- 电池所有权(买断/租赁)
  motor_power INT,                -- 电机功率(kW)
  drive_type VARCHAR(20),         -- 驱动类型(前驱/后驱/四驱)

  -- 购买信息
  purchase_date DATE,
  purchase_price DECIMAL(10,2),
  purchase_channel VARCHAR(50),   -- 直营/经销商/二手
  is_first_owner BOOLEAN,         -- 是否首任车主

  -- 所有权信息
  owner_user_id VARCHAR(50),      -- 当前车主ID
  owner_change_count INT,         -- 过户次数

  -- 使用状态
  current_mileage INT,            -- 当前里程(km)
  avg_monthly_mileage INT,        -- 月均里程
  vehicle_age_days INT,           -- 车龄(天)
  days_since_last_service INT,    -- 距上次保养天数

  -- 保修信息
  warranty_start_date DATE,
  warranty_end_date DATE,
  warranty_mileage_limit INT,     -- 质保里程上限
  is_in_warranty BOOLEAN,         -- 是否在保
  extended_warranty BOOLEAN,      -- 是否购买延保
  extended_warranty_end_date DATE,

  -- 技术状态
  battery_health DECIMAL(3,2),    -- 电池健康度(0-1)
  software_version VARCHAR(50),   -- 车机系统版本
  last_ota_date DATE,             -- 最近OTA升级日期

  -- 服务历史统计
  total_service_count INT,        -- 累计服务次数
  total_service_cost DECIMAL(12,2), -- 累计服务费用
  last_service_date DATE,
  last_service_type VARCHAR(100), -- 最近服务类型

  -- 问题与风险
  recall_count INT,               -- 召回次数
  major_repair_count INT,         -- 重大维修次数
  accident_count INT,             -- 事故次数
  risk_level VARCHAR(20),         -- 风险等级(低/中/高)

  -- 车辆状态
  vehicle_status VARCHAR(50),     -- 在用/报废/转出/失联
  deregistration_date DATE,       -- 注销日期

  -- 数据质量
  data_source VARCHAR(50),
  data_quality_score INT,
  created_at TIMESTAMP,
  updated_at TIMESTAMP
);

字段数:53个


真实案例:特斯拉的车辆全生命周期管理

特斯拉对每辆车进行实时监控,车辆维度表每小时更新一次。

核心能力:

1. 预测性维护

  • 通过车辆传感器数据,预测零部件寿命
  • 提前2周提醒用户:「您的刹车片剩余寿命15%,建议尽快保养」
  • 减少了70%的路边抛锚事件

2. 电池健康追踪

  • 实时监控电池衰减
  • 发现异常衰减车辆,主动联系用户检测
  • 电池投诉率下降45%

3. OTA升级管理

  • 记录每辆车的软件版本
  • 推送升级时,识别哪些车还未升级
  • OTA完成率从82%提升到98%

车辆主题域的3个设计难点

难点1:里程数如何保持准确?

**问题:**用户不一定每次都来官方服务中心,里程数可能不准。

特斯拉的方案:

  • 通过车联网,每天自动上传里程数
  • 车辆维度表的current_mileage每天更新
  • 如果连续7天未上传,标记为「数据异常」

传统车企的方案:

  • 每次进店时,技师手动录入里程数
  • 系统自动校验:如果新里程<旧里程,触发异常提示
  • 如果里程增长过快(>1000km/天),也触发异常

难点2:二手车如何处理?

**场景:**车辆V001在2023年卖给了新车主。

方案A:更新owner_user_id(简单,但丢失历史)

UPDATE dim_vehicle 
SET owner_user_id = 'U999999',
    owner_change_count = owner_change_count + 1
WHERE vehicle_id = 'V001';

方案B:建立车辆-车主关系历史表(推荐)

CREATE TABLE vehicle_owner_history (
  vehicle_id VARCHAR(50),
  owner_user_id VARCHAR(50),
  ownership_start_date DATE,
  ownership_end_date DATE,
  is_current BOOLEAN
);

好处:

  • 可以追溯每辆车的所有车主
  • 分析:「二手车主的服务频次是否高于首任车主?」

难点3:车辆报废后如何处理?

方案:软删除 + 状态标记

UPDATE dim_vehicle
SET vehicle_status = '已报废',
    deregistration_date = '2024-06-15',
    is_current = FALSE
WHERE vehicle_id = 'V001';

查询时自动过滤:

SELECT * FROM dim_vehicle
WHERE vehicle_status = '在用';  -- 只看在用车辆

保留报废车辆数据的价值:

  • 分析报废车辆的平均里程、车龄
  • 研究哪些车型更容易报废
  • 预测车辆残值

📋 工单主题域 (Service Order Domain)

核心问题:发生了什么服务?效果如何?

工单主题域是售后业务的核心,记录每一次服务的完整过程。

工单主题域的数据模型设计

核心实体:fact_service_order(工单事实表)

CREATE TABLE fact_service_order (
  -- 主键与外键
  order_id VARCHAR(50) PRIMARY KEY,        -- 工单号(退化维度)
  order_date_key INT,                      -- 关联日期维度
  user_key INT,                            -- 关联用户维度
  vehicle_key INT,                         -- 关联车辆维度
  center_key INT,                          -- 关联服务中心维度
  advisor_key INT,                         -- 关联服务顾问维度
  technician_key INT,                      -- 关联技师维度
  service_type_key INT,                    -- 关联服务类型维度

  -- 时间属性
  appointment_datetime TIMESTAMP,          -- 预约时间
  arrival_datetime TIMESTAMP,              -- 到店时间
  start_service_datetime TIMESTAMP,        -- 开始服务时间
  complete_datetime TIMESTAMP,             -- 完工时间
  delivery_datetime TIMESTAMP,             -- 交车时间

  -- 业务标志
  is_appointment BOOLEAN,                  -- 是否预约
  is_warranty BOOLEAN,                     -- 是否质保
  is_first_repair BOOLEAN,                 -- 是否首次维修
  is_emergency BOOLEAN,                    -- 是否紧急服务
  is_loaner_car BOOLEAN,                   -- 是否使用代步车

  -- 财务指标(事实度量)
  labor_amount DECIMAL(10,2),              -- 工时费
  parts_amount DECIMAL(10,2),              -- 配件费
  additional_service_amount DECIMAL(10,2), -- 增值服务费
  discount_amount DECIMAL(10,2),           -- 优惠金额
  total_amount DECIMAL(10,2),              -- 总金额
  paid_amount DECIMAL(10,2),               -- 实付金额
  payment_method VARCHAR(50),              -- 支付方式

  -- 效率指标
  waiting_duration INT,                    -- 等待时长(分钟)
  service_duration INT,                    -- 服务时长(分钟)
  total_duration INT,                      -- 总耗时(分钟)
  standard_duration INT,                   -- 标准工时(分钟)
  efficiency_ratio DECIMAL(3,2),           -- 效率比(实际/标准)

  -- 质量指标
  satisfaction_score INT,                  -- 满意度评分(1-5)
  satisfaction_comment TEXT,               -- 满意度评价
  is_first_time_fix BOOLEAN,               -- 是否一次修好
  rework_count INT,                        -- 返修次数
  complaint_flag BOOLEAN,                  -- 是否投诉

  -- 服务内容
  service_items TEXT,                      -- 服务项目清单(JSON)
  parts_used TEXT,                         -- 使用配件清单(JSON)
  fault_description TEXT,                  -- 故障描述
  solution_description TEXT,               -- 解决方案描述

  -- 里程信息
  mileage_at_service INT,                  -- 服务时里程
  days_since_last_service INT,             -- 距上次服务天数

  -- 工单状态
  order_status VARCHAR(50),                -- 已预约/进行中/已完成/已取消
  cancel_reason VARCHAR(200),

  -- 数据质量
  data_source VARCHAR(50),
  created_at TIMESTAMP,
  updated_at TIMESTAMP
);

字段数:45个


真实案例:小鹏汽车的工单全流程数字化

小鹏汽车把工单细化为8个时间节点,精准追踪每个环节的效率。

完整时间链:

用户预约 → 确认预约 → 到店 → 接待 → 派工 → 开始维修 → 完工 → 质检 → 交车
   T0        T1       T2     T3      T4       T5         T6      T7     T8

每个环节都有SLA(服务等级协议):

  • T2-T3(到店到接待):≤5分钟
  • T3-T4(接待到派工):≤10分钟
  • T4-T5(派工到开始):≤15分钟
  • T6-T7(完工到质检):≤20分钟
  • T7-T8(质检到交车):≤10分钟

超时自动预警:

  • 如果T2-T3超过5分钟,店长手机收到提醒
  • 如果任何环节超时>30分钟,区域经理收到告警

效果:

  • 平均交车时长从4.2小时降低到2.8小时
  • 客户满意度从4.1分提升到4.7分

工单主题域的3个设计难点

难点1:一个工单多个服务项目如何存储?

**场景:**一个保养工单包含:更换机油、更换滤芯、四轮定位、轮胎充气。

方案A:JSON字段存储(推荐,简单场景)

service_items: [
  {"item": "更换机油", "amount": 200},
  {"item": "更换滤芯", "amount": 150},
  {"item": "四轮定位", "amount": 300},
  {"item": "轮胎充气", "amount": 0}
]

方案B:建立工单明细表(推荐,复杂分析)

CREATE TABLE fact_service_order_item (
  order_id VARCHAR(50),
  item_seq INT,
  service_item_name VARCHAR(200),
  service_item_category VARCHAR(100),
  labor_amount DECIMAL(10,2),
  parts_amount DECIMAL(10,2),
  duration INT,
  PRIMARY KEY (order_id, item_seq)
);

选择建议:

  • 如果只需要展示,不需要按服务项目聚合分析:用方案A
  • 如果需要分析「哪个服务项目最赚钱」:用方案B

小鹏汽车用的是方案B,因为他们需要精细化分析每个服务项目的盈利能力。


难点2:工单取消和返修如何处理?

场景1:用户预约后临时取消

order_status = '已取消'
cancel_reason = '行程冲突'
cancel_datetime = '2024-12-28 09:30:00'

保留取消工单的价值:

  • 分析取消率:哪个时段/哪个门店取消率高?
  • 分析取消原因分布
  • 优化预约提醒策略

场景2:用户修完后又回来返修

方案:通过rework_count字段标记

-- 首次工单
order_id: 'ORD001'
rework_count: 0
is_first_time_fix: TRUE

-- 返修工单
order_id: 'ORD001-R1'
original_order_id: 'ORD001'
rework_count: 1
is_first_time_fix: FALSE

通过返修数据可以:

  • 计算首次修复率(FTF Rate)
  • 分析哪些故障容易返修
  • 识别技师的技能短板

难点3:跨天工单如何计算时长?

**场景:**用户下午4点到店,但配件缺货,第二天上午10点才交车。

时间记录:

arrival_datetime: '2024-12-28 16:00:00'
delivery_datetime: '2024-12-29 10:00:00'
total_duration: 1080分钟 (18小时)

但实际服务时长可能只有2小时!

解决方案:分别记录在店时长和实际服务时长

total_duration: 1080         -- 总在店时长
service_duration: 120        -- 实际服务时长
waiting_duration: 960        -- 等待时长(配件到货)

这样分析时可以:

  • 用service_duration计算技师效率
  • 用waiting_duration识别瓶颈(配件供应慢)
  • 用total_duration计算用户等待体验

💡 三大主题域的关联关系

核心关系图

     用户主题域
   (dim_user)
        |
        | 1:N
        |
     车辆主题域  
   (dim_vehicle)
        |
        | 1:N
        |
     工单主题域
(fact_service_order)

解读:

  • 1个用户可以拥有多辆车(1:N)
  • 1辆车可以产生多个工单(1:N)
  • 所以:1个用户可以产生多个工单(通过车辆间接关联)

典型分析场景

场景1:分析高价值用户的服务特征

SELECT 
  u.membership_level,
  COUNT(DISTINCT u.user_key) AS user_count,
  AVG([f.total](http://f.total)_amount) AS avg_order_value,
  COUNT(f.order_id) AS total_orders
FROM fact_service_order f
JOIN dim_user u ON f.user_key = u.user_key
WHERE [u.total](http://u.total)_spend > 50000  -- 累计消费>5万的高价值用户
GROUP BY u.membership_level;

场景2:分析不同车龄的维修频次

SELECT 
  CASE 
    WHEN v.vehicle_age_days < 365 THEN '1年内'
    WHEN v.vehicle_age_days < 730 THEN '1-2年'
    WHEN v.vehicle_age_days < 1095 THEN '2-3年'
    ELSE '3年以上'
  END AS vehicle_age_group,
  COUNT(f.order_id) AS order_count,
  AVG([f.total](http://f.total)_amount) AS avg_amount
FROM fact_service_order f
JOIN dim_vehicle v ON f.vehicle_key = v.vehicle_key
GROUP BY vehicle_age_group;

场景3:识别即将流失的高价值用户

SELECT 
  u.user_name,
  [u.phone](http://u.phone),
  [u.total](http://u.total)_spend,
  u.days_since_last_service,
  v.current_mileage,
  v.days_since_last_service AS vehicle_days_since_service
FROM dim_user u
JOIN dim_vehicle v ON u.user_id = v.owner_user_id
WHERE [u.total](http://u.total)_spend > 30000        -- 高价值
  AND u.days_since_last_service > 180  -- 6个月未来
  AND v.current_mileage > 15000        -- 里程数较高
  AND u.churn_probability > 0.6        -- 流失风险高
ORDER BY [u.total](http://u.total)_spend DESC
LIMIT 100;

这个SQL可以直接驱动用户召回campaign!


✅ 本节关键要点

  1. 主题域是数据的「图书分类法」,让数据井然有序
  2. 用户主题域:构建360°用户画像,记录"是谁、在哪、怎样"
  3. 车辆主题域:追踪车辆全生命周期,从购买到报废
  4. 工单主题域:记录每次服务的完整过程和结果
  5. 宽表设计:维度表要宽不要窄,宁可冗余不要关联
  6. SCD Type 2:用于追踪历史变化,确保分析准确性
  7. 三大域紧密关联:用户→车辆→工单,形成完整的业务链路

**下一节预告:**我们将学习配件主题域和人员主题域,并通过完整案例串联五大主题域。

未经允许不得转载:似水流年 » Day 39下午-1:主题域划分 - 用户、车辆、工单三大核心域的深度建模