0x00 前言
在前两篇《初识埋点》和《埋点之前》的基础上,我们应该有了对埋点的基本认识、知道了具体的开发流程。本篇在前面铺垫的基础上进入具体的埋点设计环节。通过本篇的阅读,你将获得以下五个埋点设计思维的认知。
- 漏斗思维
- 层次思维
- 扩展思维
- 分类思维
0x01 漏斗思维
漏斗思维即分阶段思维,是从流水线的角度考虑问题,追踪整个链条,具体有以下两种形式。* 同一事件的不同阶段在埋点设计中时常会遇到一些持续性的事件,不是在瞬间完成的,比如播放、下载等,都存在这一定的持续阶段,对于这样的非孤立事件,要设计一个链条进行追踪,在埋点设计中常用会话的方式表示,比如可以采用开始时间戳的方式作为会话id,每次事件开始都会生成不同的事件id。此外在设计埋点的事件名的时候也应该显著的进行区分,比如用同一个事件,然后在该事件的属性参数中选择一个类似step的参数来代表该事件的不同阶段,若每次事件的消费对象具有唯一的标示符如indentid,这样就可以使用imei eventid step indentid这四个值串联了该次事件的整个过程。也可以用不同的事件名进行串联事件(或者过程)的不同阶段,如下图弹窗的上报逻辑:
同一事件的不同平台 不同平台的串联简单来说是入口要做统计,出口也要统计,做好衔接, 形成一个完整的漏斗。以分享为例,客户端的分享(点击开始分享、分享结果返回)要做埋点,分享出去的页面的展现和点击也要设计埋点,在设计埋点参数的时候要注意加入加密处理过的用户标示、分享来源标示等,代表一次完整的分享会话,做好跨平台之间的信息透传,避免链条中断或者模糊。这里需要强调的是不同平台的串联容易泄露用户数据,要注意加密处理进行隐私保护。
0x02 层次思维
层次思维的是指在进行埋点设计的时候,要有将页面逻辑、事件过程、扩展参数等设计的有层次感。不仅可以方便对埋点进行查找,而且可以在更高维度上概括。具体体现在以下方面:
- 交互层次
交互层次主要处理母页面和子页面的展现和点击事件,对于某些app为了界面上的清洁,对一些行为操作进行了折叠,常见的场景如点击更多,出现分享、保存等操作按钮,长按评论,出现删除、复制、举报等操作,这些在弹出界面上的简答操作可以上卷到母页面上进行处理,比如原来的母页面上评论有点赞和回复两个点击位置,则子页面上点击上卷之后,就有点赞、回复、长按_复制、长按_删除四个点击位置,其中以长按代表子页面上的点击,这样上报更加清晰明了。但需要注意的是对于一些复杂的功能多样的子页面,要将这些页面当做普通的页面进行处理,并在页面相关的事件上进行普通页面和弹出页面的属性区分。
- 属性层次组合
属性层次常见于具有复杂参数上报的事件中,属性的参数值之间存在层次的组合关系,比如A参数取值为A1的情况下,B参数有B1,B2取值的可能,而当A参数为A2值的情况下,B参数有B3、B4取值的可能,像这种同一事件属性层次的组合关系又适合拆分成多个事件的情况下,建议使用参数组合表进行设计的展示,可以极大的方便开发处理各种逻辑和测试案例的完备性。
- 属性层次包含
属性层次包含是指在参数取值具有很明显的分类情况下,设计更高的层次来给每个类进行命名。比如参数A具有A1、A2、A3、A4...A9一系列值,A1、A2属于类C1,A3属于类C2,A4...A9属于类C3,若这一些列值存在明显的可区分特征,则在统计该类值过滤下相关事件行为即可,若不存在,则需要很繁琐的穷举,不仅代码臭长,而且当有新的该类值出现的时候,要不断的修改统计代码。此时若在参数设计上增加一个参数来进行C1、C2、C3的划分,则可以轻松的解决刚才的问题。
0x03 扩展思维
扩展思维是抽象思维的一种体现,越抽象的事物越容易扩展,但并不是说越抽象越好,把握号抽象的程度,可以有效的提高扩展性。
事件扩展
在设计事件的时候要有对业务扩展的预见性,比如一个app最初只具有发布自拍视频的功能,那么在设计视频发布相关的事件的时候是否应该采用shortvideo_publish_xx呢?如果采用这种事件id的数据方式,若以后新增了其它类型内容的发布,其基本流程和视频的发布基本类似,此时是将视频发布的相关事件流程重新复制一份,还是新增content_publish_xx事件,使用type参数来代表发布不同的内容类型(排除视频外的,就版本埋点事件要兼容),不论采用哪种设计,都会让埋点变得混乱,而如果最终设计的时候就采用content_publish_xx的方式进行设计,则就整洁很多,很容易扩展。
属性扩展
属性扩展在属性值的上报格式上体现十分明显,此外 扩展格式设计的时候要不影响已有数据的原始处理逻辑,表现在埋点上尽可能的采用增加属性和属性值的方式进行 埋点,避免一大堆不可复用的垃圾事件,增加管理的难度。具体的措施如下:采用字典的方式进行埋点,尽量不要采用分隔符分割的列表方式,例如:vid1_vid2_vid3 对可能出现的逻辑进行顶层设计区分,在每层上同样采用字典的方式 对多个事件引用的同一属性的枚举值,建议用表分割出来,不要在每个事件上一个个地修改 卡片类等点击内容可能多个的情况,在设计之初就应该有clickid属性用以区分点击的具体位置 针对点击事件的针对性,比如针对某条评论的点击恢复,点赞等,在点击事件中要设计针对属性。
0x04 分类思维
按位置、按模块、按页面、按功能等多角度进行分类,有时将行为从页面中独立出来形成单独的一类,比如如果app中在多个地方都存在分享、评论和点赞等功能,而这些行为的统计又是经常使用到的指标,更甚至若在底层实现上这些模块都继承自同一个模块,这就天然具有了在埋点设计的时候按行为分类,而不是在每个页面的位置上都单独设计埋点事件。试想一下如果各个页面维护各自的分享模块,如果分享渠道增加一个,那么是不是要更新所有页面分享的埋点设计,追加响应的参数值(当然如果所有页面虽然使用了不同的事件,但是维护的是同一份信息表就相对好些)。另一方面,如果指标体系十分关注app在不同位置、来源上提供的内容消费差异,则要求我们在进行行为分类设计埋点的时候加入其来源相关的信息,并对来源按来源app(跨app的导流)、来源页面(app内部)、来源控件(app内部的某一位置),比如下面的播放来源所展示的设计:
0x05 总结
本章对埋点设计中常用的四种设计思维进行了阐述,并给出了部分具体的设计方式参考,这几种思维方式并不是独立的,而是相互影响的,需要根据具体的场景特点进行灵活的运用,从而提高埋点设计的质量。
《七天数据埋点之旅》系列文章:
《七天数据埋点之旅》第一天:初识埋点
《七天数据埋点之旅》第二天:埋点之前