function rollupDataKeysValues(data, keys, value1, value2) {
const rollupDataKeys = Array.from(
d3.rollup(
data,
v => ({sum1: d3.sum(v, d => d[value1]), sum2: d3.sum(v, d => d[value2])}),
d => d[keys[0]],
d => d[keys[1]],
),
([keyName, total]) => ({keyName, total})
);
let result = [];
rollupDataKeys.forEach(obj => {
obj.total.forEach((value, key) => {
let item = {};
item[keys[0]] = obj.keyName;
item[value1[0]] = value.sum1;
item[value2[0]] = value.sum2;
item['total'] = value.sum1 + value.sum2
item[value1[0]+'_per'] = Math.round((value.sum1 / item['total']) * 100);
item[value2[0]+'_per'] = Math.round((value.sum2 / item['total']) * 100);
item[keys[1]] = key;
result.push(item);
});
});
return result;
}