字符串组上传格式与分析说明

重要

本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。

属性值上报时,可以同时上报多个,例如商品类型可以为母婴、食品和水果。针对这类需求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分钟对属性进行管理:在“数据采集-埋点管理-属性管理”模块中,管理属性类型为“字符串组”,否则将会无法解析落库。

yuque_diagram (1).jpg

yuque_diagram (2).jpg

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]"

  • [1,2]

会被强制转为字符串组"['1','2']",错误上报格式,虽可以兼容将数值部分改为字符串,但尽量不要进行此类型上报。

  • "[true,false]"

  • [true,false]

会被强制转为字符串组"['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 支持的分析模型

  1. 选择指标:事件分析、属性分析和人群创建时,支持在选择指标时选择字符串组单一值,其他模型仅支持原始值。

image.png

  1. 选择分组:事件分析、属性分析和人群创建时,支持在选择分组时选择字符串组单一值,其他模型仅支持原始值。

  2. 添加筛选:事件分析、漏斗分析、分布分析、留存分析、间隔分析、路径分析、归因分析、属性分析、人群创建中支持选择字符串组单一值进行筛选。字符串组单一值筛选的规则仅支持:等于、不等于。

  3. 事例:一商铺今日多名顾客下单,下单内容如下:

    1. A顾客下单瓜子:

      商品名称:瓜子

      商品类型:坚果、零食、加工食品

      商品价格:12.00

    2. B顾客下单山楂:

      商品名称:山楂

      商品类型:甜品、零食、加工食品

      商品价格:5.00

    3. C顾客下单开瓶器:

      商品名称:开瓶器

      商品类型:工具、不锈钢

      商品价格:18.00

则按照「商品类型」单一值对购买人数分组时,分组结果如下:

坚果:1人

零食:2人

加工食品:2人

甜品:1人

工具:1人

不锈钢:1人

按照「商品类型」原始值对购买人数分组时,分组结果如下:

[坚果、零食、加工食品]:1人

[甜品、零食、加工食品]:1人

[工具、不锈钢]:1人

4.2 分组中有值、无值说明

  1. 原始值无值:

    1. 转化不成数组

    2. 转化数组后数组值仅有空字符串、空对象

    3. key没有上报

  2. 单一值无值:

    1. 转化为数组后,单一值仅存在空字符串或空对象

以分析属性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":"['']"