在下面的示例中,我試圖通過Respond_Id
的唯一出現次數進行求和。例如。在這種情況下,應該總共爲3
,"Respond_Id"
爲258,261
和345
。Crossfilter和DC.js:縮小到唯一編號
這是我的數據:
{"Respond_Id":258,"Gender":"Female","Age":"18-21","Answer":424},
{"Respond_Id":258,"Gender":"Female","Age":"18-21","Answer":428},
{"Respond_Id":261,"Gender":"Male","Age":"22-26", "Answer":427},
{"Respond_Id":261,"Gender":"Male","Age":"22-26", "Answer":432},
{"Respond_Id":345,"Gender":"Female","Age":"27-30","Answer":424},
{"Respond_Id":345,"Gender":"Female","Age":"27-30","Answer":425},
{"Respond_Id":345,"Gender":"Female","Age":"27-30","Answer":433},
我知道我應該使用組減少對於這一點,所以我想(改編自一個例子):
var ntotal = answerDim.group().reduce(
function(p, d) {
if(d.Respond_Id in p.Respond_Ids){
p.Respond_Ids[d.Respond_Id]++;
}
else {
p.Respond_Ids[d.Respond_Id] = 1;
p.RespondCount++;
}
return p;
},
function (p, d) {
p.Respond_Ids[d.Respond_Id]--;
if(p.Respond_Ids[d.Respond_Id] === 0){
delete p.Respond_Ids[d.Respond_Id];
p.RespondCount--;
}
return p;
},
function() {
return {
RespondCount: 0,
Respond_Ids: {}
};
}
);
然後:
numberDisplay
.group(ntotal)
.valueAccessor(function(d){ return d.value.RespondCount; });
dc.renderAll();
但似乎不工作。有人知道如何使其工作?謝謝
在我看來,這應該基本上工作。你得到了什麼樣的錯誤,你能提供一個完整的工作代碼的例子嗎?如果你不想自己擺弄reducer,你可能也想看看Reductio作爲一個選項:https://github.com/crossfilter/reductio#aggregations-standard-aggregations-exception-aggregation –
謝謝你的回答。在valueAccessor中記錄d時得到的是:{「key」:433,「value」:{「RespondCount」:1,「Respond_Ids」:{「345」:1}}} – road
您需要共享與我們完整的例子。我猜想你的維度定義和組定義是相互衝突的,但是因爲你沒有分享你的維度定義,所以我無法確定。 –