# Accumulation

{% hint style="info" %}
Check out the [accumulation tests](https://github.com/larswaechter/voici.js/tree/main/tests/body/accumulation) for more examples.
{% endhint %}

Accumulation allows you to calculate a value based on all the cells inside a given column. Therefore, you can pick one of the predefined [accumulation functions](https://voici.larswaechter.dev/reference/api-reference/accumulationfunction). For example:

* SUM
* MEAN
* MAX
* VARIANCE
* ...

{% hint style="warning" %}
The values `null` and `undefined` are excluded from accumulation.
{% endhint %}

Using the `accumulation` options you can provide the accumulated `columns`, a `bgColor` and a line `separator`. Inside `columns` provide the desired column you'd like to accumulate and the `AccumulationFunction` to apply.

```javascript
import { Table, AccumulationFunction } from 'voici.js'

const data = [
  { firstname: 'Homer', lastname: 'Simpson', age: 39 },
  { firstname: 'Marge', lastname: 'Simpson', age: 36 },
  { firstname: 'Bart', lastname: 'Simpson', age: 10 },
  { firstname: 'Lisa', lastname: 'Simpson', age: 8 },
  { firstname: 'Maggie', lastname: 'Simpson', age: 1 }
];

const config = {
  body: {
    accumulation: {
      separator: '-',
      columns: [
        {
          'age': AccumulationFunction.MEAN
        }
      ]
    }
  }
};

const table = new Table(data, config);
table.printPlain();
```

The accumulated output:

```
  firstname    lastname    age     
===================================
  Homer        Simpson     39      
  Marge        Simpson     36      
  Bart         Simpson     10      
  Lisa         Simpson     8       
  Maggie       Simpson     1       
-----------------------------------
                           18.800  
```

{% hint style="info" %}
You can also use accumulated values for [dynamic columns](https://voici.larswaechter.dev/examples/columns/dynamic-columns).
{% endhint %}
