1. 适用场景

对象数组属性主要适用于以下场景:

  • 如下单购买商品的场景,订单内包含的多个商品详情;
  • 活动奖励礼包,在结束活动收获奖励时,奖励礼包中包含不同的礼品信息及数量;
  • 收藏歌单,歌单中具体的歌曲信息,如歌曲名、歌唱者等;
  • 用户持有多张银行卡的信息,如卡所在支行编号、支行名称、支行地域等。

以上场景的特征为:

  • 1 对 N 的关系结构
    • 某个行为事件下,会触发多个行为对象,行为与行为对象为 1 对 N 关系,如:下单与下单商品,活动发放奖励和礼品信息,收藏歌单与歌单信息;

    • 多实体间的 1 对 N 关系,如用户和持有卡之间,一个用户可以持有多张卡、多个账号、多个产品。
  • 对象中包含多项明细信息
    • 比如下单商品包含商品详情;
    • 用户持用卡中包含卡的明细信息。

2. 2. 事件虚拟属性支持对象数组类型

为支持以上场景的数据上报,事件虚拟属性支持了对象数组类型,可以将传值为 JSON 数组的事件属性解析成多个子属性,从而在后续分析过程中使用。 文档 如何创建 & 解析对象数组 中「 2.3 从普通属性解析获取对应值 」详细介绍了如何创建 & 解析对象数组子属性。

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

4. 能力说明

目前仅支持在 事件分析 中对 对象数组 类型的属性进行分析。

在业务场景中,很多需要嵌套结构上报的数据,比如订单详情、礼包内容等,通过支持对象数组格式的上报,可以通过一条事件解决,而不是拆分到多个事件和属性中,进行多次上报。

通过对象数组的方式进行数据上报后,可以在分析指标、筛选条件、分组直接对对象数组整体或对象数组内的子属性进行分析。

5. 使用场景

事件分析 模型中,有三种场景支持 对象数组

  • 事件选择定义指标
  • 全局筛选
  • 分组选择

5.1. 事件选择定义指标

  1. 选择 分析 > 事件分析
  2. 选择 事件。选择对象数组类型的属性,并支持去重数统计。

选择对象数组内的子属性时:

  • 当子属性为 <字符串 Stirng>、<日期时间 Datetime>、<集合 List>、<布尔 Bool>,支持去重数的统计。
  • 当子属性为 <数值 Number>,则支持总和、均值、最大值、最小值、人均值、去重数、下四分位数、中位数、上四分位数、P90
    • 总和:子属性值的加和
    • 均值:子属性的加和 / 对象数组个数
    • 最大值、最小值:子属性的最大值,最小值 
    • 人均值:子属性加和/用户数
    • 去重数:子属性去重数的统计
    • 分位数:子属性的分位数

5.2. 全局筛选

5.2.1. 对象数组筛选

  1. 选择 分析 > 事件分析
  2. 选择 事件
  3. 设置 全局筛选,选择 对象数组 类型的属性。

选择对象数组进行筛选时,支持的筛选条件有:存在对象满足、全部对象满足、没有对象满足、包含对象个数、有值、没值:

  • 存在对象满足:属性值内有任意一个对象满足设定的筛选条件。
  • 全部对象满足:属性值内所有对象均满足设定的条件。
  • 没有对象满足:属性值内所有对象均不满足设定的条件。
  • 包含对象个数:属性值内存在的对象个数。
  • 有值:属性值不为 NULL。
  • 没值:属性值为 NULL。

5.2.2. 业务场景分析说明

以下面数据为例,介绍几个典型的业务场景。

对象数组样例

"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
  • 场景 1:订单详情 存在对象满足 商品名称 iPhone 13,因为对象数组中包含 product_name="iPhone 13",则满足筛选条件。

  • 场景 2:订单详情 全部对象满足 订单金额 > 3000,因对象数组中订单金额(order_price)并不是所有都高于 3000,还包含 2000、444、333 低于 3000 金额,则不满足筛选条件。

  • 场景 3:订单详情 没有对象满足 商品类型为食品,因为对象数组中没有食品类型(product_type),则满足筛选条件。

  • 场景 4:订单详情 包含对象个数 等于 6,因以下对象数组共有 6 个商品下单信息,则满足筛选条件。

5.3. 分组选择

  1. 选择 分析 > 事件分析
  2. 选择 事件
  3. 设置 全局筛选
  4. 选择 分组,选择 对象数组 类型的属性。
    • 选择对象数组进行分组,则展示整个对象数组进行查看指标,如果对象数组完全相同,则进行指标聚合。
    • 如选择对象数组子属性进行分组,则可对每个子属性的值进行统计。

6. 其他说明

  • 不支持的复合查询场景
    • 无子属性分组 + 子属性去重数 / 分位数 + 预定义指标查询(暂不支持)
    • 无子属性分组 + 子属性去重数 / 分位数 + 对比时间查询(暂不支持)
    • 无子属性分组 + 子属性去重数 / 分位数 + 分层查看(暂不支持)
    • 无子属性分组 + 子属性去重数 / 分位数 + 动态分群(暂不支持)
  • 分析模型中 <集合 List> 类型的子属性只支持 <字符串 String>。
  • 分析模型中 <日期时间 DateTime> 类型的子属性只支持毫秒级时间戳,例如:1676978198000。
  • 子属性时间类型暂不支持时段区间、相对事件发生时间、相对事件发生时间区间。