属性赋值规则

1. 属性设置方式

目前分析云属性的设置主要有两种形式:

  1. 通过SDK的setUserPropertysetSessionPropertytrackCustomEvent接口进行设置或事件上报(不同的SDK方法名会有所不同);
  2. 通过可视化圈选配置;
  3. 通过URL参数进行提取,详见预置事件和属性

这几种方式设置的属性在功能上没有区别,但是在遇到相同属性名时,会根据其优先级和作用域进行同名属性覆盖。

2. 属性作用域

在分析云中,属性隐含了作用域的概念。

分析云属性作用域(scope,后面简称“域”)主要分为如下几类:

作用域 作用范围
用户 (user) 一个会话
会话 (session) 一个会话
事件 (event) 当前事件
  • 对于自定义事件上报时带的属性,均属于event域;
  • 对于通过setUserProperty设置的用户属性,属于user域;
  • 对于通过setSessionProperty设置的属性,属于session域;
  • 对于“会话_”事件设置的自定义属性(从URL参数中提取),属于session域。

(注:目前user域与session域在处理逻辑上完全一致)

3. 属性覆盖

当多个事件拥有同名属性时,会发生覆盖,具体的属性覆盖规则如下:

  1. session/user域的属性,会以同一个会话内最后一个(按时间序)拥有该同名属性的事件的属性值进行覆盖:

    事件 设置方式 属性信息 属性覆盖后信息
    event1 SDK设置 {"user_name":"张三", "scope": "user"} user_name=李四 被后发生的event2覆盖
    event2 SDK设置 {"user_name":"李四", "scope": "user"} user_name=李四
    event3 SDK上报事件 {} user_name=李四 该事件并没有user_name属性,所以还是event2发生时设置的属性

    这里所说的SDK设置,是指在事件发生前,调用SDK的setUserProperty/setSessionProperty方法设置的user域/session域的属性,SDK上报事件,是指调用SDK的trackCustomEvent方法上报的自定义事件(不同的SDK对应的方法名可能有所不同)。

  2. SDK设置的属性值会优先于URL提取到的同名属性覆盖原则,同时遵循session/user域无法覆盖event域的规则(规则5):

    事件名 设置方式 属性信息 属性覆盖后信息
    event1 SDK设置 {"user_name": "老王", "scope": "user"} user_name=老李 被后发生的event2覆盖
    event2 SDK设置 {"user_name": "老李", "scope": "user"} user_name=老李
    event3 SDK上报事件 {"user_name": "小张", "scope": "event"} user_name=小张 user域无法覆盖event域的属性
    event4 URL提取 {"user_name": "小刘", "scope": "session"} user_name=老李 URL提取的优先级比SDK设置的低
    event5 SDK上报事件 {} user_name=老李
  3. 属性“用户ID_”(uid_)为特殊属性,该属性通过调用SDK的setUserId方法设置,会采用同一个访次内最后一个拥有uid_属性的事件的属性值,但不会进行覆盖:

    事件名 设置方式 属性信息 属性覆盖后信息
    event1 SDK设置 {"uid_": "12345"} uid_=12345
    event2 SDK设置 {"uid_": "45678"} uid_=45678
    event3 SDK上报事件 {} uid_=45678
  4. event域的属性,由于作用范围为当前事件,不会进行同名属性覆盖:

    事件名 设置方式 属性信息 属性覆盖后信息
    event1 SDK上报事件 {} product_name=null
    event2 SDK上报事件 {"product_name":"苹果"} product_name=苹果
    event3 SDK上报事件 {"product_name":"香蕉"} product_name=香蕉
  5. session/user域的属性,无法覆盖event域的同名属性:

    事件名 设置方式 属性信息 属性覆盖后信息
    event1 SDK上报事件 {"vip_level": 1} vip_level=1
    event2 SDK设置 {"vip_level": 0, "scope": "user"} vip_level=0
    event3 SDK上报事件 {"vip_level": 2} vip_level=2
用户属性 维度表