Я работаю над приборной панелью KPI, моя база данных содержит информацию об использовании горячей воды (hwater) в месяц (adate), сравнивая этот год с прошлым годом в виде диаграммы с областями.
Однако, когда я запускаю этот отчет, моя веб-страница пуста. Я попытался установить google.visualization.arrayToDataTable в .DataTable при объявлении имен столбцов, а также безуспешно пытался использовать AJAX на стороне сервера.
Area_Chart.php
<?php
require_once ("connect.php");
//fetch table rows from mysql db
$query = $handler->query("
SELECT MONTH(adate) as month,
MAX(case when YEAR(adate) = YEAR(CURRENT_DATE)-1 THEN hwater ELSE 0 END) as 'Last_Year',
MAX(case when YEAR(adate) = YEAR(CURRENT_DATE) THEN hwater ELSE 0 END) as 'This_Year'
FROM utlt
WHERE YEAR(adate) = YEAR(CURRENT_DATE)-1 OR year(adate) = YEAR(CURRENT_DATE)
GROUP BY MONTH(adate)
ORDER BY MONTH(adate)");
$query->execute();
$results=$query->fetchAll(PDO::FETCH_NUM);
$json=json_encode($results);
//echo $json;
?>
<html>
<head>
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script type="text/javascript">
google.charts.load('current', {'packages':['corechart']});
google.charts.setOnLoadCallback(drawChart);
function drawChart() {
var data = google.visualization.arrayToDataTable([
[ {label: 'Year', id: 'month'},
{label: 'Last_Year', id: 'Last_Year', type: 'number'},
{label: 'This_Year', id: 'This_Year', type: 'number'}],
<?=$json?>
], false);
var options = {
isStacked: 'absolute',
title: 'Hot Water Useage',
hAxis: {title: 'Year', titleTextStyle: {color: '#333'}},
vAxis: {minValue: 0}
};
var chart = new google.visualization.AreaChart(document.getElementById('chart_div'));
chart.draw(data, options);
}
</script>
</head>
<body>
<div id="chart_div" style="width: 100%; height: 500px;"></div>
</body>
</html>
Вывод эха $json:
[["1","1.671","21.269"],["2","3.810","22.017"],["3","5.554","24.045"],["4","6.930","25.036"],["5","8.845","27.116"],["6","11.793","28.058"],["7","13.244","28.996"],["8","14.471","30.342"],["9","16.260","30.977"],["10","17.199","31.923"],["11","18.494","33.155"],["12","19.563","33.797"]]
Выше я заметил, что hwater из utlt записаны в "", означает ли это, что это строка? Тип поля на самом деле десятичный (6,3).
[[1,1.671,21.269],[2,3.81,22.017],[3,5.554,24.045],[4,6.93,25.036],[5,8.845,27.116],[6,11.793,28.058],[7,13.244,28.996],[8,14.471,30.342],[9,16.26,30.977],[10,17.199,31.923],[11,18.494,33.155],[12,19.563,33.797]]
Когда я подаю это в свой Area_Chart.php, я все еще получаю пустую страницу. 07.12.2016{label: 'Year', id: 'month', type: 'number'}
07.12.2016/*[ {label: 'Year', id: 'month', type: 'number'}, {label: 'Last_Year', id: 'Last_Year', type: 'number'}, {label: 'This_Year', id: 'This_Year', type: 'number'}],*/
, я получу следующую ошибку:Data column(s) for axis #0 cannot be of type string×
07.12.2016google.charts.load('current', { 'packages':['corechart'] }); google.charts.setOnLoadCallback(drawChart); function drawChart() {
, а у вас былоgoogle.charts.load('current', { callback: drawChart, packages: ['corechart'] }); function drawChart() {
Это тоже было чем-то. почему у вас есть обратный вызов: в Charts.load, 08.12.2016