【发布时间】:2014-07-25 10:13:57
【问题描述】:
这是Splitting and grouping records into daily sets using d3.js and dc.js 的后续问题。
我有一个如下所示的数据集结构:
[
{"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},
...
]
我正在尝试使用crossfilter 创建一个条形图,以在 Y 轴上显示 总正常运行时间为 %,在 X 轴上显示 日期 .累积值是以秒为单位的值,鉴于一天中有(大致/通常)86400 秒,我可以很容易地获得单个设备的正常运行时间百分比:
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 函数以通过某种方式获取给定日期已添加到组中的对象数量来考虑这一点。
【问题讨论】:
标签: javascript d3.js dc.js crossfilter