2016-07-06 8 views
0

各地域の人数の合計をクロスフィルタを使用して表示しようとしていますが、現在のコードではすべての地域の合計が表示されています。それでは、SQLクエリにcrossfilterで等価です:SELECT COUNT(*)GROUP DMAによるグループ別クロスフィルタ合計

これは

 //geography that is being hovered over, getting dma name and removing everything that is after the comma 
    sel_geog = layer.feature.properties.dma_1; 
    sel_geog = sel_geog.split(",")[0]; 
    console.log(sel_geog); 

    //crossfilter to get total number of people of each geography 
    var dmaDim = voter_data.dimension(function(d) {return d.dma == sel_geog}), 
    dma_grp = dmaDim.groupAll().reduceCount().value(); 
    console.log(dma_grp); 

答えて

1

これまでの私のコードですCrossfilterがあなたの方法で使用されることを意図していませんユーザーの操作ごとに新しいディメンションとグループを作成しています。インタラクションが行われる前にディメンションとグループを作成し、ユーザーのやりとりに基づいてフィルタリングするときに、ディメンションやグループをすばやく更新することを目的としています。

それはあなたのデータがどのように見えるか、あなたがやろうとしているが、あなたはおそらくあなたのdmaプロパティの寸法とグループを作成し、それに基づいてマップを構築したいのか何この質問から、本当にはっきりしていない:

var voter_data = crossfilter(my_data); 
var dmaDim = voter_data.dimension(function(d) { return d.dma; }); 
var dmaGroup = dmaDim.group(); 

この時点でdmaGroup.all()は、{ key: 'dmaKey', value: 10 }のようなオブジェクトの配列になります。ここで、10は、すべてのレコードの数です。d.dma === 'dmaKey'です。 Crossfilterとは別の方法で集約する方法はたくさんありますが、それが始まる可能性があります。