PredItemType
基本介绍
一个PredItem可以视作SQL中的Select list中的一个运算操作。PredItem的格式如下:
{
name: '总销售额',
operator: '$sum',
pred: 'amount',
query: {},
}
上述PredItem转化成SQL就是
sum(`amount`) AS `总销售额`
目前支持的操作符(operator)有:
$sum:对字段执行求和,通常用于数值型指标。$avg:计算字段的平均值。$count:统计记录数量,等价于 SQL 中的COUNT(*)。$distinct:统计字段去重后的数量。$yoy:按同比计算结果,自动匹配上一年同周期的数据。$mom:按环比计算结果,自动匹配上一周期的数据。$sply:计算上一年同期的数值,常用于趋势类分析。$splm:计算上一周期(月/周等)的数值,便于对比近期表现。$dailyavg:按自然日求平均值,用于平滑每日波动。$monthlyavg:按自然月求平均值,用于平滑月度波动。$uniq:统计唯一用户/实体数量,比$distinct更适合处理 UV 等指标。$sql:使用自定义 SQL 片段计算指标,适合复杂逻辑。$piecewise:将一个数值类型的字段在线做分段。
如果是自定义的指标,也是写在operator里面,比如自定义了一个叫转化率的指标,那么相应PredItem的表达为:
{
name: 'alias',
operator: '转化率'
}
pred字段可以认为是操作符的参数,是否必须依据操作符而定。
query字段可不填。如果填写的话,格式就是QueryType。放在这里而不放在logicform最外面的意思是,这里的query仅针对此PredItem有效。比如我们同时想计算今年销售额和去年销售额,可以这么写logicform:
{
"schema": "sales",
"preds": [
{"name":"去销售额", "operator":"$sum", "pred":"amount", "query": {"日期": {"year": 2021}}},
{"name":"今年销售额", "operator":"$sum", "pred":"amount", "query": {"日期": {"year": 2022}}},
]
}
两者query不会互相影响
$piecewise(分段操作符)
分段操作符可以将一个数值类型的字段在线做分段。
该操作符一般由问答而来,例如有一个字段是number类型,叫年龄。 那么在用户提问: 各个年龄段的消费者数量的时候,生成的groupby部分如下:
{
"groupby": [
{
"_id": "年龄",
"operator": "$piecewise",
"name": "年龄段",
}
]
}
$piecewise操作符会自动计算每一个分段组(bucket)的范围。也可以通过在Schema配置,专家模式中,对该字段的分组条件进行指定,指定方式如下:
{
"cases": [
{
"when": "age<30",
"then": "0~30"
},
{
"when": "age >= 30 AND age < 50",
"then": "30~50"
},
{
"else": "50+"
}
]
}
其中,age就是年龄这个字段在数据库中的列名。when和then都要是sql的case when语句中支持的语法。在最终生成的sql中,groupby的分组会通过case when来生成。