我需要从大型数据集中显示top20警报。
标准的dc.js工作得很好,在rowChart中使用.rowsCap(20)给了我top20。
我现在尝试在20个条目下过滤数据时删除零行。几个类似的已发布问题指向https://github.com/dc-js/dc.js/wiki/FAQ#filter-the-data-before-its-charted中的remove_empty_bins(),如果我删除了.rowsCap(20),它可以正常工作但是我将两者结合起来失败了。
使用dc.js-2.0.0-beta.1,它在第3415行失败,因为.top属性不适用于remove_empty_bins()生成的假组。
在定义假组时尝试添加.top(20)时出现相同的错误。
是否有一种简单的方法可以将remove_empty_bins(original_group)与.top()或.rowCaps()结合使用rowChart?
- 尼科
答案 0 :(得分:4)
将.top(n)
添加到假组中会有点复杂:
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);
}
};
}
效率并不完美,因为这会按排序顺序获取所有组,然后抛出除第一个n
之外的所有组,而crossfilter只能使用堆来提取第一个n
。但除非团体数量庞大,否则这无关紧要。
小提琴的工作叉:http://jsfiddle.net/gordonwoodhull/za8ksj45/3/
编辑:请注意,在dc.js 2.1.2中正在消除提供group.top()
的需要,因为该功能与chart.ordering()
重叠并导致令人困惑的错误。 (以及使这些数据预处理器难以编写。)