Ich bin auf der Suche nach einer Lösung, wie ich leere Bins entfernen kann, wenn Sie eine Funktion zum Hinzufügen/Entfernen reduzieren.entfernen leere Bins mit reduzieren Add Remove Funktion funktioniert nicht
Ich habe ein jsfiddle here
leeren Behälter entfernt werden, wenn ich eine einfache Summe von ‚Punkte‘ zur Verfügung stellen möchten, aber nicht, wenn ich will eine durchschnittliche Berechnung verwenden und die valueAccessor in den Charts mit.
sind meine Daten wie folgt festgelegt:
{Season:"2016/17",
Manager:"Alan Curtis",
Points:1,
Formation:"4231",
date:"01 February 2017"},
{Season:"2016/17",
Manager:"Paul Clement",
Points:1,
Formation:"442",
date:"01 February 2018"},
{Season:"2015/16",
Manager:"Paul Clement",
Points:3,
Formation:"433",
date:"01 May 2017"},
Und mein Ziel ist es durchschnittlich ein ‚Punkte pro Spiel‘ zu schaffen, mit ‚Manager‘, und auch die von ‚Bildung‘.
ich reduzieren bin mit Hinzufügen/Entfernen Funktionen:
function reduceAdd(p, v) {
p.total += v.Points;
++p.count;
p.ppg = d3.round((p.total/p.count), 2);
return p;
}
function reduceRemove(p, v) {
p.total -= v.Points;
--p.count;
p.ppg = d3.round((p.total/p.count), 2);
return p;
}
function reduceInitial() {
return {
total: 0,
count: 0,
ppg: 0,
};
}
und das Entfernen leerer Behälter Code:
function remove_empty_bins(source_group) {
return {
all:function() {
return source_group.all().filter(function(d) {
return d.value !=0;
});
}
};
}
Meine Charts Code:
managerChart
.dimension(dimManager)
.group(ManagerPPGGroup)
.ordering(function(p) { return -p.value.ppg })
.renderLabel(false)
.othersGrouper(null)
.renderTitle(false)
.renderTitleLabel(true)
.margins({top: 10, left: 10, right: 20, bottom: 80})
.valueAccessor(function(p)
{ if (p.value.ppg >0) {
return p.value.ppg } else { return "n/a"}; });
formationChart
.dimension(dimFormation)
.group(filteredFormationPPGGroup)
.ordering(function(p) { return -p.value.ppg })
.renderLabel(false)
.cap(10)
.elasticX(true)
.renderTitle(false)
.renderTitleLabel(true)
.margins({top: 10, left: 10, right: 20, bottom: 80})
.valueAccessor(function(p) { return p.value.count > 0 ? p.value.ppg : "not used"; });
Alles funktioniert gut , abgesehen von leeren Behältern, werden nicht entfernt, wenn ein Filter angewendet wird.
Ich habe versucht, alle möglichen Dinge zu versuchen, das Problem zu beheben, ändern Sie den WertAccessor der Diagramme und die Funktion remove_empty_bins, aber nichts scheint zu funktionieren.
Meine aktuelle Problemumgehung ist die Bereitstellung von "nicht verwendetem" Text in der Grafik, damit Benutzer wissen, dass der Manager die Formation nicht verwendet hat, aber ich bevorzuge es, leere Bins wie vorgesehen zu entfernen.
Vielen Dank im Voraus für Ihre Hilfe.
nicht direkt auf die Frage bezogen, aber Sie sollten in Ihrem dc des 'd3.round ((p.total/p.count), 2)' Berechnung tun.js 'valueAccessor' und nicht in der Crossfilter-Gruppe. Verwenden Sie einfach die Gruppe, um den "Gesamtwert" und "Anzahl" zu verfolgen. Warum? Angenommen, Sie haben 1000 Datensätze und filtern 500 davon heraus. Diese Berechnung wird während dieses Prozesses 500 Mal ausgeführt, wenn Sie nur einmal ausgeführt werden müssen, wenn Sie den Durchschnitt anzeigen. –
Danke für den Tipp, gut zu wissen. Ich werde die Änderung vornehmen – Kevin