菜单

虚拟属性

虚拟属性

对于已上报的事件属性和用户属性,可以用 SQL 表达式进行计算得到一个新的属性字段,这类属性称之为虚拟属性

一、创建属性

字段 说明 是否必填
属性名 虚拟属性的唯一标识
显示名 在 DT 系统中的别名
属性说明 对属性进行详细描述
数据类型 决定创建的目标虚拟属性在 DT 系统中的分析方式(筛选和分组),详情见基本概念
关联事件 决定创建的目标虚拟属性在选择哪些事件时可以进行分析(筛选和分组)
属性定义 通过 SQL 表达式针对右侧「事件属性」或「用户属性」复制引用的属性字段进行二次计算
SQL 表达式:使用 trino 语法,可以访问Trino 文档获取 trino 的语法以及函数的使用方法
调试 当创建的目标虚拟属性完成属性定义后,需要对其进行调试,以保证虚拟属性的值为预期结果
注意:当数据类型选择日期和时间时,调试结果显示的时区为调试设备的系统时区,非真实计算时区

是否跟随分析时区

功能说明

  1. 该功能仅对 SQL 表达式中的「日期和时间」类型属性生效,它允许对这类属性进行统一的时区设置
  2. 如果启用了「跟随分析时区」,则 SQL 表达式中的「日期和时间」类型属性在实际计算前(报表、看板、用户列表、事件列表、用户时序详情页的事件/用户属性)会跟随分析时区进行转换,并生成目标虚拟属性,然后目标虚拟属性参与计算
  3. 如果不启用「跟随分析时区」,则 SQL 表达式中的「日期和时间」类型属性根据设置的时区进行转换,立即生成目标虚拟属性,并且实际分析时页面显示的分析时区不再对 SQL 表达式中「日期和时间」类型属性生效

应用场景

当计算日期差时使用「跟随分析时区」,可以确保在使用任意分析时区进行计算时,数据都保持准确

注意

DT 系统中所有的「日期和时间」类型属性,在分析时都会跟随分析时区进行转换
因此,如果分析使用的虚拟属性数据类型为「日期和时间」,则不论该虚拟属性的 SQL 表达式中「日期和时间」类型属性是否设置跟随分析时区,该虚拟属性都会跟随实际分析时区进行转换并参与计算

二、最佳实践

2.1 数据类型转化

当属性的数据类型与预期不符时,可通过以下公式进行属性类型转换

注意:若属性值无法强制转换成预期类型,则新属性值为空

sql 复制代码
# 公式
cast(value AS type)

2.2 时间差计算

如果需要计算时间差,可通过以下公式进行计算

例如:计算用户发生事件时的生命周期天数

sql 复制代码
# 公式
date_diff(unit, timestamp1, timestamp2)

# 示例
date_diff('day',date(dt_u."$active_time"),date(dt_e."#event_time"))

2.3 时间戳转换

如果需要将数据类型为数值的时间戳,转换为「日期和时间」类型,可通过以下公式进行计算

例如:将上报的注册时间时间戳转换为「日期和时间」类型

sql 复制代码
# 公式
from_unixtime("unixtime")

# 示例
from_unixtime(dt_u."register_time")

2.4 截取字符

某些情况下一个属性的值可能由多个信息的组合得到,如果需要截取属性值中部分关键信息,可通过以下公式进行计算

例如:订单 ID orderid 属性包含订单日期和订单类型(实例:date20230101type2),需要截取订单日期

sql 复制代码
# 公式
substring(string, start, length)

# 示例
substring(dt_e."orderid", 5, 8)

2.5 拼接字段

将多个文本类型的属性进行字段拼接

sql 复制代码
concat(dt_e."#event_name", dt_e."#app_crashed_reason")

2.6 拆分字段

将文本类型的属性按照指定的分隔符进行拆分

sql 复制代码
split(dt_e."#event_name" , ' ,')

2.7 虚拟常数

利用 IF 函数创建一个为常数的虚拟属性,此处 condition 设置为非空属性及其需要满足的条件即可

sql 复制代码
if(dt_e."#event_time" is not null, 1, 1)

2.8 条件判断

通过不同的条件设置给属性赋予不同的结果值,以下为参考模版

sql 复制代码
case 
when "serverid" = 1 and dt_e."#event_time" > cast('2020-11-15 10:30:00.000' as timestamp) then 'after_cleaning' 
when "serverid" = 2 and dt_e."#event_time" > cast('2020-11-22 10:30:00.000' as timestamp) then 'after_cleaning' 
else 'before_cleaning' 
end

2.9 提取日期所属年份

计算日期属性所属年份

sql 复制代码
year(dt_e."#event_time")

2.10 提取日期所属月份

计算日期属性所属月份

sql 复制代码
month(dt_e."#event_time")

2.11 提取日期所属月份季

计算日期属性所属季度

sql 复制代码
quarter(dt_e."#event_time")

2.12 计算日期属于一年中的第几周

计算日期属性所属年周

sql 复制代码
quarter(dt_e."#event_time")

2.13 数值转日期

将数值类型的日期属性转换为时间戳

sql 复制代码
from_unixtime(dt_e."#background_duration")

2.14 字符串转日期

将字符串类型的日期属性转换为时间戳

sql 复制代码
parse_datetime(dt_e."#account_id",'%Y-%m-%d')

上一个
事件/用户属性
下一个
维度表属性
最近修改: 2024-07-19