2017-04-03 3 views
0

저는 건물과 전력 사용에 대해 제가 일하는 데이터 세트를 가지고 있습니다.reductio 최대 금액

이 건물에는 전체 시간대에 걸쳐 간단한 합계로 집계 된 두 개의 집계가 있으며 작성한 집계 자료가 있습니다. 결국 다음과 같이 보이게됩니다.

var reducer = reductio(); 
// How much energy is used in the whole system 
reducer.value("energy").sum(function (d) { 
    return +d.Energy; 
}); 

위 작업은 훌륭합니다.

그러나 세 번째 집계를 사용하면 문제가 발생합니다. 모든 건물의 합이 가장 크다는 점을 알아야합니다. 나는 합계의 최대치와 그것이 일어난 시간이 필요하다. 이 반드시 가장 큰 전력 사용되지 않습니다,

reducer.value("power").sum(function (d) { 
    return +d.Power; 
}).max(function (d) { 
    return +d.Power; 
}).aliasProp({ 
    time: function (d, v) { 
     return v.Timestamp; 
    } 
}); 

을하지만 : 나는 썼다. 저는 이것이 어떤 개별 건물이 가장 많은 힘을 사용했던 시간과 합계를 반환한다고 확신합니다.

그래서 전력 값이 1, 1, 1, 15 인 경우 합계가 20, 5, 5, 5, 5 일 때 다른 순간이있을 수 있습니다. 20 내가 필요한거야.

최대 합계를 얻는 방법에 대한 손실이 있습니다. 어떤 충고?

답변

1

단지 다시 말하기 : 그룹 키는 일종의 시간주기이므로 시간에 따라 그룹화됩니다. 원하는 것은 전력 사용량이 가장 많은 기간 (그룹)을 찾는 것입니다.

이것이 내가 원하는 것이라면, 감속기에서는 이것을하지 않고 그룹을 정렬하면됩니다. 당신은 group.order 방법을 사용하여 그룹을 주문할 수 있습니다 https://github.com/crossfilter/crossfilter/wiki/API-Reference#group_order

// During group setup 
group.order(function(p) { return p.power.sum; }) 

// Later, when you want to grab the top power group 
group.top(1) 

Reductio의 max 집계는 당신에게 그룹 내에서 발생하는 최대 값을 제공해야합니다. 값이 1,1,1,15 인 그룹이 주어지면 15 값을 다시 얻게됩니다. 그것은 당신이 원하는 것이 아닌 것처럼 들립니다.

잘하면 알았습니다. 그렇지 않은 경우 의견을 말하십시오. 공공 장소에 장난감 데이터가있는 예제를 함께 넣을 수 있고 내가 원하는 것을 무엇을보고 싶은지 말할 수있는 곳이라면 도움을 줄 수 있어야합니다. 예를 기반으로

업데이트 :

그래서, 당신이 (예제의 설명에 따라) 원하는 것은 선택한 기간 내에 주어진 시간에 대한 최대 전력 사용량을 찾는 것입니다. 당신은 현재 필터의 최대 전력 사용 시간을 발견 할 때마다,

var timeDim = buildings.dimension(function(d) { return d.Timestamp }) 
var timeGrp = timeDim.group().reduceSum(function(d) { return d.Power }) 
var maxResults = timeGrp.top(1) 

그냥 timeGrp.top(1)를 호출하고 해당 그룹의 키가 최대 전력과 시간이 될 것입니다 : 그래서 다음을 수행 할 것입니다.

참고 : 차원의 필터가 해당 차원에 정의 된 그룹에 적용되지 않으므로 timeDim을 필터링하지 마십시오. 내가 그룹을 사용하지 않는 시간 범위를 설정 https://jsfiddle.net/esjewett/1o3robm3/1/

+0

, 내가 [필터 방법]를 사용 (https://github.com : 여기

는 콘솔에 최대 그룹에서 기록 갱신 JSFiddle입니다/crossfilter/crossfilter/wiki/API-Reference # dimension_filter)를 크로스 필터 치수에 적용합니다. 이 방법을 사용할 수 있습니까? –

+0

그래서 그룹화하고 있습니까? 미안, 그건 나에게 분명하지 않았다. 실용적인 예를 들려 주시겠습니까? 아마도 도움이 될 것입니다. –

+0

그룹화하지 않았습니다 (또는 오히려 차원에서 GroupAll()을 사용하고 있습니다). 내가 이해하기 때문에 그룹 전체에서 집계가 작동하지 않습니다. 데이터 집합이 있는데, 시간 범위를 기준으로 필터링 한 다음 값을 집계합니다. 원래 게시물의 예제로 사용 된 에너지는 필터링 된 범위 내에서 전체 데이터 세트의 합계가되어야합니다. 차원을 그룹화하면 각 그룹의 에너지 합계가 생기므로 수동으로 합계해야합니다. 이해하는데 잘못된 것이 있습니까? –