crossfilter.js:按月分组数据

时间:2015-09-23 17:42:10

标签: javascript d3.js crossfilter

我有一个对象数组,每个对象都有Created字段(类型为Date)。使用crossfilter.js,我想按月对这些数据进行分组。但它似乎没有正常工作。这是代码:

要生成示例数据,我正在使用d3's time实用程序:

var now = new Date();
var yearAgo = d3.time.year.offset(now, -1);
var after6months = d3.time.month.offset(now, 6);

// data[] will contain one object for each month in the range
var data = d3.time.month.range(yearAgo, after6months).map(function(date) {
    return {
        "Created": date,
        "Type": 'solid',
        "State": "Down"
    };
});

var cf = crossfilter(data);
var byDate = cf.dimension(function(d) { return d.Created; });

// here I want to group by month and year, eg "October 2015"
var groupByMonth = byDate.group(function(date) { return d3.time.format("%B %Y")(date); });
var grouped = groupByMonth.all();

我希望grouped包含该范围内每个月的元素(1。5年,它将是18),但我得到了这个:

"[ { "key": "October 2014", "value": 11 }, { "key": "September 2015", "value": 7 } ]"

Crossfilter将所有记录分组在两组之下,不是所希望的18。 我在这里做错了吗?

此代码生成我需要的内容,但我必须从crossfilter分组中获取它:

var desired = d3.nest()
    .key(function(d) { return d3.time.format("%B %Y")(d.Created)})
    .rollup(function(group) { return group.length; })
    .entries(data);

这是 jsFiddle http://jsfiddle.net/xxjpusa7/5

一起玩

1 个答案:

答案 0 :(得分:3)

这是一个更新的小提琴,可以完成我认为您希望它做的事情。

https://jsfiddle.net/xxjpusa7/4/

var now = new Date();
var yearAgo = d3.time.year.offset(now, -1);
var after6months = d3.time.month.offset(now, 6);

// data[] will contain one object for each month in the range
var data = d3.time.month.range(yearAgo, after6months).map(function (date) {
    return {
        "Created": date,
        "Type": 'solid',
        "State": "Down"
    };
});

var cf = crossfilter(data);
var dateFormat = d3.time.format("%B %Y");

var byDate = cf.dimension(function (d) {
     return dateFormat(d.Created);
});

// Groups using the identity function
var groupByMonth = byDate.group();

var grouped = groupByMonth.all();

d3.select("div").text(JSON.stringify(grouped));

基本上,维度已更改为按格式化日期索引数据。 byDate.group();负责计算维度中的唯一索引(在本例中为month year)。它可以将组视为map-reduce而不是实际分组。