查询无效:Google查询语言

时间:2016-11-16 18:10:12

标签: google-visualization google-chartwrapper google-query-language

我尝试通过计算每个值,使用Google可视化API从单列数据创建饼图,但我不断收到以下错误消息:

Invalid query: SELECT_WITH_AND_WITHOUT_AGG: C

信息

我的电子表格可在此处找到:https://docs.google.com/spreadsheets/d/1lmmpJs2Bz3EfQWExB4KXq_uJWoLlq1PMCahy6w4ipcE/edit#gid=942634171

我想要做的是创建一个饼图,计算“你来自哪个街区”中的唯一值?'列和绘制它们的相对比例。

列本身可以在这里看到:

Picture of spreadsheet column

所以我想把这一列用来创建一个表格,如下所示:

示例表

Corona                     2
Sunnyside                  3
Elmhurst                   4

等等。然后使用字符串/数字组合填充饼图。

使用常规SQL,您可以执行SELECT Column,COUNT(Column)GROUP BY Column,因此我假设类似的东西适用于GQL。

到目前为止,这些是我尝试过的一些问题:

QUERIES:

'SELECT COUNT(C) GROUP BY C'
'SELECT C, COUNT(C) GROUP BY C'
'SELECT C, COUNT(C) PIVOT C

但这些都没有奏效。

我也在控制台中收到此错误消息:

错误消息:

Console message

以下我使用的脚本与我的问题相关:

SCRIPT

// Load the Visualization API and the controls package.
  google.charts.load('current', {'packages':['corechart', 'controls']});

  // Set a callback to run when the Google Visualization API is loaded.
  google.charts.setOnLoadCallback(drawChart);
    function drawChart() {
        var neighborhoodChart = new google.visualization.ChartWrapper({
        'chartType'     : 'PieChart',
        'containerId'   : 'chart_div2',
        'dataSourceUrl' : 'https://docs.google.com/spreadsheets/d/1lmmpJs2Bz3EfQWExB4KXq_uJWoLlq1PMCahy6w4ipcE/gviz/tq?gid=942634171',
        'query'         : 'SELECT C, COUNT(C) GROUP BY C',
        'options'       : {
            'title'     : 'Neighborhood of Residence'
        }
    });

  neighborhoodChart.draw();
  }

以下是用于整个页面的脚本:

整篇文章

<!DOCTYPE html>
<html lang="en">

<head>
<title>CDC Dashboard</title>

<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">

<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">

<!-- Bootswatch Theme -->
<link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/bootswatch/3.3.7/flatly/bootstrap.min.css" >

<!-- External style sheet -->
<link rel="stylesheet" type="text/css" href="styles.css">

<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>

<!-- Latest compiled and minified JavaScript -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>

<!--Load the AJAX API for Google Charts-->
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>

<script type="text/javascript"
  src='https://www.google.com/jsapi?autoload={
    "modules":[{
    "name":"visualization",
    "version":"1"
    }]
  }'></script>

<script type="text/javascript">

  // Load the Visualization API and the controls package.
  google.charts.load('current', {'packages':['corechart', 'controls']});

  // Set a callback to run when the Google Visualization API is loaded.
  google.charts.setOnLoadCallback(drawChart);
    function drawChart() {
        var neighborhoodChart = new google.visualization.ChartWrapper({
        'chartType'     : 'PieChart',
        'containerId'   : 'chart_div2',
        'dataSourceUrl' : 'https://docs.google.com/spreadsheets/d/1lmmpJs2Bz3EfQWExB4KXq_uJWoLlq1PMCahy6w4ipcE/gviz/tq?gid=942634171',
        'query'         : 'SELECT C, COUNT(C) GROUP BY C',
        'options'       : {
            'title'     : 'Neighborhood of Residence'
        }
    });

  neighborhoodChart.draw();
  }

</script>
</head>

<body>

<!-- Navbar to be affixed at the top -->
<nav class="navbar navbar-inverse">
    <div class="container-fluid">
        <div class="navbar-header">
            <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#myNavbar">
              <span class="icon-bar"></span>
              <span class="icon-bar"></span>
              <span class="icon-bar"></span>
            </button>
        </div>
        <div>
          <div class="collapse navbar-collapse" id="myNavbar">
            <ul class="nav navbar-nav">
              <li><a href="index.html">What We Do</a></li>
              <li><a href="serve.html">Who We Serve</a></li>
            </ul>
          </div>
        </div>
    </div>
</nav>


<div class="container-fluid">
    <div class="col-md-10 col-md-offset-1">
        <h1 class="text-center">Who We Serve</h1>

        <div class="row">
            <div class="col-md-8 col-md-offset-2">
                <hr>
            </div>
        </div>

          <h2 class="text-center">Understanding Our Clients</h2>

          <div id="dashboard_div">
              <!--Divs that will hold each control and chart-->
              <div class="row">
                <div class="col-md-6">
                    <div id="filter_div"></div>
                </div>
                <div class="col-md-6">
                    <div id="search_div"></div>
                </div>
              </div>

              <div class="row">
                <div class="col-md-6">
                    <div id="attendance_div"></div>
                </div>
                <div class="col-md-6">
                    <div id="transport_div"></div>
                </div>
              </div>

              <div id="chart_div">
              </div>

              <div id="chart_div2">
              </div>
          </div>

          <div class="row">
            <div class="col-md-8 col-md-offset-2">
                <hr>
            </div>
          </div>

        <div id="storytime">
            <h2 class="text-center">Storytime</h2>
        </div>
    </div>
</div>
</body>

</html>

可以在此处看到它的工作文件:https://s3-us-west-2.amazonaws.com/example-server/serve.html

更新

理想情况下,我更喜欢只依赖于更改查询本身的解决方案,因为这在语法上更清晰。我将在整个项目中多次这样做,并希望避免涉及额外代码行的变通方法。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

这应该有效,必须是一个bug或什么......

'SELECT C, COUNT(C) GROUP BY C'

无论如何,您可以使用data.visualization.data.group手动汇总列

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

google.charts.load('current', {
  callback: drawChart,
  packages: ['controls', 'corechart', 'table']
});

function drawChart() {
  var query = new google.visualization.Query('https://docs.google.com/spreadsheets/d/1lmmpJs2Bz3EfQWExB4KXq_uJWoLlq1PMCahy6w4ipcE/gviz/tq?gid=942634171');
  query.setQuery('SELECT C');
  query.send(function (response) {
    if (response.isError()) {
      alert('Error: ' + response.getMessage() + ' - ' + response.getDetailedMessage());
      return;
    }

    var dataGroup = google.visualization.data.group(
      response.getDataTable(),
      [0],
      [{
        aggregation: google.visualization.data.count,
        column: 0,
        label: response.getDataTable().getColumnLabel(0),
        type: 'number'
      }]
    );

    var neighborhoodChart = new google.visualization.ChartWrapper({
      chartType: 'PieChart',
      containerId: 'chart_div',
      dataTable: dataGroup,
      options: {
        height: 240,
        title: 'Neighborhood of Residence'
      }
    });
    neighborhoodChart.draw();
  });
}
<script src="https://www.gstatic.com/charts/loader.js"></script>
<div id="chart_div"></div>