本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。
属性值上报时,可以同时上报多个,例如商品类型可以为母婴、食品和水果。针对这类需求QuickTracking提供了字符串组类型属性,本文档主要介绍了此类型属性的上报和分析方法。
字符串组仅支持事件属性、全局属性和用户属性
1 使用场景
在用户购买商品时,需要对客户的浏览、添加购物车和结算行为进行埋点,常见的埋点方案如下:
页面名称 | 页面编码 | 事件名称 | 事件编码 | 属性名称 | 属性key | 属性类型 |
商品页浏览 | goods_page | 商品页浏览 | goods_page | 商品名称 | goods_name | 字符串 |
商品类型 | goods_type | 字符串组 | ||||
商品价格 | goods_price | 数值 | ||||
购物车点击 | trolley_clk | 商品名称 | goods_name | 字符串 | ||
商品类型 | goods_type | 字符串组 | ||||
商品价格 | goods_price | 数值 | ||||
结算点击 | pay_clk | 商品名称 | goods_name | 字符串 | ||
商品类型 | goods_type | 字符串组 | ||||
商品价格 | goods_price | 数值 |
其中「商品类型」为字符串组,因为在一件商品的类型会有多种,例如瓜子:
商品名称:瓜子
商品类型:坚果、零食、加工食品
商品价格:12.00
那么,在埋点上报时就需要在属性key“goods_type”中同时写入“坚果”、“零食”、“加工食品”,此类型的属性即为字符串组。具体上报的方式和分析方式可见下文。
2 属性管理
在上报前,务必提前15分钟对属性进行管理:在“数据采集-埋点管理-属性管理”模块中,管理属性类型为“字符串组”,否则将会无法解析落库。
3 上报方式
在上报前,务必提前15分钟对属性进行管理:在“数据采集-埋点管理-属性管理”模块中,管理属性类型为“字符串组”,否则将会无法解析落库。
在SDK上报中,您需要将多个属性值按照以下格式拼接为一个字符串进行上报。如果不符合以下格式,将会解析失败,无法分析出结果。
"String_arrayString": "['坚果','零食']"
"String_arrayInt": "[1,2]"
"String_arrayBoolean": "[true,false]"
"String_arrayString": ["坚果","零食"]
"String_arrayInt": [1,2]
"String_arrayBoolean": [true,false]
上报格式 | 格式处理 |
| 标准上报格式 |
| 会被强制转为字符串组"['1','2']",错误上报格式,虽可以兼容将数值部分改为字符串,但尽量不要进行此类型上报。 |
| 会被强制转为字符串组"['true','false']",错误上报格式,虽可以兼容布尔部分改为字符串,但尽量不要进行此类型上报。(注意,不支持全大写或者首字母大写!!!) |
使用 Android自定义事件埋点为例:
Map<String, Object> goods = new HashMap<String, Object>();
goods.put("goods_name", "瓜子");//商品名称-瓜子
goods.put("goods_type", "['坚果','零食','加工食品']"); //商品类型-坚果、零食、加工食品
goods.put("goods_price",12); //价格:12元
QtTrackAgent.onEventObject(this, "pay_clk", goods, "goods_page");
或使用如下方式:
Map<String, Object> goods = new HashMap<>();
goods.put("goods_name", "瓜子");//商品名称-瓜子
String[] type_property = {"坚果", "零食", "加工食品"};
goods.put("goods_type", type_property);//商品类型-坚果、零食、加工食品
goods.put("goods_price", 12);//价格:12元
MobclickAgent.onEventObject(mContext, "pay_clk", goods);
使用 iOS自定义事件埋点为例:
NSDictionary *dict = @{@"goods_name" : @"瓜子", @"goods_type" : @"['坚果','零食','加工食品']",@"goods_price" : @12};
[QTMobClick event:@"pay_clk" pageName:@"goods_page" attributes:dict];
或使用如下方式:
[QTMobClick event:@"pay_clk" attributes:@{
@"goods_name" : @"瓜子",
@"goods_price" : @12,
@"goods_type": @[@"坚果", @"零食", @"加工食品"]
}];
使用小程序自定义事件埋点为例:
aplus.record('pay_clk', 'CLK', {
goods_name: '瓜子',
goods_type: ['坚果','零食','加工食品'],
goods_price: 12,
page_name: "goods_page",
});
使用 Web/H5 自定义事件埋点为例:
aplus.record('pay_clk', 'CLK', {
goods_name: '瓜子',
goods_type: ['坚果','零食','加工食品'],
goods_price: 12,
page_name: "goods_page",
});
4 分析方式
字符串组分析方式共分为两种:
单一值:其含义为将上报字符串组内的每一个单一值进行拆解后再分析,例如上文中所描述的['坚果','零食','加工食品'],单一值即表示“坚果”、“零食”、“加工食品”,可针对其中某一个值进行分析。
原始值:其含义为上报字符串组变为一个整体的字符串进行分析,例如上文中所描述的['坚果','零食','加工食品'],原始值即为"['坚果','零食','加工食品']"。
4.1 支持的分析模型
选择指标:事件分析、属性分析和人群创建时,支持在选择指标时选择字符串组单一值,其他模型仅支持原始值。
选择分组:事件分析、属性分析和人群创建时,支持在选择分组时选择字符串组单一值,其他模型仅支持原始值。
添加筛选:事件分析、漏斗分析、分布分析、留存分析、间隔分析、路径分析、归因分析、属性分析、人群创建中支持选择字符串组单一值进行筛选。字符串组单一值筛选的规则仅支持:等于、不等于。
事例:一商铺今日多名顾客下单,下单内容如下:
A顾客下单瓜子:
商品名称:瓜子
商品类型:坚果、零食、加工食品
商品价格:12.00
B顾客下单山楂:
商品名称:山楂
商品类型:甜品、零食、加工食品
商品价格:5.00
C顾客下单开瓶器:
商品名称:开瓶器
商品类型:工具、不锈钢
商品价格:18.00
则按照「商品类型」单一值对购买人数分组时,分组结果如下:
坚果:1人
零食:2人
加工食品:2人
甜品:1人
工具:1人
不锈钢:1人
按照「商品类型」原始值对购买人数分组时,分组结果如下:
[坚果、零食、加工食品]:1人
[甜品、零食、加工食品]:1人
[工具、不锈钢]:1人
4.2 分组中有值、无值说明
原始值无值:
转化不成数组
转化数组后数组值仅有空字符串、空对象
key没有上报
单一值无值:
转化为数组后,单一值仅存在空字符串或空对象
以分析属性b为例,具体结果如下:
编号 | 样例(ClickHouse数据库存储) | b的原始值 | 原始值是否有值 | 单一值是否有值 | 原始值分组展示 | 单一值分展示 |
1 | {"a": "hello", "c": 123} | NULL | 否 | 否 | 空对象(预置) | 空对象(预置) |
2 | {"a": "hello", "b": 123} | 123 | 否 | 否 | 空对象(预置) | 空对象(预置) |
3 | {"a": "hello", "b": "s"} | "s" | 否 | 否 | 空对象(预置) | 空对象(预置) |
4 | {"a": "hello", "b": ""} | "" | 否 | 否 | 空对象(预置) | 空对象(预置) |
6 | {"b": ["坚果", "零食", "加工食品"]} | ['坚果','零食','加工食品'] | 是 | 是*3 | ['坚果','零食','加工食品'] | 坚果 零食 加工食品 |
7 | { "b": [null,""]} | [null,''] | 否 | 否 | 空对象(预置) | 空对象(预置) |
8 | {"b": "[]"} | [] | 否 | 否 | 空对象(预置) | 空对象(预置) |
9 | {"b": [""]} | [''] | 否 | 否 | 空字符串(预置) | 空字符串(预置) |
9 | {"b": ["", "零食", "加工食品"]} | ['','零食','加工食品'] | 是 | 是*2,否*1 | ['','零食','加工食品'] | 空字符串(预置) 零食 加工食品 |
10 | {"b": [null, "零食", "加工食品"]} | [null, "零食", "加工食品"] | 是 | 是*2,否*1 | [null, "零食", "加工食品"] | 空对象(预置) 零食 加工食品 |
5 用户属性上报为空是否覆盖
若您上报用户A的用户属性「用户偏好——user_preferences」为:
"user_preferences":"['精灵少女','超级买手']"
后又上报
"user_preferences":"[]"
"user_preferences":"[null]"
QuickTracking会认为是无效上报,将不会对用户属性进行覆盖更新,您上传如下格式,才会将用户属性置为空:
"user_preferences":"['']"