2013-03-21 16 views
9

Ortalama sorgu süresini toplamla (query zamanları) hesaplamaya ve bunları bir sayımla bölmeye çalışıyorum. Sayımı nasıl alabilirim?Çapraz filtre ortalama grubu

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

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

cevap

2

Çapraz filtrelere aşina değilim, sadece oynamaya yeni başladım. Daha iyi bir yol olabilir, ancak bu, gruplama için kullanılan boyut (lar) için sayımı hesaplamanın bir yolunu sağlar (d.count'un, gruplama için kullanılan boyutun sayısını ifade ettiği anlamına gelmediği% 100 açık değildir. gerekirse başka bir gruplama. mevcut kod türetilen

Örnek: 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

comment aşağıda bunu başarmak için hedeflenen yoludur. –

11

Bunu yapmak için daha iyi bir (ve amaçlanan) yolu kendi azaltmak fonksiyonları (kaldırmak, başlangıçtaki ekleyin) tanımlayarak olduğunu düşünüyorum. Ardından, çalışanların sayısını, sayma vb. Işlevlerini küçültme işlevlerinde saklayabilir ve filtreleri & gruptan veri eklediğinde uygun şekilde ayarlayabilirsiniz.

ortalamaları ile dk & maks Bunu yapmanın bir örneği

bu benzer soruya verilmiştir: Using Crossfilter, is it possible to track max/min when grouping?