跳到主要内容
版本:2.3

虚拟属性

简介

虚拟属性,是指在数据入库之后通过 SQL 表达式对已定义的属性进行二次加工,产生一个新的属性值。

虚拟属性作为GrowingIO推出的高级能力,涉及到较多技术细节,适用于SQL经验较强的用户参考。若对文档有疑问或使用上遇到问题,请及时联系GrowingIO的技术支持。

功能边界或约束

  • 支持创建事件的虚拟属性,暂不支持创建用户和维度表的虚拟属性
  • 支持引用事件属性来创建事件的虚拟属性,暂不支持引用用户属性和维度表字段
  • 支持创建字符串类型的虚拟属性,暂不支持其他类型的虚拟属性
  • 虚拟属性暂不支持关联维度表
  • 考虑到性能等因素的影响,虚拟属性开放了常规的函数供使用,支持的函数范围见附录

功能说明

虚拟属性管理的入口:【客户数据平台】 - 【事件管理】 - 【虚拟属性】

picture 1

创建虚拟属性

创建一个虚拟属性,分两个步骤。

步骤 一:设置虚拟属性基本信息

设置虚拟属性基本信息

步骤 二:定义规则(虚拟属性的SQL表达式)

定义规则

SQL表达式细则:

  • 引用的属性为事件属性的标识符
  • 支持的函数范围及示例见附录

修改虚拟属性

对于已创建的虚拟属性,支持您再次编辑。

具体操作是点击某行虚拟属性,在详情页中点击“编辑”按钮,即可进入编辑弹窗。

修改虚拟属性

删除虚拟属性

对于已创建的虚拟属性,如果没有用或没有用到,您可以将其删除。

具体操作是点击某虚拟属性行的操作列,弹窗的删除按钮点击后即可删除该虚拟属性。

删除虚拟属性

提示:删除虚拟属性将影响到使用它的单图等应用。

虚拟属性绑定到事件上

对于已创建的虚拟属性,要想在分析工具中使用它,需将其绑定到需要分析的事件上。

绑定操作在【客户数据平台】 - 【事件管理】 - 【埋点事件】中。

绑定虚拟属性到事件

应用案例

案例 1:属性数据类型转换

假设某埋点属性为订单价格(price_1,数值类型),希望精度保留到百位(向下取整)且转为字符串类型,以便于用它来做下钻分析。

SQL表达式: to_string(floor(price_1/100)*100) ​

案例 2:属性大小写转换

假设某埋点属性(name)上报值中有大小写混合的字符串,比如GrowingIO和growingio,在下钻分析时希望统计为一条growingio,这时可以创建一个新的虚拟属性来表达。

SQL表达式: lower(name) ​

案例 3:属性内容提取

假设我们埋点了一个事件属性url,希望从url中提取出参数arg的值用来做下钻分析,那么可以创建一个新的虚拟属性来表达。

​比如:url的值为 http://test.com/test?arg=渠道1

SQL表达式: parse_url_query(url,'arg')

返回值为:渠道1 ​

案例 4:属性内容拼接

假设分析时,需要将多个字符串属性的值拼接在一起,合并成一个属性在分析图表中做下钻分析或筛选过滤,这时您可以创建一个新的虚拟属性来表达。

比如有属性A(var_1,字符串类型)、B(var_2,字符串类型)和(var_3,字符串类型),需要用分隔符“-”拼在一起

SQL表达式:concat(var_1 , '-' , var_2 , '-' , var_3)

案例 5:属性计算

假设订单事件在埋点时埋了两个属性:商品的进货价(price_1,数值类型)和出货价(price_2,数值类型),当我们想计算每个商品的进货价和出货价的差值,可以创建一个新的虚拟属性为利润(income)来表达。

SQL表达式:price_2 - price_1

案例 6:属性字典翻译

假设埋点时,某属性(var_1,字符串类型)上报时值为英文,属性值为可枚举。希望它在看板分析重展示时映射为中文,可以创建一个新的虚拟属性来表达。

属性值翻译值
level1初级
level2中级
level3高级

SQL表达式:

case when var_1 = 'level1' then '初级' when var_1 = 'level2' then '中级' when var_1 = 'level3' then '高级' else '其他等级' end ​

常见问题

Q:虚拟属性可以在用户属性中创建吗?

A:目前不支持基于用户属性的虚拟属性创建,如果相关场景,您可以考虑通过新建用户属性+数据导入的方式获得所需属性值。 ​

Q:虚拟属性可以跨域引用属性吗?比如事件虚拟属性引用用户属性

A:考虑性能影响,目前虚拟属性的SQL表达式,不支持引用跨域的属性。 ​

Q:虚拟属性对查询性能的影响大吗?

A:虚拟属性由于不支持跨域引用属性,很大程度上规避了给统计图表带来性能降低的问题。大部分的虚拟属性对性能的影响几乎可以忽略,比如属性的计算、类型转换等;少量函数比如正则匹配,对使用它的单图的查询性能下降30%左右。

Q:虚拟属性引用的属性被删除,虚拟属性还能正常使用吗?

A:当引用的属性被删除时,虚拟属性立即变为异常状态。对于使用了异常的虚拟属性的单图将受到影响。

附录

虚拟属性支持的函数范围

函数含义示例
like模糊查询假设属性var_1值为GrowingIO,需要提取出包含Growing的值
SQL表达式:var_1 like '%Growing%'
regexp正则匹配假设属性var_1值为GrowingIO,需要提取出包含G开头的值
SQL表达式:var_1 regexp '^G'
round四舍五入假设属性var_1为数值类型
SQL表达式:round(var_1)
floor向下取整假设属性var_1为数值类型
SQL表达式:floor(var_1)
ceill向上取整假设属性var_1为数值类型
SQL表达式:ceil(var_1)
if条件判断假设var_1为数值类型
SQL表达式:if(var_1>=100, 'VIP', '普通会员')
if_null判断空判断假设var_1为字符串类型,值域范围为:NULL, 男,希望NULL值转化为“女”
SQL表达式:if_null(var_1, '女')
coalesce非空查找查找多个属性中的非空首个值
SQL表达式: coalesce(var_1, var_2, var_3)
case whenCase函数假设var_1为数值类型
SQL表达式:
case
when var_1>=1000 then 'A级'
when var_1>=100 then 'B级'
when var_1>=10 then 'C级'
else '其他'
end
length字符串/列表长度假设var_1为字符串类型
SQL表达式:length(var_1)
concat字符串拼接假设var_1, var_2为字符串类型
SQL表达式:concat(var_1, var_2)
备注:支持两个及以上的字符串拼接
replace字符串替换假设var_1为字符串类型,值为GrowingIO,需要把IO替换为Hello
SQL表达式:replace(var_1, 'IO' , 'Hello')
substring字符串提取假设var_1为字符串类型,值为GrowingIO,需要提取前3个字符
SQL表达式:substring(var_1, 1, 3)
upper字符串转大写upper(var_1)
lower字符串转小写lower(var_1)
parse_url_queryURL参数提取假设var_1为URL链接的字符串,需要提取链接中参数为arg的值
SQL表达式:parse_url_query(var_1, 'arg')
to_string转字符串类型假设var_1为数值型
SQL表达式:to_string(var_1)
to_int转整型假设var_1为字符串类型的数值
SQL表达式:to_int(var_1)
to_float转小数假设var_1为字符串类型的数值
SQL表达式:to_float(var_1)
to_date字符串转日期假设var_1为字符串类型,如"2022-01-01"
SQL表达式:to_date(var_1)
format_date日期格式化如将event_time转小时,
SQL表达式:format_date(event_time,'%H')

format_date的常用修饰符如下:

修饰符描述示例
%Y2018
%y年份,最后两位数字(00-99)18
%m月份,零填充(01-12)01
%d月中的一天,零填充(01-31)02
%e月中的一天,无零填充(1-31)2
%H24小时格式(00-23)22
%I小时12h格式(01-12)10
%M分钟(00-59)33
%w周中第几天,周日为0(0-6)2