适用场景
对象数组属性主要适用于以下场景:
- 如下单购买商品的场景,订单内包含的多个商品详情
- 活动奖励礼包,在结束活动收获奖励时,奖励礼包中包含不同的礼品信息及数量
- 收藏歌单,歌单中具体的歌曲信息,如歌曲名,歌唱者等
- 用户持有多张银行卡的信息,如卡所在支行编号,支行名称,支行地域等
以上场景的特征为:
- 1:N 的关系结构
- 某个行为事件下,会触发多个行为对象,行为与行为对象为 1 对 N 关系,如:下单与下单商品,活动发放奖励和礼品信息,收藏歌单与歌单信息
- 多实体间的 1 对 N 关系,如用户和持有卡之间,一个用户可以持有多张卡,多个账号,持有多个产品。
- 对象中包含多项明细信息
- 比如下单商品包含商品详情
- 用户持用卡中包含卡的明细信息
事件虚拟属性支持对象数组类型
为支持以上场景的数据上报,事件虚拟属性支持了对象数组类型,可以将传值为 JSON 数组的事件属性解析成多个子属性,从而在后续分析过程中使用。 文档 如何创建 & 解析对象数组 中 从普通属性解析获取对应值 详细介绍了如何创建 & 解析对象数组子属性。
数据格式
下单购买商品的场景,如一次下单订单详情中包含购买的多个商品的信息。
- 订单详情(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}
]"
能力说明
- 在业务场景中,很多需要嵌套结构上报的数据,比如订单详情,礼包内容等,通过支持对象数组格式的上报,可以通过一条事件解决,而不是拆分到多个事件和属性中,进行多次上报。
- 通过对象数组的方式进行数据上报后,可以在分析指标、筛选条件、分组直接对对象数组整体或对象数组内的子属性进行分析。
分析能力说明
分析指标

- 选择对象数组属性,支持对象数组的去重数统计。
- 选择对象数组内的子属性
- 当子属性为字符类型 / 时间类型 / 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}
]"
- 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}
]"
如果针对对象数组内子属性商品类型(product_type)进行分组,则统计结果为
其他说明
-
- 无子属性分组 + 子属性去重数/分位数 + 预定义指标查询(暂不支持)
- 无子属性分组 + 子属性去重数/分位数 + 对比时间查询(暂不支持)
- 无子属性分组 + 子属性去重数/分位数 + 分层查看(暂不支持)
- 无子属性分组 + 子属性去重数/分位数 + 动态分群(暂不支持)
- 分析模型中 List 类型的子属性只支持 List<String>,例如 ["Adobe", "xyz", "0.5"];分析模型中 DateTime 类型的子属性只支持毫秒级时间戳,例如:1676978198000
- 子属性时间类型暂不支持时段区间、相对事件发生时间、相对事件发生时间区间。

支持的分析模型
仅支持在事件分析中选择对象数组类型的属性进行分析