in src/grid/agr-engine.ts [631:666]
changeFormula(column: Column, formula: string) {
column.columnDef.formula = formula;
column.columnDef.formulaResult = 0;
let columnValue: number;
let index = 0;
for (const row of this.rows) {
if (!this.processRowByLevel(row, column.columnDef)) {
continue;
}
columnValue = ColumnHelper.getColumnValue(row.data, column.columnDef);
if (this.isEmptyValue(columnValue)) {
continue;
}
if (index === 0) {
column.columnDef.formulaResult = +columnValue;
}
switch (formula) {
case ColumnFormulaTypes.sum:
case ColumnFormulaTypes.average:
if (index !== 0) {
column.columnDef.formulaResult = this.precisionSum(column.columnDef.formulaResult, columnValue);
}
break;
case ColumnFormulaTypes.max:
column.columnDef.formulaResult = Math.max(column.columnDef.formulaResult, columnValue);
break;
case ColumnFormulaTypes.min:
column.columnDef.formulaResult = Math.min(column.columnDef.formulaResult, columnValue);
break;
}
index++;
}
if (formula === ColumnFormulaTypes.average) {
column.columnDef.formulaResult /= this.rows.length;
}
}