我想知道如何从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;
如果描述不清楚,请道歉。
由于
答案 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();
这将返回一个对象数组此数组中的每个对象都包含key
和value
。 key
对应page_id
,value
对应于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”即可转到纳斯达克示例。)