You need to enable JavaScript to run this app.
导航
虚拟属性
最近更新时间:2024.10.31 19:39:52首次发布时间:2024.04.30 15:17:19

虚拟属性可以满足属性值二次加工的需求,您可以通过编写SQL表达式中的四则运算和部分字符串操作函数来创建一个虚拟属性,后续用于用户属性、部分或全部事件属性。本文为您介绍虚拟属性的注意事项和使用指导。

使用限制

一个应用允许创建的虚拟属性个数有限,当创建的虚拟属性数量达到上限后,“创建虚拟属性”按钮将不可点击。

  • SaaS-云原生、SaaS-非云原:一个应用最多创建200个虚拟属性。
  • 私有化:一个应用最多创建5000个虚拟属性。

创建虚拟属性
  1. 登录DataFinder控制台后,单击顶部导航栏数据管理>元数据管理>虚拟属性,进入虚拟属性页面。

  2. 单击页面右上角的创建虚拟属性按钮,新建一个虚拟属性,在弹出的侧边框中配置虚拟属性参数。

  3. 配置基本信息。
    Image

    参数

    配置说明

    属性名称

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

    属性类型

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

    展示名 & 属性描述

    自定义虚拟属性的属性名和描述信息。

    可用范围

    配置虚拟叙述的可见范围。

    • 仅自己可用:仅自己可见,其他人无法看到、使用创建的虚拟属性。
    • 公开使用:所有人可以看到并使用创建的虚拟属性。

    数据类型

    配置虚拟属性的取值数据类型:string,int,float,datetime,list

    关联方式

    配置虚拟属性的关联方式:

    • 任一关联:关联了 SQL 中用到的任何一个属性的事件就会与虚拟属性关联
    • 全部关联:关联了 SQL 中全部属性的事件才会与虚拟属性关联

    关联事件的异同说明如下:
    Image

  4. 配置表达式。填写对属性的加工的 SQL 表达式片段。

    注意

    • 当前暂不限制表达式中涉及到的属性个数,只有第一段 SQL 会被执行。
    • SQL表达式的通用配置能力如下,更多场景化的示例Demo可参见下文的**SQL表达式Demo**章节。

    Image

    • 您可以在下方的属性选择框、函数选择框中搜索选择相关的属性或函数,双击即可一键将对应的属性、函数引用至SQL表达式的输入框中。

      说明

      如果您同时开通了DataFinder和CDP,SaaS-云原生环境中,创建虚拟属性时,虚拟属性的表达式支持引用cdp标签创建虚拟事件属性和虚拟用户属性,语法为tags.xxx

    • 您也可以手动填写SQL表达式,当前已支持引用数字、中文等特殊字符开头的属性,通过使用反引号包裹,比如event_params.123user_profiles.123

      说明

      SaaS-云原生环境中,创建虚拟事件属性时,支持您通过手动填写SQL表达式直接引用业务维度(item表)数据来创建虚拟事件属性,例如,concat(item_profiles.fund.name, event_params.price)

  5. 单击页面右下角的在线结果测试,测试表达式配置结果。在完整输入配置表达式后,可以通过自定义原始value值,即时查看加工后的属性值。
    Image

  6. 完成以上操作,单击确定,即可创建一个虚拟属性。

SQL表达式Demo

Demo1:对属性值进行四则运算

【举例 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)
    

Demo:抽取属性值中的部分字段

【举例 1】

  • 示例场景:假设埋点的时候有属性:事件属性「网址 full_url」,希望提取出域名信息。比如https://console.volcengine.com/datafinder/app/178497/dashboard/6807670720953319944,希望提取出console.volcengine.com

  • SQL 表达式:

    domain(event_params.full_url)
    

    具体的URL相关函数,具体的URL相关函数,请请参考SQL自定义查询(SaaS)中的函数列表。

【举例 2】

  • 示例场景:假设埋点的时候有属性:事件属性「内容详情 body_json」,属性内容为json格式的字符串,比如:

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

    希望提取出product信息: datafinder

  • SQL 表达式:

    JSONExtractString(event_params.body_json,'product')
    

    具体的JSON相关函数,请请参考SQL自定义查询(SaaS)中的函数列表。

Demo3:合并多个属性值

【举例 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))
    

Demo4:统一属性值的计算精度

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

Demo5:给客户打标签

  • 示例场景:
    假设埋点的时候有属性:用户属性「累计消费金额 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,'黄金',
    '黑金'
    )
    

Demo6:类型转换

  • 示例场景:
    假设埋点的时候有属性:事件属性「视频时间 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)等。

编辑/删除虚拟属性

Image

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

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

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

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

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

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

Image

参考:虚拟属性的适用范围

功能

描述

自定义查询

不适用。

虚拟事件

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

圈选事件

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

任意事件

不适用,包括:any_event 和 any_active_event。

分析主体

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

属性关联

适用。

用户路径

适用。

虚拟属性

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