首页 > 解决方案 > 如何在 dc.js 中显示前 N 之前过滤 NaN?

问题描述

直截了当的问题,但我在任何地方都没有看到答案。基本上,我想过滤我的数据集以查找指标的 NaN,然后​​显示该指标的前 10 个最高组。我正在使用假组方法,但我似乎无法同时使用顶部和过滤器来制作条形图。

function remove_empty_bins(source_group) {
        return {
            all:function () {
                return source_group.top(10).filter(function(d) {
                    return ! isNaN(d.value.attendance_rate) ;
                });
            }
        };
    }

这段代码不起作用,因为我相信 top 只需要按键排序的前 10 个。如果我想按指标排序,我需要使用 chart.ordering(),但显然我不能使用它,因为我需要在执行 .top() 之前进行排序。

有任何想法吗?

标签: javascriptdc.jscrossfilter

解决方案


我认为您没有使用支持封顶的图表之一(饼图,行)。对于那些您应该能够使用假组过滤掉 NaN,然后​​将数据传入。

自 2.1.2 以来,dc.js没有在 group.top()内部用于封顶图表。top 和 ordering 之间的交互太混乱了。

我建议以与更改这些图表相同的方式解决您的问题。而不是尝试使用group.top()只是自己进行排序。然后很容易获取所有、过滤、排序和上限(未经测试):

function filter_sort_cap_bins(source_group) {
  return {
    all:function () {
      return source_group
        .all()
        .filter(d => !isNaN(d.value.attendance_rate))
        .sort((a,b) => b.value.attendance_rate - a.value.attendance_rate)
        .slice(0, 10);
    }
  };
}

也许从理论上讲,这会慢一些,因为它可以使用整套键,但我认为除非您有数千个键,否则您不会注意到任何区别。


推荐阅读