我有一个包含聚合数据的表,这些数据在两列上分组并从假的交叉过滤器维度获取数据:
var groupedDimension = ndx.dimension(function(d) {return d.date + "/./" +d.Supplier})
.group().reduceSum(function (d) {return +d.total;});
但是,当它被交叉滤波时,我无法让表隐藏具有0值的行。例如,我试图将另一个虚假组织添加到虚拟维度上以摆脱0,但这会引发错误。
以下是jsfiddle:https://jsfiddle.net/zks59ndm/2/非常感谢任何帮助。
另外,有人知道为什么按升序对表进行排序会引发错误吗?
答案 0 :(得分:2)
这些实际上是相关的问题:数据表期望其dimension()
参数的交叉过滤器维度,而组和假组不提供数据表所需的所有方法。
查看浏览器调试控制台是诊断这些问题的好方法。例如,添加:
.dimension(remove_empty_bins(groupedDimension))
导致错误
Uncaught TypeError: _chart.dimension(...).top is not a function
所以它需要.top()
以及.all()
,很高兴有义务:
function remove_empty_bins(source_group) {
function non_zero_pred(d) {
return d.value != 0;
}
return {
all: function () {
return source_group.all().filter(non_zero_pred);
},
top: function(n) {
return source_group.top(Infinity)
.filter(non_zero_pred)
.slice(0, n);
}
};
}
这是from the FAQ ......我知道,它现在已成为一本沉重的书。
您几乎永远不必提供.top()
- 直到2.0。*仅限上限图表和数据表。从2.1。*开始,只需要数据表。
这带来了另一个问题:为什么d3.ascending
不起作用?
再次,调试控制台将显示方式:
Uncaught TypeError: _chart.dimension(...).bottom is not a function
是的,为了以升序显示它们,它想要获取最低的N个项目,所以现在它希望维度支持.bottom()
。 Here is the issue describing this problem,其结论是我们最好将其记录在某处或将其添加到大量常见问题解答中。
它还提供了另一种解决方法,其核心是:
bottom: function(N) {
return group.top(Infinity).slice(-N).reverse();
}
也就是说,按降序拉取所有数据,从数组中取出最后一个N,然后反转生成的数组。如果我们在.top(Infinity)
之后但在.slice(-n)
之前粘贴我们的非零过滤器,那么我们将会获得最强大的remove_empty_bins
过期!
function remove_empty_bins(source_group) {
function non_zero_pred(d) {
return d.value != 0;
}
return {
all: function () {
return source_group.all().filter(non_zero_pred);
},
top: function(n) {
return source_group.top(Infinity)
.filter(non_zero_pred)
.slice(0, n);
},
bottom: function(n) {
return source_group.top(Infinity)
.filter(non_zero_pred)
.slice(-n).reverse();
}
};
}