Skip to content

feichao93/dvt-aggregation

Repository files navigation

dvt-aggregation

简单又实用的聚合函数生成器 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 }

About

Simple and easy-to-use aggregation function generator.

Resources

Stars

Watchers

Forks

Packages

No packages published