按汇总划分总计(D3 / DC / Crossfilter / Reductio)

时间:2016-04-26 21:20:18

标签: d3.js dc.js crossfilter reductio

小提琴参考:https://jsfiddle.net/33228p1d/4/

在页面上引用Cost Average图表。使用以下代码呈现的图表:

var cpa = ndx.dimension(function (d) {
  return d.location;
});
var cpaGroup = cpa.group().reduceSum(function (d) {
  return d.total;
});

图表本身:(为了简洁而留下造型)

cpaChart
    .dimension(cpa)
    .group(cpaGroup)
    .label(function (d) {
        return d.key + " $" + d.value;
    })
    .title(function (d) {
        return d.value;
    })
    .elasticX(true)
    .ordering(function (d) { return -d.value })
    .xAxis().ticks(4);

目前,它正准确显示FrontBack位置的总数。

我想要它做的是显示总数除以该位置的唯一采购订单数量,以显示每个位置的平均成本。

因此,例如,对于Back,我有两个总共$396的唯一采购订单。我希望看到396 / 2每个位置的平均费用为198

1 个答案:

答案 0 :(得分:2)

如果您仍然愿意使用Reductio,请在同一组上跟踪sum和exceptionCount,然后将其除以valueAccessor访问者:

  var cpaGroup = reductio()
    .sum('total')
    .exception(function(d) { return d.po; })
      .exceptionCount(true)(cpa.group());

  cpaChart
        .width(400)
        .height(200)
        .margins({ top: 20, left: 10, right: 10, bottom: 20 })
        .dimension(cpa)
        .group(cpaGroup)
        .ordinalColors(['#3182bd', '#6baed6', '#9ecae1', '#c6dbef', '#dadaeb'])
        .label(function (d) {
            return d.key + " $" + (Math.round(d.value.sum / d.value.exceptionCount));
        })
        .title(function (d) {
            return d.value;
        })
        .valueAccessor(function(d) {
            return d.value.sum / d.value.exceptionCount;
        })
        .elasticX(true)
        .ordering(function (d) { return -d.value })
        .xAxis().ticks(4);

示例:https://jsfiddle.net/7wbcref9/