reduce Add/Remove関数を使用して空のビンを削除する方法を探しています。 reduceを使用して空のビンを削除Add Remove関数が機能しない
は、私が「ポイント」の単純な合計を提供したいときjsfiddle here空のビンが削除されていますが、私は平均計算を使用してチャートにvalueAccessorを使用したくないとき。 、また、「形成」によって
{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"},
をそして、私の目的は、「マネージャ」で、平均「ゲームごとのポイント」を提供することである。
私のデータは以下のように設定されています。
私は機能の追加/削除減らす使用しています:
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,
};
}
と削除、空ビンコード:
function remove_empty_bins(source_group) {
return {
all:function() {
return source_group.all().filter(function(d) {
return d.value !=0;
});
}
};
}
マイグラフコード:
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"; });
をすべてが正常に動作します空のビンは別として、フィルターが適用されても除去されない。
私はチャートのvalueAccessorとremove_empty_bins関数を変更して問題を解決しようとしましたが、何も動作していないようです。
現時点での回避策は、グラフに「使用されていない」テキストを表示して、Managerが編成を使用していないことをユーザーに知らせることですが、空のビンを意図したとおりに削除することをお勧めします。
ご協力いただきありがとうございます。
直接質問には関係ありませんが、あなたのdcで 'd3.round((p.total/p.count)、2)'の計算を行うべきです。jsの 'valueAccessor'であり、Crossfilterグループではありません。グループを使って 'total'と' count'を追跡してください。どうして?たとえば、1000個のレコードがあり、500個のレコードを除外したとします。この計算は、平均を表示したときに一度だけ実行する必要があるときに、そのプロセス中に500回実行されます。 –
チップをありがとう、知っておいてよかった。私は変更を行います – Kevin