D3.js 如何计算交叉筛选中的部分总计?

D3.js 如何计算交叉筛选中的部分总计?,d3.js,crossfilter,D3.js,Crossfilter,我正在开始使用我的银行账户交易列表中的数据学习: ╔════════════════╦════════╗ ║ Transact. date ║ Amount ║ ╠════════════════╬════════╣ ║ 2000-01-01 ║ +100 $ ║ ║ 2000-01-02 ║ -25 $ ║ ║ 2000-02-01 ║ -100 $ ║ ║ 2000-03-01 ║ +50 $ ║ ╚════════════════╩════════╝

我正在开始使用我的银行账户交易列表中的数据学习

╔════════════════╦════════╗
║ Transact. date ║ Amount ║
╠════════════════╬════════╣
║ 2000-01-01     ║ +100 $ ║
║ 2000-01-02     ║  -25 $ ║
║ 2000-02-01     ║ -100 $ ║
║ 2000-03-01     ║  +50 $ ║
╚════════════════╩════════╝
我希望按月获得总金额以及部分账户余额(即每月总金额的增量总和)。以下是基于我刚才给出的示例数据的期望输出:

╔═════════╦═════════════╦═══════════════╗
║ Month   ║ Tot. amount ║ Part. balance ║
╠═════════╬═════════════╬═══════════════╣
║ 2000-01 ║       +75 $ ║          +75$ ║
║ 2000-02 ║      -100 $ ║          -25$ ║
║ 2000-03 ║       +50 $ ║          +25$ ║
╚═════════╩═════════════╩═══════════════╝
我在计算总金额方面没有问题,但我不知道如何计算每月余额的部分金额。这是我的密码:

var ndx = crossfilter(data);
var month = ndx.dimension(function(d) { return d3.time.month(d.date); });
var amountByMonth = month.group().reduceSum(function(d) { return d.amount; });
var balanceByMonth = null; // TODO

一个简单但有效的方法是循环你的月份,并计算运行总数

var months = Object.keys(amountByMonth).sort();
var runningTotal = 0;
for(var i = 0, l = months.length; i < l; i++) {
  var month = months[i];
  runningTotal += amountByMonth[month];
  balanceByMonth[month] = runningTotal;
}
var months=Object.keys(amountByMonth.sort();
var runningTotal=0;
对于(变量i=0,l=months.length;i
由于月数始终是可管理的(即使是多年的数据),这应该很好