简单又实用的聚合函数生成器 createAggregateFunction
,该生成器接受一个指标配置数组,返回这些指标对应的聚合函数。
- 支持以下聚合操作符:
MAX | MIN | SUM | AVG | COUNT
- 支持的普通四则运算(加减乘除与圆括号)
- 支持简单的计算指标
import { createAggregateFunction } from 'dvt-aggregation'
const indicators = [
{ code: 'target', name: '目标收入', expression: 'SUM(target)' },
{ code: 'income', name: '实际收入', expression: 'SUM(income)' },
{ code: 'rate', name: '达成比率', expression: 'income / target' },
]
const fn = createAggregateFunction(indicators)
// 生成的 fn 如下:
function anonymous(slice) {
/* aggregate function generated by dvt-aggregation@x.y.z
目标收入: target = SUM(target)
实际收入: income = SUM(income)
达成比率: rate = income / target
*/
let r = {}
r['target'] = 0
r['income'] = 0
for (const d of slice) {
r['target'] += d['target'] || 0
r['income'] += d['income'] || 0
}
r['rate'] = r['income'] / r['target']
return r
}
const result = fn([
{ month: '2022-01', target: 700, income: 600 },
{ month: '2022-02', target: 800, income: 750 },
{ month: '2022-03', target: 1000, income: 1050 },
])
// result: { target: 2500, income: 2400, rate: 0.96 }