我有一个包含部分未知列的交叉过滤数据结构。
我想绘制一个复合dc.js图表,能够动态打开和关闭y维度。
因此,我尝试为每列构建一个组数组:
this.data = crossfilter(this.rawData);
this.idDimension = this.data.dimension(function (d) {
return d.id;
});
for (var property in this.rawData[0]) {
this.groups[property] = this.idDimension.group().reduceSum(function (d) {
return d[property];
});
}
问题是每个组都在循环中最后一个属性的列上工作。
我该怎样绕过这个?或者有更好的方法来实现我想要的目标吗?
答案 0 :(得分:1)
问题在于变量范围。
我找到的解决方案就是这样:
var createPropertyGroup = function(dimension, property) {
return dimension.group().reduceSum(function (d) {
return d[property];
});
}
for (var property in this.rawData[0]) {
this.groups[property] = createPropertyGroup(this.idDimension, property);
}
答案 1 :(得分:0)
我不确定这对您的情况是否有帮助,但您也可以将多个属性添加到同一组中。
teamMemberGroup = teamMemberDimension.group().reduce(
function (p, d) {
p.count++;
p.name = d.name;
p.salary = d.salary;
p.start_date = d.start_date;
return p;
},
function (p, d) {
p.count--;
return p;
},
function () {
return {count: 0, name: "", salary: 0, p.start_date = null};
});
DCCharts的valueAccessor方法可用于区分不同图表的不同y值。
teamMemberChart
.dimension(teamMemberDimension)
.group(teamMemberGroup)
.valueAccessor(function (d) {
return d.value.count;
})
根据您的情况,这可能有助于简化您的代码,而可能会提高性能。