返回DC.js / Crossfilter组中的最大值

时间:2014-03-24 12:51:40

标签: crossfilter dc.js

我想知道如何从dc.js组返回最大值。

例如:

  var dateDim = data.dimension(function(d) {return d.page_id;});
  var hits = dateDim.group().reduceSum(function(d) {return d.commodity_id;}); 

这将返回一个条形图,用于绘制X轴上的page_ids,以及Y轴上的commodity_ids。

但是,我希望它能在Y轴上返回该特定页面上的commodity_ids数量。

是否可以通过类似于最大和最小尺寸功能的东西来完成?

 var minDate = dateDim.bottom(1)[0].page_id;
 var maxDate = dateDim.top(1)[0].page_id;

如果描述不清楚,请道歉。

由于

1 个答案:

答案 0 :(得分:2)

我会尝试至少指出你正确的方向。

以下代码行将返回按commodity_id分组的page_id的总和:

    var dateDim = data.dimension(function(d) {return d.page_id;});
    var hits = dateDim.group().reduceSum(function(d){return d.commodity_id;});

如果某个网页包含以下commodity_id的三种商品:[1,2,5]  reduceSum将返回该页面的值8(1 + 2 + 5 = 8);它会添加每个后续commodity_id,直到它到达页面末尾。

假设数据集中的每个条目都包含必须计算的commodity_id,您只需分组并使用reduceCount就可以逃脱,因为您只关心每页的商品总数: / p>

    var hits = dateDim.group().reduceCount();

这将计算每个page_id在数据库中出现的次数,这与该页面上commodity_id的数量相对应。

如果您想查看此分组的结果,可以使用:

    hits.all();

这将返回一个对象数组此数组中的每个对象都包含keyvaluekey对应page_idvalue对应于page_id在数据集中出现的次数。

此时,如果您希望获得具有最大值的page_id,则可以使用top()功能。 (group()包含一个top()函数,就像dimension()一样,它返回计数最多的组。)以下是如何访问最page_id的{​​{1}}数据库中的条目(应该对应于commodity_id的最大数量)和相应条目的数量:

    var page_id_with_most_entries = hits.top(1)[0].key;
    var number_of_entries = hits.top(1)[0].value;

如果您还没有,请查看crossfilter.js API wiki:

https://github.com/square/crossfilter/wiki/API-Reference

我也发现DC.js页面上显示的DC.js Nasdaq示例的带注释的源代码很有用:

http://nickqizhu.github.io/dc.js/docs/stock.html

(只需从链接中删除“docs / stock.html”即可转到纳斯达克示例。)