使用首次触发事件标记

最后更新于:2019-01-10 15:51:16

1. 概述

一些分析场景中,我们希望可以通过一个事件属性判断该事件是否是某个用户首次触发,例如 App 启动中的这个属性可以判断用户是否首次启动 App,加入购物车事件中的这个属性可以判断用户是否首次将商品加入购物车。

2. 导入时添加字段

在导入事件时,若认为这次事件 可能 是该用户(distinct_id)首次触发,设置 $is_first_time 的值为 true 即可。

其原理是神策后端导入模块在数据导入过程中会在遇到 $is_first_time 的值为 true 时判断和 修正 该值,具体来说,若遇到 $is_first_time 的值为 true 的事件数据,神策后端会在数据库查询该用户在该事件是否有首次访问记录,若已记录的触发时间与本次不同,那么将修改 $is_first_time 的值为 false,否则将记录该用户首次触发事件时间并保持 $is_first_time 值为 true

3. 一个例子

以 Java SDK 为例:

// 标记首次,最终导入值为 true
properties.put("$is_first_time", true); 
sa.track("user1", false, "BuyGold", properties);

// do something else ...

// 标记首次,但最终导入值为 false
properties.put("$is_first_time", true); 
sa.track("user1", false, "BuyGold", properties);

虽然两次都设置了 $is_first_timetrue,但实际导入后仅第一次导入的值为 true

4. 注意事项

  • 仅当 $is_first_time 值为 true 时会触发上述逻辑;
  • 若之前导入数据没有设置过 $is_first_time 值为 true,那么第一次出现时才会记录首次触发时间,并且以后以这次时间判断;后续我们会提供批量导入用户首次触发记录的工具;
  • 该逻辑里判断是否首次触发是以事件触发时间(精确到毫秒)是否与数据库里的值相等作为条件,若两次触发事件时间相同且都设置了 $is_first_time 值为 true 将不会进行修正;一般情况下不会发生这种情况,例如 App 连续发送两次事件,若第二次已经明确知道不是首次时,不应该设置 $is_first_time 值为 true
  • 该逻辑受数据导入顺序影响,例如先导入 6 日数据并标记了首次,再导入 3 日的数据并标记了首次,最终 6 日的数据首次被标记为 true,而 3 日的将被标记为 false
  • 本功能在 1.8 及以后的版本中支持,且构建时间(可在后端的关于页面查看)在 2017-11-26 之后,否则需要先进行升级。