2013-03-21 34 views
9

Tôi đang cố gắng tính thời gian truy vấn trung bình bằng tổng (số lần truy vấn) và sau đó chia chúng cho một số. Làm cách nào để tôi có được số đếm?Nhóm trung gian Crossfilter

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

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

Trả lời

2

Tôi không quen với bộ lọc chéo, chỉ mới bắt đầu chơi với nó. Có thể có cách tốt hơn, nhưng điều này cung cấp cách tính số thứ nguyên được sử dụng cho nhóm (tôi không rõ 100% rằng d.count đề cập đến số lượng thứ nguyên được sử dụng cho nhóm, sử dụng một nhóm khác nếu cần).

Ví dụ có nguồn gốc từ các mã có sẵn tại địa chỉ: 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

Các bình luận dưới đây là cách dự định để đạt được điều này. –

11

Tôi nghĩ rằng một cách tốt hơn (và các dự định) để làm điều này là bằng cách định nghĩa làm giảm chức năng của riêng bạn (thêm, xóa, ban đầu). Sau đó, bạn có thể lưu trữ số tiền đang chạy của mình, đếm vv trong các hàm giảm và điều chỉnh chúng khi thích hợp khi các bộ lọc thêm & xóa dữ liệu khỏi nhóm.

Một ví dụ để làm điều này với mức trung bình và với min & max được đưa ra trong câu hỏi tương tự này: Using Crossfilter, is it possible to track max/min when grouping?

Các vấn đề liên quan