1

我想从 dc.js 中两个单独的 numberDisplays 的值做进一步的计算

在此处输入图像描述

这是代码,

function makeGraphs(data) {

xf = crossfilter(data);
all = xf.groupAll();
txntypeDim = xf.dimension(function(d) { return d.txntype; });
sumAllTXN = txntypeDim.groupAll().reduceSum(function(d) {return d.txnamount;});

numberRecordsND = dc.numberDisplay("#number-records-nd",groupname)
numberRecordsTXN = dc.numberDisplay("#number-records-txn",groupname)

   numberRecordsND
    .formatNumber(d3.format("d"))
    .valueAccessor(function(d){return d; })
    .group(all);

   numberRecordsTXN
    .formatNumber(function(d){return d; })
    .valueAccessor( function(d) { return d; } )
    .group(sumAllTXN);

dc.renderAll(groupname);

}

我想在另一个 div 中显示 numberRecordsTXN/numberRecordsND 的百分比。有什么办法可以做到这一点?

编辑:解决方案代码;

function makeGraphs(data) {

xf = crossfilter(data);
all = xf.groupAll();
txntypeDim = xf.dimension(function(d) { return d.txntype; });
sumAllTXN = txntypeDim.groupAll().reduceSum(function(d) {return d.txnamount;});

numberRecordsND = dc.numberDisplay("#number-records-nd",groupname)
numberRecordsTXN = dc.numberDisplay("#number-records-txn",groupname)
numberRecordsAVG = dc.numberDisplay("#number-records-avg",groupname)

   numberRecordsND
    .formatNumber(d3.format("d"))
    .valueAccessor(function(d){return d; })
    .group(all);

   numberRecordsTXN
    .formatNumber(function(d){return d; })
    .valueAccessor( function(d) { return d; } )
    .group(sumAllTXN);

   numberRecordsAVG
   .formatNumber(d3.format("d"))
   .valueAccessor(function(d){return d; })
   .group(groupall_percent(numberRecordsTXN, numberRecordsND));

dc.renderAll(groupname);

};

function groupall_percent(numerator, denominator) {
  return {
    value: function() {
      return numerator.value() / denominator.value();
    }
  };
};
4

1 回答 1

1

的输入numberDisplay非常简单 - 它期待一个groupAll对象group我知道令人困惑),这只是一个带有.value()方法的对象。

因此,您可以轻松地创建一个虚假的 groupAll,它会从其他两个 groupAll 中产生一个百分比:

function groupall_percent(numerator, denominator) {
  return {
    value: function() {
      return numerator.value() / denominator.value() * 100;
    }
  };
}

您可以像示例中的其他 groupAlls 一样使用生成的对象。

但请注意,您的示例不符合您的描述。百分比始终是一个计数除以另一个计数并乘以 100。但您的示例是金额的总和除以计数,这是一个平均值。

要将此代码用于平均值,您将删除该* 100部分。

于 2019-05-03T10:51:35.800 回答