2015-01-13 3 views
0

필터를 그룹에 적용하면 필터링 된 변경 내용이 내지도 축소 그룹에 반영되지 않습니다. 나는 아래로 필터링 변경을 원하는 - 또는축소가 차원 필터링을 반영하지 않습니다.

에 내 데이터는 설정은 보통입니다 :

var rides = crossfilter(data), 
all = rides.groupAll(), 
gender = rides.dimension(function(d) { return d.gender; }), 
gendersAvg = gender.group().reduce(reduceAddGender, reduceRemoveGender, reduceInitialGender).all(), 

내지도는 다음과 같은 기능이 설정되어 감소 :

function reduceAddGender(p, v) { 
       p.count++; 
       return p; 
      } 
    function reduceRemoveGender(p, v) { 
       p.count--; 
       return p; 
    } 
    function reduceInitialGender() { 
       return { 
        count: 0 
       }; 
    } 

내가 좋아하는 내 필터링을 수행 이 :

gender.filter(function(d){ return d === parseInt(z[1]) || d === parseInt(z[0]) }); 

내 모든 치수는 하나를 제외하고 필터를 반영합니다. 필터링 후 GendersAvg의 값을 찾아 보면 해당 값이 필터를 반영하지 않습니다.

아이디어가 있으십니까? 평균을 두 번째로 호출해도 값은 변경되지 않습니다.

+0

크로스 필터 그룹 값은 그룹이 정의 된 차원 * 기타 *의 필터를 기반으로 계산됩니다. 그룹 차원의 필터는 무시됩니다. 고맙습니다 : https://github.com/square/crossfilter/wiki/API-Reference#dimension_group –

+0

감사합니다. 해결책이 있습니까? –

+1

원하는대로 다릅니다. 두 번째 측정 기준을 만들고 그 기준으로 필터를 적용하면 원래 측정 기준이 필터링되지만 동일한 측정 기준을 사용하는 경우 일반적으로 그 이유가 없습니다. 그룹. 이 경우 gendersAvg.all()을 사용하여 직접 원하는 그룹을 찾을 수도 있습니다. filter (function (d) {return d.key === parseInt (z [1]) || d.key == = parseInt (z [0])}); –

답변

0

마지막으로, 나는 모든 그룹이 그 값을 반영하도록 필 터링을 수행하여 별도의 차원을 작성하기로 결정했습니다.

duration = rides.dimension(function(d) { return d.timeonbike; }), 
    durations = duration.group(), 

    duration2 = rides.dimension(function(d) { return d.timeonbike; }), 
    durationsAvg = duration2.groupAll().reduce(reduceAddDuration, reduceRemoveDuration, reduceInitialDuration).value(),