适用场景
对象数组属性主要适用于以下场景:
- 如下单购买商品的场景,订单内包含的多个商品详情
- 活动奖励礼包,在结束活动收获奖励时,奖励礼包中包含不同的礼品信息及数量
- 收藏歌单,歌单中具体的歌曲信息,如歌曲名,歌唱者等
- 用户持有多张银行卡的信息,如卡所在支行编号,支行名称,支行地域等
以上场景的特征为:
- 1:N的关系结构
某个行为事件下,会触发多个行为对象,行为与行为对象为1对N关系,如:下单与下单商品,活动发放奖励和礼品信息,收藏歌单与歌单信息
- 多实体间的1对N关系,如用户和持有卡之间,一个用户可以持有多张卡,多个账号,持有多个产品。
- 对象中包含多项明细信息
- 比如下单商品包含商品详情
- 用户持用卡中包含卡的明细信息
事件虚拟属性支持对象数组类型
为支持以上场景的数据上报,事件虚拟属性支持了对象数组类型,可以将传值为 JSON 数组的事件属性解析成多个子属性,从而在后续分析过程中使用。 文档 如何创建 & 解析对象数组 中「 2.3 从普通属性解析获取对应值 」详细介绍了如何创建 & 解析对象数组子属性。
数据格式
下单购买商品的场景,如一次下单订单详情中包含购买的多个商品的信息。
- 订单详情(order_detail),就是一个对象数组属性,包含商品名称,商品金额,商品类型,订单金额四个子属性。
- 对象数组内部的数据结构是一个二维表,包含多个子属性,其中子属性有对应的属性名称及数据类型。
- 订单详情(order_detail)对象数组属性,同时上报了订单中包含的已购买六个产品的信息。
对象数组样例
"distinct_id": "12345",
"event_name": "pay_order"
"time": 1437280200354,
"order_detail":
"[
{"product_name":"iPhone 13", "product_price": 5000, "product_type": "手机", "order_price": 15000},
{"product_name":"switch", "product_price": 2000, "product_type": "游戏", "order_price": 2000},
{"product_name":"macbookpro", "product_price": 9000, "product_type": "电脑", "order_price": 9000},
{"product_name":"iphone 14", "product_price": 6000, "product_type": "手机", "order_price": 6000},
{"product_name":"iPhone 13 Pro", "product_price": 444, "product_type": "手机","order_price": 444 },
{"product_name":"iPhone 13 Pro Max", "product_price": 333, "product_type": "手机", "order_price": 333}
]"
CODE
能力说明
- 在业务场景中,很多需要嵌套结构上报的数据,比如订单详情,礼包内容等,通过支持对象数组格式的上报,可以通过一条事件解决,而不是拆分到多个事件和属性中,进行多次上报。
- 通过对象数组的方式进行数据上报后,可以在分析指标、筛选条件、分组直接对对象数组整体或对象数组内的子属性进行分析。
分析能力说明
分析指标
- 选择对象数组属性,支持对象数组的去重数统计。
- 选择对象数组内的子属性
- 当子属性为字符类型/时间类型/list/bool,则支持去重数的统计。
- 当子属性为数值类型,则支持总和、均值、最大值、最小值、人均值、去重数、下四分位数、中位数、上四分位数、P90
- 总和:子属性值的加和
- 均值:子属性的加和 / 对象数组个数
- 最大值、最小值:子属性的最大值,最小值
- 人均值:子属性加和/用户数
- 去重数:子属性去重数的统计
- 分位数:子属性的分位数
筛选
对象数组筛选
选择对象数组进行筛选时,支持的筛选条件为:存在对象满足、全部对象满足、没有对象满足、包含对象个数、有值、没值。
- 筛选条件的语义:
- 存在对象满足:属性值内有任意一个对象满足设定的筛选条件
- 全部对象满足:属性值内所有对象均满足设定的条件
- 没有对象满足:属性值内所有对象均不满足设定的条件
- 包含对象个数:属性值内存在的对象个数
- 有值:属性值不为 NULL
- 没值:属性值为NULL
业务场景分析说明
通过此对象数组,来解释对象数组的筛选
对象数组样例
"distinct_id": "12345",
"event_name": "pay_order"
"time": 1437280200354,
"order_detail":
"[
{"product_name":"iPhone 13", "product_price": 5000, "product_type": "手机", "order_price": 15000},
{"product_name":"switch", "product_price": 2000, "product_type": "游戏", "order_price": 2000},
{"product_name":"macbookpro", "product_price": 9000, "product_type": "电脑", "order_price": 9000},
{"product_name":"iphone 14", "product_price": 6000, "product_type": "手机", "order_price": 6000},
{"product_name":"iPhone 13 Pro", "product_price": 444, "product_type": "手机","order_price": 444 },
{"product_name":"iPhone 13 Pro Max", "product_price": 333, "product_type": "手机", "order_price": 333}
]"
CODE
- case1:订单详情「存在对象满足」商品名称=“iPhone 13”,因为对象数组中包含product_name="iPhone 13 ",则满足筛选条件;
- case2:订单详情「全部对象满足」订单金额>3000,因对象数组中订单金额(order_price)并不是所有都高于3000,包含2000,444,333低于3000金额,则不满足筛选条件
- case3:订单详情「没有对象满足」商品类型=“食品”,因为对象数组中没有食品类型(product_type),则满足筛选条件
- case4:订单详情「包含对象个数」等于 6,因以下对象数组共有6个商品下单信息,则满足筛选条件
子属性筛选
- 子属性类型(STRING、MUMBER、BOOL、DATETIME、LIST),进行对应数据类型下筛选条件配置。
如不对同一对象数组子属性进行分组,则子属性筛选的筛选查询结果与对象数组内「存在对象满足」子属性筛选条件结果是一致的,只要对象数组内有任意一个对象满足设定的筛选条件,则满足该筛选条件;
如对同一对象数组子属性进行分组,如商品名称等于iPhone13且按照商品名称进行分组,则查询结果只包含对象数组内商品名称为iPhone13的子属性值。
分组
- 选择对象数组进行分组,则展示整个对象数组进行查看指标,如果对象数组完全相同,则进行指标聚合。
- 如选择对象数组子属性进行分组,则可对每个子属性的值进行统计。
对象数组样例
"distinct_id": "12345",
"event_name": "pay_order"
"time": 1437280200354,
"order_detail":
"[
{"product_name":"iPhone 13", "product_price": 5000, "product_type": "手机", "order_price": 15000},
{"product_name":"switch", "product_price": 2000, "product_type": "游戏", "order_price": 2000},
{"product_name":"macbookpro", "product_price": 9000, "product_type": "电脑", "order_price": 9000},
{"product_name":"iphone 14", "product_price": 6000, "product_type": "手机", "order_price": 6000},
{"product_name":"iPhone 13 Pro", "product_price": 444, "product_type": "手机","order_price": 444 },
{"product_name":"iPhone 13 Pro Max", "product_price": 333, "product_type": "手机", "order_price": 333}
]"
CODE
如果针对对象数组内子属性商品类型(product_type)进行分组,则统计结果为
商品类型 | 下单量 |
---|---|
手机 | 4 |
游戏 | 1 |
电脑 | 1 |
其他说明
- 不支持的复合查询场景
A、无子属性分组 + 子属性去重数/分位数 + 预定义指标查询(暂不支持)
B、无子属性分组 + 子属性去重数/分位数 + 对比时间查询(暂不支持)
C、无子属性分组 + 子属性去重数/分位数 + 分层查看(暂不支持)
D、无子属性分组 + 子属性去重数/分位数 + 动态分群(暂不支持)
- 分析模型中 List 类型的子属性只支持 List
,例如 ["Adobe","xyz","0.5"]; 分析模型中 DateTime 类型的子属性只支持毫秒级时间戳,例如:1676978198000 - 子属性时间类型暂不支持时段区间、相对事件发生时间、相对事件发生时间区间。
支持的分析模型
仅支持在事件分析中选择对象数组类型的属性进行分析