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。
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 扩展性考量
三个设计点保障未来扩展:
- 版本号字段:每个事件携带
event_ver,当属性体系变更时发布新版本,旧事件仍可用。 - 预留标签字段:使用
ext_前缀预留5个字符串字段(如ext_1~ext_5),SDK 不上报空值,仅在需要时启用。 - 标签化机制:允许为属性打标签(如“黑盒实验属性”),避免属性名称无限膨胀。
3.6 指标验证与验收标准
采用下述验收检查表确保设计落地:
| 检查项 | 验证方法 | 通过标准 |
|---|---|---|
| 维度分层完整性 | 遍历当前所有事件,检查属性是否属于三层之一 | 无属性未分层,每层属性数量≤20(推荐) |
| 枚举值覆盖率 | 列出所有字符串/整型属性,匹配枚举规范文档 | 100%的枚举属性有明确可选值或正则 |
| 扩展字段可用性 | 新增一个临时代码属性验证报告 | 无需修改SDK即可新增属性值(仅后端配置) |
| 数据质量监控 | 采样10000条事件,统计枚举值异常比例 | 异常比例<0.1% |
3.7 交付物模板:事件属性设计文档
每次接入新事件/新属性时,须输出以下模板(节选):
【交付模板】事件属性规范表(v1.0)
事件名称:click_purchase
事件版本:1
生效日期:YYYY-MM-DD
事件名称: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:每次新事件上线前,必须逐项打勾通过,否则不允许提测。