2017-04-25 40 views
1

這種感覺應該很容易:/DC.js,crossfilter - 減少運行()上groupAll()

的crossfilter API說,我可以運行在一個groupAll減少: https://github.com/square/crossfilter/wiki/API-Reference#groupAll_reduce

但我不能讓它工作。我試過facts.groupAll()其中var facts = crossfilter(data);我試過all.reduce()var all = facts.groupAll()。我嘗試過使用和不使用括號,並以Google搜索爲例。有誰知道一個工作的例子?我希望所有行都有單個輸出。

我意識到我的減少功能不完整,看起來很複雜。它可以很好地減少維度,但給groupAll事實上未定義。

感謝

var accumGrp = facts.groupAll().reduce(
    function(p,v) { 
     for (var i=0; i<supplierFields[0].length; i++) { 
     if (!p.population[supplierFields[0][i]]) { p.population[supplierFields[0][i]] = []; } 
     p.population[supplierFields[0][i]].push(v[supplierFields[0][i]+'_l']); 
     } 
     return p; 
    }, 
    function(p,v) { return p; }, 
    function() { 
     var obj = {}; 
     obj.population = {}; 
     obj.highlight = {}; 
     return obj; 
    } 
); 

    print_filter('accumGrp'); 

回答

1

這裏你基本的問題可能是,你需要調用groupAll.value()以執行組聚合,而常規組在定義或數據載荷的時間計算聚合,而不是當你查詢他們與group.topgroup.all

它看起來像你的基本做法是正確的,否則,我什麼也看不見print_filter呢,所以這只是一個猜測,但嘗試在你的腳本的末尾呼籲console.log(accumGrp.value()),看看它是否工作。

如果不是,這裏是一個簡短的工作示例參考:

var data = [1,2,3,4] 

var cf = crossfilter(data) 
var grp = cf.groupAll().reduce(
    function(p, d) { return p + d }, 
    function(p, d) { return p - d }, 
    function() { return 0 } 
) 

console.log(grp.value()) 

這將打印10。這裏有一個可用的JSFiddle,你可以嘗試一些事情(用一些更多的控制語句來幫助你看看發生了什麼):https://jsfiddle.net/esjewett/39xgn5ah/1/