Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Someone tell me what I\'m doing wrong here. I\'m expecting there to be multiple

ID: 3849898 • Letter: S

Question

Someone tell me what I'm doing wrong here. I'm expecting there to be multiple errors. With this code, I'm trying to create a chart and a controller from the data given in the spreadsheet link. Thanks in advance.

<html>
<head>
<!--Load the AJAX API-->
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></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(drawDashboard);

// Callback that creates and populates a data table,
// instantiates a dashboard, a range slider and a pie chart,
// passes in the data and draws it.
function drawDashboard() {

// Create our data table.
var query = new google.visualization.Query('https://docs.google.com/spreadsheets/d/1PlT8k6qXsCkOCEEJFn7apKYgDunLi1Lzmnmo_AKQBXc/edit#gid=0');
  
query.setQuery('SELECT B,C LIMIT 10 OFFSET 3');
  
query.send(handleQueryResponse);
    }
  
function handleQueryResponse(response){
   if (reponse.isError()){
   alert('Error in query: ' + response.getMessage() + ' ' + response.getDetailedMessage());
return;
}
  
var data = response.getDataTable();

// Create a dashboard.
var dashboard = new google.visualization.Dashboard(
document.getElementById('dashboard_div'));

// Create a range slider, passing some options
var donutRangeSlider = new google.visualization.ControlWrapper({
'controlType': 'NumberRangeFilter',
'containerId': 'filter_div',
'options': {
'filterColumnLabel': 'Years'
}
});

// Create a pie chart, passing some options
var pieChart = new google.visualization.ChartWrapper({
'chartType': 'PieChart',
'containerId': 'chart_div',
'options': {
'width': 300,
'height': 300,
'pieSliceText': 'value',
'legend': 'right'
}
});

// Establish dependencies, declaring that 'filter' drives 'pieChart',
// so that the pie chart will only display entries that are let through
// given the chosen slider range.
dashboard.bind(donutRangeSlider, pieChart);

// Draw the dashboard.
dashboard.draw(data);
}
</script>
</head>

<body>
<!--Div that will hold the dashboard-->
<div id="dashboard_div">
<!--Divs that will hold each control and chart-->
<div id="filter_div"></div>
<div id="chart_div"></div>
</div>
</body>
</html>

Explanation / Answer

<html>
<head>
    <!--Load the AJAX API-->
    <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></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(drawDashboard);

      // Callback that creates and populates a data table,
      // instantiates a dashboard, a range slider and a pie chart,
      // passes in the data and draws it.
      function drawDashboard() {

        // Create our data table.
        var query = new google.visualization.Query('https://docs.google.com/spreadsheets/d/1PlT8k6qXsCkOCEEJFn7apKYgDunLi1Lzmnmo_AKQBXc/edit#gid=0');      

        query.setQuery('SELECT C,H LIMIT 10 OFFSET 3');      
        query.send(handleQueryResponse);
      }
      
      function handleQueryResponse(response){

        if (response.isError()){
            alert('Error in query: ' + response.getMessage() + ' ' + response.getDetailedMessage());
            return;
        }
    
        var data = response.getDataTable();

      
        var data_view = new google.visualization.DataView(data);      
        data_view.setColumns([
          // 0'th column formatted to string.
          {
            calc: function(data, row) {
              return data.getFormattedValue(row, 0);
            },
            type:'string'
          },
          // 1th column.
          1
        ]);      

        // Create a dashboard.
        var dashboard = new google.visualization.Dashboard(
            document.getElementById('dashboard_div'));

        // Create a range slider, passing some options
        var donutRangeSlider = new google.visualization.ControlWrapper({
          'controlType': 'NumberRangeFilter',
          'containerId': 'filter_div',
          'options': {
            'filterColumnIndex': 1
          }
        });

        // Create a pie chart, passing some options
        var pieChart = new google.visualization.ChartWrapper({
          'chartType': 'PieChart',
          'containerId': 'chart_div',
          'options': {
            'width': 300,
            'height': 300,
            'pieSliceText': 'value',
            'legend': 'right'
          }
        });

        // Establish dependencies, declaring that 'filter' drives 'pieChart',
        // so that the pie chart will only display entries that are let through
        // given the chosen slider range.
        dashboard.bind(donutRangeSlider, pieChart);

        // Draw the dashboard.
        dashboard.draw(data_view);
      }
    </script>
</head>

<body>
    <!--Div that will hold the dashboard-->
    <div id="dashboard_div">
      <!--Divs that will hold each control and chart-->
      <div id="filter_div"></div>
      <div id="chart_div"></div>
    </div>


</body>
</html>

First thing you were trying to select 'Years' using

'filterColumnIndex': 'Years' // There is no such column as years in your spread sheet, I used index instead.

I don't know what you were trying to show in the chart, I used different columns instead for testing, The first column in the data is used for labels, so make sure you slect the right column as first one and I had to do,

var data_view = new google.visualization.DataView(data);      
        data_view.setColumns([
          // 0'th column formatted to string.
          {
            calc: function(data, row) {
              return data.getFormattedValue(row, 0);
            },
            type:'string'
          },
          // 1th column.
          1
        ]);       

this to make the first column a string for sure, look in the code for more details.

This piechart may look stupid, but I am just testing ya know.

that's it. Have a great time working with charts,

Cheers,

Rj

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote