2014-01-22 3 views
0

부분적으로 알 수없는 열이있는 교차 필터 데이터 구조가 있습니다.크로스 필터 그룹의 배열을 동적으로 구축하는 방법은 무엇입니까?

y 치수를 동적으로 켜고 끄는 복합 dc.js 차트를 그려야합니다.

그러므로 나는 모든 열 그룹의 배열을 구축하려고 :

this.data = crossfilter(this.rawData); 

this.idDimension = this.data.dimension(function (d) { 
    return d.id; 
}); 

for (var property in this.rawData[0]) { 
    this.groups[property] = this.idDimension.group().reduceSum(function (d) { 
     return d[property]; 
    }); 
} 

문제는 각 그룹이 루프의 마지막 속성의 컬럼에서 작동한다는 것입니다.

어떻게이를 피할 수 있습니까? 아니면 내가 원하는 것을 성취 할 수있는 더 나은 방법이 있습니까?

답변

1

문제는 가변 범위입니다.

내가 찾은 해결책

이런 식으로 작동합니다

var createPropertyGroup = function(dimension, property) { 
    return dimension.group().reduceSum(function (d) { 
      return d[property]; 
     }); 
} 

for (var property in this.rawData[0]) { 
    this.groups[property] = createPropertyGroup(this.idDimension, property); 
} 
0

이 귀하의 경우에 도움이되는지 잘 모르겠어요,하지만 당신은 또한 같은 그룹에 여러 속성을 추가 할 수 있습니다.

teamMemberGroup = teamMemberDimension.group().reduce(

    function (p, d) { 
     p.count++; 
     p.name = d.name; 
     p.salary = d.salary; 
     p.start_date = d.start_date; 
     return p; 
    }, 

    function (p, d) { 
     p.count--; 
     return p; 
    }, 

    function() { 
     return {count: 0, name: "", salary: 0, p.start_date = null}; 
    }); 

DCCharts valueAccessor위한 방법은 여러 가지 차트 y 값 사이를 구별하기 위해 사용될 수있다.

teamMemberChart 
     .dimension(teamMemberDimension) 
     .group(teamMemberGroup) 
     .valueAccessor(function (d) { 
     return d.value.count; 
    }) 

귀하의 경우에 따라,이 코드를 단순화 수 있으며 성능이 향상 될 수 있습니다.