3. 事件属性设计原则:维度分层、枚举值规范、扩展性考量

3.1 用户场景与业务问题

在行为事件追踪中,属性是分析数据的最小颗粒。某团队在用户访谈时发现,同一事件“点击购买”上报的属性混乱:

  • 商品ID有时用 product_id,有时用 goods_id;
  • 支付金额单位不一致,有的用分、有的用元;
  • 平台字段值如“iOS”“iphone”“苹果”并存,导致统计失准。

业务问题本质:属性缺乏分层设计、枚举值无标准、扩展能力不足,最终分析团队需花费30%工时做数据清洗。

访谈洞察 —— 数据工程师反馈:“每接入一个新版本,属性字段就要修改一次SDK,每次修改都要回归测试,不敢动。” 产品经理反馈:“我只想知道用户来源是哪个广告渠道,但上报过来的值根本没有统一的渠道编码。”

3.2 需求拆解:三原则模型

将用户痛点转化为设计原则,建立统一的事件属性规范:

原则 核心要求 解决的用户问题
维度分层 区分公共维度、业务维度、技术维度 属性归属模糊,不同团队随意加字段
枚举值规范 统一命名、类型、取值范围、校验规则 数据质量差,清洗成本高
扩展性考量 预留扩展字段、版本号、标签化机制 频繁改SDK,回归周期长

3.3 方案表达:维度分层模型

将事件属性按归属三层分层:

  • 公共维度 —— 所有事件必须携带:user_id、device_id、client_ts、app_version、platform、channel。
  • 业务维度 —— 特定事件专属:product_id、order_type、amount、source_page。
  • 技术维度 —— 系统标记:event_ver(事件格式版本)、sdk_version、trace_id、debug_flag。
事件属性维度分层模型 公共维度(所有事件必带) user_id device_id client_ts app_version platform channel 业务维度(按事件类型定义) product_id order_type amount source_page category_id sub_channel is_first_purchase 技术维度(系统自动标记) event_ver sdk_version trace_id debug_flag env_type(release/alpha/beta) ⚠ 新加属性必须先确认归属层,避免污染公共维度

3.4 枚举值规范

为每个枚举字段建立统一规范文档,示例:

字段名 数据类型 可选值 校验规则
platform string ios、android、web、mp 严格小写,长度≤16
channel string 统一业务编码,如mcd、sg_official 正则 ^[a-z_]{1,32}$
order_type int 1普通订单,2拼团,3秒杀 范围1~100
is_first_purchase boolean true、false 不允许为null
常见陷阱 —— 枚举值切忌使用“字符串自由赋值”,如“iOS_V1.0.2”、“iOS12.3”等变种。坚持统一的枚举表,通过审批后才能新增。线上数据一经格式错误,回溯清洗成本极高。

3.5 扩展性考量

三个设计点保障未来扩展:

  1. 版本号字段:每个事件携带 event_ver,当属性体系变更时发布新版本,旧事件仍可用。
  2. 预留标签字段:使用 ext_ 前缀预留5个字符串字段(如 ext_1~ext_5),SDK 不上报空值,仅在需要时启用。
  3. 标签化机制:允许为属性打标签(如“黑盒实验属性”),避免属性名称无限膨胀。

3.6 指标验证与验收标准

采用下述验收检查表确保设计落地:

检查项 验证方法 通过标准
维度分层完整性 遍历当前所有事件,检查属性是否属于三层之一 无属性未分层,每层属性数量≤20(推荐)
枚举值覆盖率 列出所有字符串/整型属性,匹配枚举规范文档 100%的枚举属性有明确可选值或正则
扩展字段可用性 新增一个临时代码属性验证报告 无需修改SDK即可新增属性值(仅后端配置)
数据质量监控 采样10000条事件,统计枚举值异常比例 异常比例<0.1%

3.7 交付物模板:事件属性设计文档

每次接入新事件/新属性时,须输出以下模板(节选):

【交付模板】事件属性规范表(v1.0)
事件名称:click_purchase
事件版本:1
属性清单:
| 属性名           | 类型   | 层级     | 枚举值说明               | 校验规则           |
|-----------------|--------|----------|--------------------------|-------------------|
| user_id          | string | 公共     | 用户ID                  | 长度≤64           |
| product_id       | string | 业务     | 商品唯一标识             | 正则 ^[A-Z0-9]+$ |
| order_type       | int    | 业务     | 1普通 2团购 3秒杀       | 1-3               |
| event_ver        | int    | 技术     | 当前版本号               | 固定为1           |
| ext_1            | string | 技术     | 预留扩展                | 可选,不传空串    |
审批人:产品负责人____ 技术负责人____ 数据负责人____
生效日期:YYYY-MM-DD

此模板与验收清单配合,形成属性设计SOP:每次新事件上线前,必须逐项打勾通过,否则不允许提测。