2016-02-18 20 views
7

Obecnie próbuję wygenerować raport za pomocą wykresów Google.Pętla Wielowymiarowa macierz do generowania wielowymiarowych macierzy dla wykresów Google

ja ciągnąc informacji z MySQL DB w moim kodu po stronie serwera node.js i korzystania socket.io przekazać go stronie klienta w wielowymiarowej tablicy, która wygląda następująco:

[ [ 'ANSWERED', '477', 728 ],[ 'BUSY', '477', 48 ],[ 'NO ANSWER', '477', 277 ],[ 'ANSWERED', '478', 88 ],[ 'BUSY', '478', 24 ],[ 'NO ANSWER', '478', 56 ] ] 

So ja obecnie przelotowego tej tablicy i próbując wyciągnąć wartości tak jest w następującym formacie przypadku wykresów Google:

[ ['477', 728, 48, 277 ],[ '478',88, 24, 56]] 

nie mogę go do tego formatu i jestem stara się znaleźć sposoby, aby to zrobić, więc wtedy mogę wstawić te informacje do mojego multidimensi onal array dla tabel Google i wygeneruj raport.

Obecny kod mam tak daleko jest:

socket.on("SQL", function (valueArr) { 
     google.charts.load('current', { 
      packages : ['corechart'] 
     }); 
     google.charts.setOnLoadCallback(drawMaterial); 
     function drawMaterial() { 
      var data = []; 
      var Header = ['Call Disposition', 'Answered']; 
      data.push(Header); 
      for (i in valueArr) { 
       var index = 0; 
       var foundIndex = false; 
       var agent = valueArr[i][1]; 
       var callcount = valueArr[i][2]; 
       for (var i in data) { 
        var dataElem = data[i]; 
        if (dataElem[0] === agent) { 
         index = i; 
         foundIndex = true; 
         data[index][i] = callcount; 
        } 
       } 
       if (foundIndex === false) { 
        var chanar = new Array(agent); 
        data.push(chanar); 
       } 
      } 

      console.log(data); 

      var options = { 
       title : 'Call Disposition', 
       hAxis : { 
        title : 'Agents', 
        minValue : 0, 
       }, 
       vAxis : { 
        title : 'Disposition Number' 
       }, 
       isStacked : true 
      }; 
      var chartdata = new google.visualization.arrayToDataTable(data); 
      var material = new google.visualization.ColumnChart(document.getElementById('chart')); 
      material.draw(chartdata, options); 
     } 
    }); 

które wyjścia następującą tablicę wielowymiarową:

[['Call Disposition', 'Answered'],['477',277 ]] 

Chodzi o to muszę wielowymiarową tablicę danych, aby ostatecznie wyglądać (Uwaga nagłówku może zostać zmieniony w kodzie, właśnie ze względu na obecną ilość wartości, z którymi pracuję, aby go zbudować):

[['Call Disposition', 'Answered','Busy','Failed'],['477', 728, 48, 277 ],[ '478',88, 24, 56]] 

Odpowiedz

2

Edytuj: Ta funkcja korzysta z funkcji i zmiennej tymczasowej do zbierania wartości. Co trzeci element, nowa tablica jest wypychana do tablicy wyników.

function x(data) { 
 
    var r = [], temp; 
 
    data.forEach(function (a, i) { 
 
     if (!(i % 3)) { 
 
      temp = [a[1]]; 
 
      r.push(temp); 
 
     } 
 
     temp.push(a[2]); 
 
    }); 
 
    return r; 
 
} 
 

 
var data = [['ANSWERED', '477', 728], ['BUSY', '477', 48], ['NO ANSWER', '477', 277], ['ANSWERED', '478', 88], ['BUSY', '478', 24], ['NO ANSWER', '478', 56]], 
 
    result = [['Call Disposition', 'Answered', 'Busy', 'Failed']].concat(x(data)); 
 

 
document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');

+0

Czy Format tablicy musi tak być, co określono w danych, układ mam to '[[odparł ', '477', 728], [ 'busy' "477", 48], ["NIE MA ODPOWIEDZI", "477", 277], ["ODPOWIEDZI", "478", 88], ["BUSY", "478", 24], ["BRAK ODPOWIEDZI" , '478', 56]] 'jak zrobiłbyś to w tym formacie? Ponieważ nie są oddzielnymi tablicami MD? Wysłałem błędną tablicę w początkowym pytaniu – Studento919

+1

Dziękuję, że to świetne rozwiązanie. – Studento919