2016-04-26 7 views
2

Fiddle для справки: https://jsfiddle.net/33228p1d/4/Разделив агрегат на агрегат (D3/DC/Crossfilter/Reductio)

Реферирование 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); 

Прямо сейчас, он показывает общее для Front и Back мест точно.

Что я хочу сделать, это показать общее количество, деленное на количество уникальных PO для этого местоположения, чтобы показать среднюю стоимость каждого места.

Так, например, для Back У меня есть два уникальных заказа на покупку всего $396. То, что я хотел бы видеть, - 396/2 за среднюю стоимость за место 198.

ответ

2

Если вы по-прежнему готовы использовать Reductio, сумму трека и 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/