2016-06-30 4 views
0

Я работаю с crossfilter и dc.js, чтобы сделать приборную панель.Javascript рассчитать средние после groupement

Что я имею?

Давайте рассмотрим эти документы:

{ 
    "Mkt_Al": "AZA", 
    "Orig" : "PTH", 
    "Dest" : "GMP", 
    "Qsi" : 2 

} 

{ 
    "Mkt_Al": "AZA", // here the same triplet 
    "Orig" : "PTH", 
    "Dest" : "GMP", 
    "Qsi" : 3 

} 

{ 
    "Mkt_Al": "AZA", // here the same triplet 
    "Orig" : "PTH", 
    "Dest" : "GMP", 
    "Qsi" : 4 

} 

Что я хочу?

я должен сгруппировать документы по триплету (Mkt_Al, Orig, Dest), то следует вычислить среднее значение Qsi в этой группе.

{ 
     "Mkt_Al" : "AZA", 
     "Orig" : "PTH", 
     "Dest" : "GMP", 
     "Qsi"  : 2, 
     "Avg_Qsi" : 3 


    } 

    { 
     "Mkt_Al" : "AZA", // here the same triplet 
     "Orig" : "PTH", 
     "Dest" : "GMP", 
     "Qsi"  : 3, 
     "Avg_Qsi" : 3 
    } 

    { 
     "Mkt_Al" : "AZA", // here the same triplet 
     "Orig" : "PTH", 
     "Dest" : "GMP", 
     "Qsi"  : 4, 
     "Avg_Qsi" : 3 

    } 

Как это сделать?

У меня есть dataSet, и с dc.jsdatatable я попытался нарисовать таблицу данных с колонкой, которая countain это среднее:

{ 
       label: 'Average Qsi in this route', 
       format: function (d) 
    { 
       var total=0,avg=d.Qsi; 
       for (var i = 0; i < dataSet.length; i++) 
     { 
    if (dataSet[i].Mkt_Al == d.Mkt_Al 
    && dataSet[i].Orig == d.Orig 
    && dataSet[i].Dest == d.Dest) 
    { total = total+1; avg=(avg+dataSet[i].Qsi/total); } 

     } 
        return avg; 
    } 
} 

Пожалуйста, как можно достичь выше?

ответ

0

Я был очень близко от результата:

{ 
       label: 'Average Qsi in this route', 
       format: function (d) 
    { 
       var total=0,qsi=0; // our counters 
       for (var i = 0; i < dataSet.length; i++) 
     { 
    if (dataSet[i].Mkt_Al == d.Mkt_Al 
    && dataSet[i].Orig == d.Orig 
    && dataSet[i].Dest == d.Dest) 
    { total++ ; qsi =dataSet[i].Qsi+qsi; } // here total calculate the number of flights with these condition and qsi calculate the sum of documents's qsi which verify these results 

     } 

        return (qsi/total).toFixed(3); 
    } 
} 
Смежные вопросы