dc js - 创建多列维度

时间:2014-02-18 04:57:15

标签: javascript d3.js crossfilter dc.js

我正在尝试使用dc.js汇总数据表,我正在使用dynaTable插件进行分页和其他选项。

通常在dc.js数据表中,我们可以获得数据中显示的整个数据。但我试图将数据汇总为数据透视表并在网络上显示,当选择发生时,数据表需要更改。

我是通过创建dimensiongroup来完成的,然后我将该组传递给dynaTable。它工作正常。

假设我有5列数据。我可以在它的任何一列上创建一个维度。

示例:我在第一列创建维度并对最后一列的值进行分组,比如它是A-20, B-42, C-50, D-20.。现在我的组包含了值和变量。

但我希望创建一个包含2-3列的维度。

示例:

A,AA,20
A,AB,10
A,AC,30
A,AD,80
B,BA,30
B,BB,40
B,BC,50
B,BD,90
C,CA,70
C,CB,20
C,CC,10
C,CD,80
D,DA,30
D,DB,40
D,DC,60
D,DD,80

是否可以在多个列上创建维度?

如果是这样,请帮助我。

这是小提琴:http://jsfiddle.net/3v68c/3/

3 个答案:

答案 0 :(得分:2)

如果您提供JSFiddle或类似的东西,我可以为您提供一个工作示例。但答案是肯定的,您可以根据需要定义一个维度。您只需要有一个未在任何值中使用的分隔符。假设您有列a,b和c,并且您将使用分隔符','。然后你:

var xfilter = crossfilter(data); 
var multidimension = xfilter.dimension(function (d) {   
  return d.a + ',' + d.b + ',' + d.c;
});

答案 1 :(得分:0)

我在http://jsfiddle.net/djmartin_umich/7R9wd/为此创建了一个jsfiddle。它可以使用一些清理,但它得到了重点。

1)使用连接字段创建维度(如Ethan建议的那样)。我创建了一个新维度,因为您可能希望图表使用仅日期维度。在这种情况下,我在连接之前将日期转换为字符串。

 var dateLableDim = ndx.dimension(function(d) { return parseDate(d3.time.day.floor(d.date)) + " - " + d.label });

2)将实际日期和标签存储为分组方法的一部分:

var dateDimTotal = dateDim.group().reduce(reduceAdd, reduceRemove, reduceInitial);

    function reduceAdd(p, v) {
        p.date = parseDate(d3.time.day.floor(v.date));
        p.label = v.label;
        ++p.count;
        p.total += v.value;
        if (p.count == 0) {
            p.average = 0;
        } else {
            p.average = p.total / p.count;
        };
        return p;
    }

3)请参阅dataTable(或dynaTable)中的那些字段:

var datatable = $('.table').dataTable({
        "aaData" : dateDimTotal.top(Infinity),
        "bDestroy": true,
        "aoColumns": [
            { "mData": function(d) { return d.value.label; }, "sDefaultContent": ""},                
            { "mData": function(d) { return d.value.date; }, "sDefaultContent": ""},
            { "mData": function(d) { return d.value.count; }, "sDefaultContent": ""},
            { "mData": function(d) { return d.value.average; }, "sDefaultContent": ""}
        ]
    })

答案 2 :(得分:0)

您还可以直接在dc.js中创建单个维度作为多个关键字段的数组,如果您查看dc.js Github上系列图表的简单特定图表示例,您可以看到这是如何完成的。< / p>