calculateAggregate function

double calculateAggregate(
  1. AggregateRule rule,
  2. List rows
)

Applies rule to rows and returns its numeric result.

Implementation

double calculateAggregate(AggregateRule rule, List<dynamic> rows) {
  if (rule.function == AggregateFunction.count) return rows.length.toDouble();
  final values = rows.map((row) => rowAmount(row, rule.expression)).toList();
  if (values.isEmpty) return 0;
  return switch (rule.function) {
    AggregateFunction.sum => values.fold(0.0, (sum, value) => sum + value),
    AggregateFunction.average =>
      values.fold(0.0, (sum, value) => sum + value) / values.length,
    AggregateFunction.min => values.reduce((a, b) => a < b ? a : b),
    AggregateFunction.max => values.reduce((a, b) => a > b ? a : b),
    AggregateFunction.count => values.length.toDouble(),
  };
}