在汇总数据时将json网址传递给Google Charts? - Javascript

时间:2016-07-28 15:24:40

标签: javascript json google-visualization

我有一个json网址,我想用于我的谷歌图表 - 特别是我正在制作一个表格,如果“汇总结果”,即特定月份的数量。

我正在使用$ .getJson抓住我的json,但是我无法弄清楚如何在json上进行计算而不是循环。我可以在另一个文件中创建一个辅助函数,如果我可以执行for循环,那么可以进行整理吗?

由于

1 个答案:

答案 0 :(得分:0)

创建DataTable后 您可以使用Data Manipulation Methods groupaggregate数据

你可以使用标准的聚合函数......

  

google.visualization.data.avg
  google.visualization.data.count
  google.visualization.data.max
  google.visualization.data.min
  google.visualization.data.sum

或编写自己的函数,函数将从column提供的

中接收一组值

列定义:

{'column': 3, 'aggregation': doubleSum, 'type': 'number', 'label': 'double minutes'}

agg功能:

function doubleSum(values) {
  var groupValue = 0;
  values.forEach(function (v) {
    groupValue += (v * 2);
  });
  return groupValue;
}

请参阅以下工作代码段...

google.charts.load('current', {
  callback: function () {
    var data = new google.visualization.DataTable({
      cols: [
        {id: 'dat_ym', label: 'Start Date', type: 'date'},
        {id: 'user-id', label: 'User-Id', type: 'string'},
        {id: 'customer-id', label: 'Customer-Id', type: 'string'},
        {id: 's_minutes', label: 'minutes', type: 'number'}
      ],
      rows: [
        {c:[{v: new Date('2016, 01, 01')}, {v: '44836'}, {v: '67205'}, {v: 1122} ]},
        {c:[{v: new Date('2016, 01, 01')}, {v: '86495'}, {v: '67205'}, {v: 332} ]},
        {c:[{v: new Date('2016, 01, 01')}, {v: '44836'}, {v: '228626'}, {v: 90} ]},
        {c:[{v: new Date('2016, 01, 01')}, {v: '86495'}, {v: '228626'}, {v: 334} ]},
        {c:[{v: new Date('2016, 02, 01')}, {v: '44836'}, {v: '67205'}, {v: 554} ]},
        {c:[{v: new Date('2016, 02, 01')}, {v: '86495'}, {v: '67205'}, {v: 819} ]},
        {c:[{v: new Date('2016, 02, 01')}, {v: '44836'}, {v: '228626'}, {v: 420} ]},
        {c:[{v: new Date('2016, 02, 01')}, {v: '86495'}, {v: '228626'}, {v: 544} ]},
      ]
    });

    // group data by date, customer
    var grouped_data = google.visualization.data.group(
      data,
      [0, 2],
      [
        {'column': 3, 'aggregation': google.visualization.data.sum, 'type': 'number'},
        {'column': 3, 'aggregation': doubleSum, 'type': 'number', 'label': 'double minutes'}
      ]
    );

    // use custom aggregation
    function doubleSum(values) {
      var groupValue = 0;
      values.forEach(function (v) {
        groupValue += (v * 2);
      });
      return groupValue;
    }

    var chart = new google.visualization.Table(document.getElementById('chart_div'));
    chart.draw(grouped_data);
  },
  packages:['table']
});
<script src="https://www.gstatic.com/charts/loader.js"></script>
<div id="chart_div"></div>