2014-10-25 2 views
0

I이 닮은 crossfilter에 CSV 데이터를 가지고다시 그리기 DC JS 차트

후드, 방, 타임 스탬프, 가격, 점유

SF, 2- 브롬, 1분의 9 /14,3950,.94

내 데이터를로드 한 후 내 필터 설정 : 내 차트의

var ndx = crossfilter(data); 
var all = ndx.groupAll(); 

var price = ndx.dimension(function(d) { 
    return d.price; 
}); 

var occupancy = ndx.dimension(function(d) { 
    return d.occupancy 
}) 

var roomType = ndx.dimension(function (d) { 
    var room = d.rooms_clean; 
    return room; 
}); 

var dateDimension = ndx.dimension(function (d) { 
    return d.day; 
    });      

var hood = ndx.dimension(function (d) { //dimensions for choropleth 
    return d.hood; 
}); 

dataUnit = "price" 
var roomAll = roomType.group().reduce(reduceAddAvg(dataUnit), reduceRemoveAvg(dataUnit), reduceInitAvg) // create vector with stats by room type 
var hoodAll = hood.group().reduce(reduceAddAvg(dataUnit), reduceRemoveAvg(dataUnit), reduceInitAvg) // create vector with stats by hood 
var dateAll = dateDimension.group().reduce(reduceAddAvg(dataUnit), reduceRemoveAvg(dataUnit), reduceInitAvg) // create vector with stats by date 
var roomGroup = roomType.group();  

모두가 dataUnit = "가격"을 기반으로

을. 페이지 설정 dataUnit = "occupancy"를 다시로드 할 수 있으며 차트가 올바르게 렌더링됩니다.

사용자가 버튼을 클릭하고 새 크로스 필터를 페이지에 렌더링 할 수있게하려고합니다. Jquery로 모든 치수를 처리하고 새 치수를 작성하려고 시도했습니다.

$('#occupancy').click(function() { 

    roomType.dispose() 
    hood.dispose() 
    dateDimension.dispose() 

    dataUnit = "occupancy" 
    var roomAll = roomType.group().reduce(reduceAddAvg(dataUnit), reduceRemoveAvg(dataUnit), reduceInitAvg) // create vector with stats by room type 
    var hoodAll = hood.group().reduce(reduceAddAvg(dataUnit), reduceRemoveAvg(dataUnit), reduceInitAvg) // create vector with stats by hood 
    var dateAll = dateDimension.group().reduce(reduceAddAvg(dataUnit), reduceRemoveAvg(dataUnit), reduceInitAvg) // create vector with stats by date 
    var roomGroup = roomType.group();  

    dc.redrawAll();    
    return false; 
}) 

그러나지도가 업데이트되지 않습니다. 페이지를 다시로드하지 않고 모든 교차 필터에서 사용하는 치수/데이터를 어떻게 전환 할 수 있습니까?

답변

0

크기를 그대로두고 새 계산을 선택할 때마다 그룹을 바꾸는 것처럼 보입니다.

인용 부호는 처분하고 있지만 치수를 재현하지는 않습니다. 새로운 그룹을 만들고 있지만 이전 그룹을 삭제하지는 않습니다. 치수를 다시 작성하려는 것처럼 보이지 않으므로 호출을 처리하는 것이 좋지 않을 수 있습니다.

차트에 새 그룹을 지정해야합니다. crossfilter 객체를 만드는 것만으로 dc.js가 그들에 대해 알 수 없습니다. (동일한 변수 나 변수 이름을 사용한다고해서 그 중 하나를 선택하지는 않습니다).

각 차트 및 다시 만들어진 그룹에 대해 chart.group(...)을 수행하면 업데이트가 표시됩니다. 아마도 차원뿐만 아니라 이전 그룹도 처분해야합니다.