You need to enable JavaScript to run this app.
导航
虚拟属性
最近更新时间:2024.04.22 11:46:03首次发布时间:2023.09.20 11:25:32

1.概述

虚拟属性可以满足属性值二次加工的需求,方式是编写 sql 表达式中的四则运算和部分字符串操作函数。可以作用于用户属性和部分或全部事件属性。

2.创建/编辑虚拟属性

一个应用最多允许创建100个虚拟属性,当创建的虚拟属性数量达到100个时,“创建虚拟属性”按钮将不可点击。

2.1 如何创建一个新的虚拟属性?

从「指标管理」>「元数据管理」>「虚拟属性」进入「虚拟属性」界面,点击“创建虚拟属性”,开始创建虚拟属性:

  • 选择你需要创建的虚拟属性类型:事件属性/用户属性;
  • 填写基本信息;
  • 填写对属性的加工的 sql 表达式片段;
  • 选择关联方式:选择创建的虚拟属性类型为事件属性时可进行选择;
  • 调试:点击“调试”在新窗口中打开SQL自定义查询,自动填入当前的表达式并发起查询,默认时间范围为昨天。

图片
图片
所有信息的含义详细说明如下:

信息

说明

属性分类

事件虚拟属性:通过现有属性计算得到的新的事件属性。原属性可以来自于事件属性、用户属性、Item 属性。用户虚拟属性:基于用户表的属性计算得到的新的用户属性。

属性名称

必填,仅可命名为英文和字符。规则为[a-zA-Z_][0-9a-zA-Z_]*,长度100 字符以内。大小写敏感(与现状保持一致)。我们会增加默认前缀为 $vp

数据类型

必填,取值范围是:string, int, float , list。

SQL 表达式

必填,只需要填写对属性的加工的 sql 表达式片段即可,当中暂不限制表达式中涉及到的属性个数。只有第一段 SQL 会被执行。点击“在SQL自定义查询中验证表达式”后新窗口打开SQL自定义查询并自动发起查询。

可用此属性的事件要求

此设置只在选择了属性分类是「事件虚拟属性」后需要设置。(如果是「用户虚拟属性」那么在分析时将所有的事件均可使用此属性进行分析。)涵盖 SQL 表达式涉及的所有属性的事件,方可使用此虚拟属性。涵盖至少一个 SQL 表达式中涉及的属性的事件,方可使用此虚拟属性。

对关联事件的策略异同的说明:
图片

2.2 如何编辑/删除已有的虚拟属性?

编辑虚拟属性

进入「虚拟属性」界面后可见已经创建的所有虚拟属性,选择你想要编辑的虚拟属性在操作列下方点击“编辑”即可进行编辑。

删除虚拟属性

如果你需要删除一个虚拟属性,选择你想要编辑的虚拟属性在操作列下方点击“删除”即可删除此虚拟属性。
图片

“展示名、属性描述、字典、数据类型”的编写和修改说明

虚拟属性提供了“展示名、属性描述、字典、数据类型”的编写和修改,有关说明如下:

  • 修改任何字段,都会重新发起验证 sql;
  • SQL表达式改动后已有字典会被删除;
  • 如果虚拟属性旁边出现如下图提示,说明此虚拟属性已经失效,失效情况如下:

1)使用到的用户或事件公共属性被禁用了;
2)使用到的属性类型被修改了;
3)被删除。
图片

  • 失效的虚拟属性,将不支持任何字段的编辑;
  • 如果编辑时展示名时出现(如下图)提示说明,请进入编辑页面进行排查或者查看是否拥有此权限;

图片

2.3虚拟属性的适用范围

功能

描述

自定义查询

不适用。

虚拟事件

适用。被用于查询时,只要所含一个事件包含的虚拟事件属性就可以被选择。

圈选事件

事件虚拟属性不适用,用户虚拟属性适用。

任意事件

不适用,包括:any_event 和 any_active_event。

分析主体

适用,创建和使用时作为普通属性。

属性关联

适用。

用户路径

适用。

虚拟属性

不适用。不允许基于虚拟属性创建虚拟属性,用户类型的虚拟属性的表达式中不允许包含事件属性。

3.常见使用场景示例

3.1 属性值计算

【举例 1】
假设埋点的时候埋了两个属性:事件属性(float类型的属性)「成本价格 cost_price」和「销售价格 sale_price」,当我们想计算利润时,可以直接创建一个新的虚拟事件属性「利润 $vp_profit」。此时,我们可以使用「加减乘除运算」
SQL 表达式:event_params.sale_price - event_params.cost_price
【举例 2】
假设埋点的时候埋了属性:事件属性「本金 principal」、「利率(月) interest_rate」和 「月数 duration」
需要对「理财产品的本息总和」进行计算。此时,我们可以使用如下规则
SQL 表达式:event_params.principal + event_params. principal * pow(event_params.interest_rate, event_params.duration)

3.2 属性值抽取

【举例 1】
假设埋点的时候有属性:事件属性「网址 full_url」,希望提取出域名信息。比如https://console.volcengine.com/datafinder/app/178497/dashboard/6807670720953319944,希望提取出console.volcengine.com
可以使用如下规则创建虚拟属性:
SQL 表达式:domain(event_params.full_url)
具体的URL相关函数,具体的URL相关函数,请请参考SQL自定义查询中的函数列表。
【举例 2】
假设埋点的时候有属性:事件属性「内容详情 body_json」,属性内容为json格式的字符串,比如:

{"product": "datafinder", "user_name": "管理员"}
json

希望提取出product信息: datafinder
可以使用如下规则创建虚拟属性:
SQL 表达式:JSONExtractString(event_params.body_json,'product')
具体的JSON相关函数,请请参考SQL自定义查询中的函数列表。

3.3 属性合并

【举例 1】
假设埋点时上报错了属性名,比如 首先上报了事件属性「产品名称 produc_name」,运行一个月后发现名字拼错了,然后新上报了一个事件属性 「产品名称 product_name」。那么分析时希望能同时分析全部的数据。
可以使用如下规则创建虚拟属性:
SQL 表达式:if(event_params.product_name IS NOT NULL, event_params.product_name, event_params.produc_name)
【举例 2】
假设埋点的时候有属性:事件属性「价格 price」,为float类型,有值为10.56、200.345
希望展示是增加显示为¥10.56,¥200.345 可以使用如下规则创建虚拟属性:
SQL 表达式:concat('¥',toString(event_params.price))

3.4 精度计算

假设埋点的时候有属性:事件属性「价格 price」,为float类型,有值为10.56、200.345
希望计算时四舍五入只考虑整数部分,比如11、200,可以使用如下规则创建虚拟属性:
SQL 表达式:round(event_params.price,0)

3.5 给客户打标签

假设埋点的时候有属性:用户属性「累计消费金额 total_cost」,为float类型
希望根据消费金额来对用户进行会员等级的区分,比如:

累计消费金额

VIP 等级

=1000

黑金

[500,1000)

钻石

[200,500)

白金

[100,200)

黄金

<100

青铜

可以使用如下规则创建虚拟属性:
SQL 表达式:
multiIf(
user_profiles.total_cost<100,'青铜',
user_profiles.total_cost>=100 and user_profiles.total_cost<200 ,'钻石',
user_profiles.total_cost>=200 and user_profiles.total_cost<500,'白金',
user_profiles.total_cost>=500 and user_profiles.total_cost<1000,'黄金',
'黑金'
)

3.6 类型转换

假设埋点的时候有属性:事件属性「视频时间 media_duration_info」,为float类型,表示毫秒,希望将其转换成int型,同时转化成分钟,方便计算。
可以使用如下规则创建虚拟属性:
SQL 表达式:cast(event_params.media_duration_info/1000/60 as Nullable(int))
注意:槽位化后Map列中所有事件属性均是nullable类型的,因此在通过cast对属性类型进行强制转化的时候,无论转化成什么类型(int、float等),都需要使用函数assumeNotNull对属性包装一下,保证转化后的属性类型是nullable类型的,否则会导致类型转化出问题,使用办法:Nullable(int)、Nullable(float)等。