我正在尝试使用dc.js
汇总数据表,我正在使用dynaTable
插件进行分页和其他选项。
通常在dc.js
数据表中,我们可以获得数据中显示的整个数据。但我试图将数据汇总为数据透视表并在网络上显示,当选择发生时,数据表需要更改。
我是通过创建dimension
和group
来完成的,然后我将该组传递给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
是否可以在多个列上创建维度?
如果是这样,请帮助我。
答案 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>