2013-03-21 129 views
9

我试图通过求和(querytimes)来计算平均查询时间,然后将它们除以一个计数。我如何得到计数?Crossfilter平均组

var querytimeByMonthGroup = moveMonths.group().reduceSum(function (d) { 
    return d.querytime; 
}); 

var querytimeByMonthGroup = moveMonths.group().reduceSum(function (d) { 
    return d.querytime/d.count; ??? 
}); 

回答

2

我不熟悉crossfilter,只是刚开始玩它。可能有更好的方法,但是这提供了一种方法来计算用于分组的维数(我不是100%清楚地知道d.count指的是用于分组的维数,使用如果需要另一个分组)。

来自实例提供的代码在衍生:https://github.com/square/crossfilter/wiki/API-Reference

var payments = crossfilter([ 
    {date: "2011-11-14T16:17:54Z", quantity: 2, total: 190, tip: 100, type: "tab"}, 
    {date: "2011-11-14T16:20:19Z", quantity: 2, total: 190, tip: 100, type: "tab"}, 
    {date: "2011-11-14T16:28:54Z", quantity: 1, total: 300, tip: 200, type: "visa"}, 
    {date: "2011-11-14T16:30:43Z", quantity: 2, total: 90, tip: 0, type: "tab"}, 
    {date: "2011-11-14T16:48:46Z", quantity: 2, total: 90, tip: 0, type: "tab"}, 
    {date: "2011-11-14T16:53:41Z", quantity: 2, total: 90, tip: 0, type: "tab"}, 
    {date: "2011-11-14T16:54:06Z", quantity: 1, total: 100, tip: 0, type: "cash"}, 
    {date: "2011-11-14T16:58:03Z", quantity: 2, total: 90, tip: 0, type: "tab"}, 
    {date: "2011-11-14T17:07:21Z", quantity: 2, total: 90, tip: 0, type: "tab"}, 
    {date: "2011-11-14T17:22:59Z", quantity: 2, total: 90, tip: 0, type: "tab"}, 
    {date: "2011-11-14T17:25:45Z", quantity: 2, total: 200, tip: 0, type: "cash"}, 
    {date: "2011-11-14T17:29:52Z", quantity: 1, total: 200, tip: 100, type: "visa"} 
]); 

var paymentsByType = payments.dimension(function(d) { return d.type; }), 
     paymentVolumeByType = paymentsByType.group(), 
     counts = paymentVolumeByType.reduceCount().all(), 
     countByType = {}; 

// what is returned by all is a pseudo-array. An object that behaves like an array. 
// Trick to make it a proper array 
Array.prototype.slice.call(counts).forEach(function(d) { countByType[d.key] = d.value; }) 
var paymentVolumeByType = paymentVolumeByType.reduceSum(function(d, i) { 
    console.log(d.total, d.type, countByType[d.type]) 
    return d.total/countByType[d.type]; 
}); 
// accessing parentVolumeByType to cause the reduceSum function to be called 
var topTypes = paymentVolumeByType.top(1); 
+0

注释下面是实现这一目标的预期方式。 – 2015-01-12 00:35:40

11

我想一个更好的(和预期)的方式来做到这一点是通过定义自己减少功能(添加,删除,初始)。然后,您可以将运行总和,计数等存储在减少功能中,并在筛选器添加&删除组中的数据时适当调整它们。

与平均值,并与分&最大这样的例子中给出了这样类似的问题:Using Crossfilter, is it possible to track max/min when grouping?