Skip to main content

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来生成。