我想知道如何从 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 轴上该特定页面上的商品 ID 数量。
是否可以使用类似于最大和最小维度功能的东西来完成?
var minDate = dateDim.bottom(1)[0].page_id;
var maxDate = dateDim.top(1)[0].page_id;
如果描述不清楚,我们深表歉意。
谢谢
最佳答案
我会尝试至少为您指明正确的方向。
以下代码行将返回按 page_id
分组的 commodity_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
即可,因为您只关心总数每页商品数:
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
(它应该对应于最多的 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”即可转到 Nasdaq 示例。)
关于crossfilter - 返回 DC.js/Crossfilter 组中的最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22609954/