2017-04-25 4 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()です。私は大括弧で試してみました。誰かが実例を知っていますか?私はすべての行にわたって1つの出力をしたい。

私の削減機能は完全ではなく、複雑に見えます。ディメンションを小さくすると問題なく動作しますが、実際には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.topまたはgroup.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/

関連する問題