虚拟属性可以满足属性值二次加工的需求,方式是编写 sql 表达式中的四则运算和部分字符串操作函数。可以作用于用户属性和部分或全部事件属性。
一个应用最多允许创建100个虚拟属性,当创建的虚拟属性数量达到100个时,“创建虚拟属性”按钮将不可点击。
从「指标管理」>「元数据管理」>「虚拟属性」进入「虚拟属性」界面,点击“创建虚拟属性”,开始创建虚拟属性:
所有信息的含义详细说明如下:
信息 | 说明 |
---|---|
属性分类 | 事件虚拟属性:通过现有属性计算得到的新的事件属性。原属性可以来自于事件属性、用户属性、Item 属性。用户虚拟属性:基于用户表的属性计算得到的新的用户属性。 |
属性名称 | 必填,仅可命名为英文和字符。规则为[a-zA-Z_][0-9a-zA-Z_]*,长度100 字符以内。大小写敏感(与现状保持一致)。我们会增加默认前缀为 $vp |
数据类型 | 必填,取值范围是:string, int, float , list。 |
SQL 表达式 | 必填,只需要填写对属性的加工的 sql 表达式片段即可,当中暂不限制表达式中涉及到的属性个数。只有第一段 SQL 会被执行。点击“在SQL自定义查询中验证表达式”后新窗口打开SQL自定义查询并自动发起查询。 |
可用此属性的事件要求 | 此设置只在选择了属性分类是「事件虚拟属性」后需要设置。(如果是「用户虚拟属性」那么在分析时将所有的事件均可使用此属性进行分析。)涵盖 SQL 表达式涉及的所有属性的事件,方可使用此虚拟属性。涵盖至少一个 SQL 表达式中涉及的属性的事件,方可使用此虚拟属性。 |
对关联事件的策略异同的说明:
进入「虚拟属性」界面后可见已经创建的所有虚拟属性,选择你想要编辑的虚拟属性在操作列下方点击“编辑”即可进行编辑。
如果你需要删除一个虚拟属性,选择你想要编辑的虚拟属性在操作列下方点击“删除”即可删除此虚拟属性。
虚拟属性提供了“展示名、属性描述、字典、数据类型”的编写和修改,有关说明如下:
1)使用到的用户或事件公共属性被禁用了;
2)使用到的属性类型被修改了;
3)被删除。
功能 | 描述 |
---|---|
自定义查询 | 不适用。 |
虚拟事件 | 适用。被用于查询时,只要所含一个事件包含的虚拟事件属性就可以被选择。 |
圈选事件 | 事件虚拟属性不适用,用户虚拟属性适用。 |
任意事件 | 不适用,包括:any_event 和 any_active_event。 |
分析主体 | 适用,创建和使用时作为普通属性。 |
属性关联 | 适用。 |
用户路径 | 适用。 |
虚拟属性 | 不适用。不允许基于虚拟属性创建虚拟属性,用户类型的虚拟属性的表达式中不允许包含事件属性。 |
【举例 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)
【举例 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自定义查询中的函数列表。
【举例 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))
假设埋点的时候有属性:事件属性「价格 price」,为float类型,有值为10.56、200.345
希望计算时四舍五入只考虑整数部分,比如11、200,可以使用如下规则创建虚拟属性:
SQL 表达式:round(event_params.price,0)
假设埋点的时候有属性:用户属性「累计消费金额 total_cost」,为float类型
希望根据消费金额来对用户进行会员等级的区分,比如:
累计消费金额 | VIP 等级 |
---|---|
| 黑金 |
[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,'黄金',
'黑金'
)
假设埋点的时候有属性:事件属性「视频时间 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)等。