2016-11-16 4 views
1

Ich benutze die Arbeit mit dem Code von How to create a row chart from multiple columns.dc.js berechnen Mittelwerte mit Multi-Spalte-rowchart

Allerdings muss ich die Durchschnitte der Daten erhalten. Normalerweise mache ich das über den Wert-Accessor, bin mir aber nicht sicher, wie ich das mit dieser Funktionalität machen soll.

function regroup(dim, cols) { 
    var _groupAll = dim.groupAll().reduce(
     function(p, v) { // add 
      cols.forEach(function(c) { 
       p[c] += v[c]; 
      }); 
      return p; 
     }, 
     function(p, v) { // remove 
      cols.forEach(function(c) { 
       p[c] -= v[c]; 
      }); 
      return p; 
     }, 
     function() { // init 
      var p = {}; 
      cols.forEach(function(c) { 
       p[c] = 0; 
      }); 
      return p; 
     }); 
    return { 
     all: function() { 
      // or _.pairs, anything to turn the object into an array 
      return d3.map(_groupAll.value()).entries(); 
     } 
    }; 
} 

Ich muss nur in der Lage sein, die aktuelle Summe jeder Spalte zu bekommen und es dividieren durch die Zählung der auf dem aktuellen Filterzustand basierend Reihen.

Der Code ist ähnlich dem in dieser Geige multi column fiddle

Antwort

1

Es scheint, dass der einfachste Weg, um die Anzahl der Datensätze zu erhalten, ist eine andere crossfilter.groupAll() mit der Standard-Reduktion zu erstellen:

var _recordCount = dim.groupAll(); 

Sie dann teilen jede Summe durch die aktuelle Zählung kann, wenn die Ergebnisse Dreh:

all: function() { 
     var count = _recordCount.value(); 
     // or _.pairs, anything to turn the object into an array 
     return d3.map(_groupAll.value()) 
      .entries().map(function(kv) { 
      return {key: kv.key, value: kv.value/count}; 
     }); 
    } 

Hier ist die aktualisierte Geige: http://jsfiddle.net/37uET/32/

+0

Hrrrrmmm, ich denke, dass sollte 'ndx.groupAll()' wie beschrieben. Endlos verwirren die Feinheiten, welche Objekte welche Filter beobachten. – Gordon