이것은 Splitting and grouping records into daily sets using d3.js and dc.js의 질문입니다. 나는 Y 축과 에 %로 총 가동 시간을 표시 crossfilter를 사용하여 막대 차트를 만들려고하고Crossfilter (d3js/dcjs) 그룹에 그룹 크기를 가져옵니다.
[
{"device":"device_1", "date": "01/01/2014", "cumulative": 2530},
{"device":"device_2", "date": "01/01/2014", "cumulative": 1234},
{"device":"device_1", "date": "01/02/2014", "cumulative": 456},
{"device":"device_2", "date": "01/02/2014", "cumulative": 198},
...
]
가 :
나는 다음과 같이 보이는 데이터 세트 구조 X 축에 날짜. 누적는 초 값이며 주어진 하루에 8만6천4백초 나는 아주 쉽게 하나의 장치에 대한 %의 가동 시간을 얻을 수 있습니다 (약/일반적으로)이 있다는 것을 :
d3.json("daily.json", function(error, json_data) {
...
json_data.forEach(function(d) {
d.dd = dateFormat.parse(d.date);
...
});
var das = crossfilter(json_data);
var all = das.groupAll();
// dimension by date
var dateDimension = das.dimension(function(d) {
return d.dd;
});
var uptimeDaysGroup = dateDimension.group().reduceSum(function(d) {
return Math.round(((86400 - d.cumulative)/86400) * 100);
});
...
}
되는 문제 (등을 할 수있는 원래 데이터 세트에서 확인하십시오) 하루에 두 개 이상의 장치가 있습니다. 장치의 수는 1 ~ 500K 사이에서 가능할 수 있으므로 uptimeDaysGroup
함수를 수정하여 주어진 날짜에 그룹에 추가 된 개체의 수를 얻음으로써이를 고려해야합니다.
감사합니다. 매우 유용합니다. 나는 그 문서들로부터 분명하지 않은 한 가지 질문만을 가지고있다. '{key :'date ', value : {count : 3, sum : 10}}'(.avg (false))와 같이 새로 축소 된 그룹을 만들었습니다. %를 얻으려면'sum'과'count'로 몇 가지 연산을 수행해야합니다. 일단 내가 해냈을 때 그룹을 '{key :'date ', value 21 :}'(어떻게 값이 계산 된 %입니까?)으로 변환합니까? – tarka
dc.js를 사용하고 있다면 차트의 valueAccessor에 계산을 정의하면됩니다. chart.valueAccessor (function (d) {return d.value.sum/d.value.count;}와 같습니다). 나는 그룹을 바꾸지 않을 것이다. –