【问题标题】:Crossfilter can't filter one dimension by another交叉过滤器无法过滤一个维度
【发布时间】:2014-02-17 19:23:18
【问题描述】:

jsFiddle of the issue

我正在尝试在 Crossfilter 中过滤两个维度。我有一个重复给定对象的数据数组:

{
    "bioguide_id" : "O000167",
    "first_name" : "Barack",
    "last_name" : "Obama",
    "party" : "Democrat",
    "religion" : "United Church of Christ",
    "pac_id" : "C00404145",
    "pac_name" : "Mendocino County Democratic Central Committee",
    "contribution_count" : 4,
    "contribution_sum" : 1264,
    "congress" : 110
}

我有以下查询可以完美地交叉过滤:

var contributions = data.dimension(function(c) { return c.contribution_sum; });

contributions.top(3).forEach(function(p, i) {
    console.log(p.pac_name + " (" + p.congress + ")" + ": $" + p.contribution_sum);
});

但是,我怎样才能从 Y congress 中获得前 X contribution_sum 我尝试了以下方法无济于事:

var congress = data.dimension(function(c) { return c.congress; });

congress.filter(111).group().order(function(c) { return c.contribution_sum; }).top(3).forEach(function(p, i) {
    console.log(p.pac_name + " (" + p.congress + ")" + ": $" + p.contribution_sum);
});

有什么想法吗?

【问题讨论】:

    标签: javascript jquery d3.js crossfilter


    【解决方案1】:

    我相信你会想要过滤你的“congress”维度,然后询问你的“contribution_sum”维度的顶级成员,例如:

    var congress = data.dimension(function(c) { return +c.congress; });
    var contributions = data.dimension(function(c) { return +c.contribution_sum; });
    
    congress.filter(111);
    
    contributions.top(3).forEach(function(p, i) {
        console.log(p.pac_name + " (" + p.congress + ")" + ": $" + p.contribution_sum);
    });
    

    完整的 JSFiddle:http://jsfiddle.net/eWr8Z/5/

    【讨论】:

    • 混蛋!你说得对......过滤器适用于全球所有维度,我无法理解这个概念。你拓宽了我对 Crossfilter 的理解,现在我永远感激不尽。你摇滚好先生!
    • 是的,适用于所有维度和所有组。您在维度上形成组(congress.group() 来计算每个会议的记录 - 使用 reduceSum 来汇总记录,但请参阅 API 文档)。但是您不需要用于顶部/底部查询的组。干杯:-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-11
    • 2012-10-05
    • 2019-07-18
    • 2012-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多