对于已上报的事件属性和用户属性,可以用 SQL 表达式进行计算得到一个新的属性字段,这类属性称之为虚拟属性
字段 | 说明 | 是否必填 |
---|---|---|
属性名 | 虚拟属性的唯一标识 | 是 |
显示名 | 在 DT 系统中的别名 | 否 |
属性说明 | 对属性进行详细描述 | 否 |
数据类型 | 决定创建的目标虚拟属性在 DT 系统中的分析方式(筛选和分组),详情见基本概念 | 是 |
关联事件 | 决定创建的目标虚拟属性在选择哪些事件时可以进行分析(筛选和分组) | 是 |
属性定义 | 通过 SQL 表达式针对右侧「事件属性」或「用户属性」复制引用的属性字段进行二次计算 SQL 表达式:使用 trino 语法,可以访问Trino 文档获取 trino 的语法以及函数的使用方法 |
是 |
调试 | 当创建的目标虚拟属性完成属性定义后,需要对其进行调试,以保证虚拟属性的值为预期结果 注意:当数据类型选择日期和时间时,调试结果显示的时区为调试设备的系统时区,非真实计算时区 |
是 |
是否跟随分析时区
功能说明
- 该功能仅对 SQL 表达式中的「日期和时间」类型属性生效,它允许对这类属性进行统一的时区设置
- 如果启用了「跟随分析时区」,则 SQL 表达式中的「日期和时间」类型属性在实际计算前(报表、看板、用户列表、事件列表、用户时序详情页的事件/用户属性)会跟随分析时区进行转换,并生成目标虚拟属性,然后目标虚拟属性参与计算
- 如果不启用「跟随分析时区」,则 SQL 表达式中的「日期和时间」类型属性根据设置的时区进行转换,立即生成目标虚拟属性,并且实际分析时页面显示的分析时区不再对 SQL 表达式中「日期和时间」类型属性生效
应用场景
当计算日期差时使用「跟随分析时区」,可以确保在使用任意分析时区进行计算时,数据都保持准确
注意
DT 系统中所有的「日期和时间」类型属性,在分析时都会跟随分析时区进行转换
因此,如果分析使用的虚拟属性数据类型为「日期和时间」,则不论该虚拟属性的 SQL 表达式中「日期和时间」类型属性是否设置跟随分析时区,该虚拟属性都会跟随实际分析时区进行转换并参与计算
当属性的数据类型与预期不符时,可通过以下公式进行属性类型转换
注意:若属性值无法强制转换成预期类型,则新属性值为空
# 公式
cast(value AS type)
如果需要计算时间差,可通过以下公式进行计算
例如:计算用户发生事件时的生命周期天数
# 公式
date_diff(unit, timestamp1, timestamp2)
# 示例
date_diff('day',date(dt_u."$active_time"),date(dt_e."#event_time"))
如果需要将数据类型为数值的时间戳,转换为「日期和时间」类型,可通过以下公式进行计算
例如:将上报的注册时间时间戳转换为「日期和时间」类型
# 公式
from_unixtime("unixtime")
# 示例
from_unixtime(dt_u."register_time")
某些情况下一个属性的值可能由多个信息的组合得到,如果需要截取属性值中部分关键信息,可通过以下公式进行计算
例如:订单 ID orderid
属性包含订单日期和订单类型(实例:date20230101type2),需要截取订单日期
# 公式
substring(string, start, length)
# 示例
substring(dt_e."orderid", 5, 8)
将多个文本类型的属性进行字段拼接
concat(dt_e."#event_name", dt_e."#app_crashed_reason")
将文本类型的属性按照指定的分隔符进行拆分
split(dt_e."#event_name" , ' ,')
利用 IF 函数创建一个为常数的虚拟属性,此处 condition 设置为非空属性及其需要满足的条件即可
if(dt_e."#event_time" is not null, 1, 1)
通过不同的条件设置给属性赋予不同的结果值,以下为参考模版
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
计算日期属性所属年份
year(dt_e."#event_time")
计算日期属性所属月份
month(dt_e."#event_time")
计算日期属性所属季度
quarter(dt_e."#event_time")
计算日期属性所属年周
quarter(dt_e."#event_time")
将数值类型的日期属性转换为时间戳
from_unixtime(dt_e."#background_duration")
将字符串类型的日期属性转换为时间戳
parse_datetime(dt_e."#account_id",'%Y-%m-%d')