属性赋值规则
更新时间
:
2023-11-27
1. 属性设置方式
目前分析云属性的设置主要有两种形式:
- 通过SDK的
setUserProperty
、setSessionProperty
、trackCustomEvent
接口进行设置或事件上报(不同的SDK方法名会有所不同); - 通过可视化圈选配置;
- 通过URL参数进行提取,详见预置事件和属性。
这几种方式设置的属性在功能上没有区别,但是在遇到相同属性名时,会根据其优先级和作用域进行同名属性覆盖。
2. 属性作用域
在分析云中,属性隐含了作用域的概念。
分析云属性作用域(scope,后面简称“域”)主要分为如下几类:
作用域 | 作用范围 |
---|---|
用户 (user) | 一个会话 |
会话 (session) | 一个会话 |
事件 (event) | 当前事件 |
- 对于自定义事件上报时带的属性,均属于event域;
- 对于通过setUserProperty设置的用户属性,属于user域;
- 对于通过setSessionProperty设置的属性,属于session域;
- 对于“会话_”事件设置的自定义属性(从URL参数中提取),属于session域。
(注:目前user域与session域在处理逻辑上完全一致)
3. 属性覆盖
当多个事件拥有同名属性时,会发生覆盖,具体的属性覆盖规则如下:
-
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对应的方法名可能有所不同)。 -
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=老李 -
属性“用户ID_”(
uid_
)为特殊属性,该属性通过调用SDK的setUserId
方法设置,会采用同一个访次内最后一个拥有uid_
属性的事件的属性值,但不会进行覆盖:事件名 设置方式 属性信息 属性覆盖后信息 event1 SDK设置 {"uid_": "12345"} uid_=12345 event2 SDK设置 {"uid_": "45678"} uid_=45678 event3 SDK上报事件 {} uid_=45678 -
event域的属性,由于作用范围为当前事件,不会进行同名属性覆盖:
事件名 设置方式 属性信息 属性覆盖后信息 event1 SDK上报事件 {} product_name=null event2 SDK上报事件 {"product_name":"苹果"} product_name=苹果 event3 SDK上报事件 {"product_name":"香蕉"} product_name=香蕉 -
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