dc.js rowChart topN没有零

时间:2015-01-26 05:24:17

标签: dc.js

我需要从大型数据集中显示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?

- 尼科

1 个答案:

答案 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()重叠并导致令人困惑的错误。 (以及使这些数据预处理器难以编写。)