如何根据码数生成条形图
How to generate bar chart according to the number of code
Table name: data_detail
primary key: id
id | kpi_code | result_date | result_data | target |
1 | KPI1 | 11/13/2019 | 100 | 300 |
2 | KPI1 | 11/14/2019 | 150 | 300 |
3 | KPI2 | 11/13/2019 | 15 | 50 |
4 | KPI2 | 11/14/2019 | 30 | 50 |
<?php
require_once("dbconfig.php");
$query= "SELECT result_date, result_data FROM data_detail ";
$result = mysqli_query($conn,$query);
?>
<script type="text/javascript">
google.charts.load('current', {'packages':['bar']});
google.charts.setOnLoadCallback(drawChart);
function drawChart() {
var data = google.visualization.arrayToDataTable([
['Date', 'Sales'],
<?php
while($row = mysqli_fetch_array($result))
{
echo "['" .$row["result_date"]."', ".$row["result_data"]."],";
}
?>
]);
var options = {
chart: {
title: 'Sales for this week',
subtitle: 'Number of sales for 11-13-2019 - 11-15-2019 ',
}
};
var chart = new google.charts.Bar(document.getElementById('columnchart_material'));
chart.draw(data, google.charts.Bar.convertOptions(options));
}
</script>
<div id="columnchart_material"></div>
我希望创建两个图表,因为 table 中有 2 个不同的 kpi_code
。但结果是它只创建了 1 个图表,其中有 4 个柱 result_data
。问题之一应该是 sql 语句,因为我不知道如何在 table.
中获得差异 kpi_code
的数量
而不是更改 sql 或 php,
我们可以将所有数据加载到一个 google data table,
中
然后使用数据视图筛选每个 kpi,
并为每一个绘制图表。
首先,以与您相同的方式加载所有数据,除了添加 kpi 列...
var data = google.visualization.arrayToDataTable([
['KPI', 'Date', 'Sales'],
<?php
while($row = mysqli_fetch_array($result))
{
echo "['" .$row["kpi_code"]."', '" .$row["result_date"]."', ".$row["result_data"]."],";
}
?>
]);
那么我们可以用一个数据table方法,
获取一组不同的 kpi 代码 --> getDistinctValues(columnIndex)
// get distinct kpi codes
var kpiCodes = data.getDistinctValues(0);
在此之后,我们可以为每个 kpi 构建数据视图和图表...
// add a div container and chart for each kpi
kpiCodes.forEach(function (kpi, index) {
// build data view for kpi
var view = new google.visualization.DataView(data);
// filter view rows for kpi code
view.setRows(data.getFilteredRows([{
column: 0,
value: kpi
}]));
// remove kpi column from data view
view.hideColumns([0]);
// create kpi chart container
container.insertAdjacentHTML('beforeEnd', '<div id="kpi-' + index + '"></div>');
// create kpi chart
var chart = new google.charts.Bar(document.getElementById('kpi-' + index));
// draw kpi chart using view
chart.draw(view, google.charts.Bar.convertOptions(options));
});
请参阅以下工作片段...
google.charts.load('current', {
packages:['bar']
}).then(function () {
var data = google.visualization.arrayToDataTable([
['KPI', 'Date', 'Sales'],
['KPI1', '11/13/2019', 100],
['KPI1', '11/14/2019', 150],
['KPI2', '11/13/2019', 15],
['KPI2', '11/14/2019', 30],
]);
// use div container for all charts
var container = document.getElementById('columnchart_material');
// get distinct kpi codes
var kpiCodes = data.getDistinctValues(0);
// add a div container and chart for each kpi
kpiCodes.forEach(function (kpi, index) {
// options for kpi
var options = {
chart: {
title: 'Sales for this week - KPI: ' + kpi,
subtitle: 'Number of sales for 11-13-2019 - 11-15-2019 ',
}
};
// build data view for kpi
var view = new google.visualization.DataView(data);
// filter view rows for kpi code
view.setRows(data.getFilteredRows([{
column: 0,
value: kpi
}]));
// remove kpi column from data view
view.hideColumns([0]);
// create kpi chart container
container.insertAdjacentHTML('beforeEnd', '<div id="kpi-' + index + '"></div>');
// create kpi chart
var chart = new google.charts.Bar(document.getElementById('kpi-' + index));
// draw kpi chart using view
chart.draw(view, google.charts.Bar.convertOptions(options));
});
});
<script src="https://www.gstatic.com/charts/loader.js"></script>
<div id="columnchart_material"></div>
Table name: data_detail
primary key: id
id | kpi_code | result_date | result_data | target |
1 | KPI1 | 11/13/2019 | 100 | 300 |
2 | KPI1 | 11/14/2019 | 150 | 300 |
3 | KPI2 | 11/13/2019 | 15 | 50 |
4 | KPI2 | 11/14/2019 | 30 | 50 |
<?php
require_once("dbconfig.php");
$query= "SELECT result_date, result_data FROM data_detail ";
$result = mysqli_query($conn,$query);
?>
<script type="text/javascript">
google.charts.load('current', {'packages':['bar']});
google.charts.setOnLoadCallback(drawChart);
function drawChart() {
var data = google.visualization.arrayToDataTable([
['Date', 'Sales'],
<?php
while($row = mysqli_fetch_array($result))
{
echo "['" .$row["result_date"]."', ".$row["result_data"]."],";
}
?>
]);
var options = {
chart: {
title: 'Sales for this week',
subtitle: 'Number of sales for 11-13-2019 - 11-15-2019 ',
}
};
var chart = new google.charts.Bar(document.getElementById('columnchart_material'));
chart.draw(data, google.charts.Bar.convertOptions(options));
}
</script>
<div id="columnchart_material"></div>
我希望创建两个图表,因为 table 中有 2 个不同的 kpi_code
。但结果是它只创建了 1 个图表,其中有 4 个柱 result_data
。问题之一应该是 sql 语句,因为我不知道如何在 table.
kpi_code
的数量
而不是更改 sql 或 php,
我们可以将所有数据加载到一个 google data table,
中
然后使用数据视图筛选每个 kpi,
并为每一个绘制图表。
首先,以与您相同的方式加载所有数据,除了添加 kpi 列...
var data = google.visualization.arrayToDataTable([
['KPI', 'Date', 'Sales'],
<?php
while($row = mysqli_fetch_array($result))
{
echo "['" .$row["kpi_code"]."', '" .$row["result_date"]."', ".$row["result_data"]."],";
}
?>
]);
那么我们可以用一个数据table方法,
获取一组不同的 kpi 代码 --> getDistinctValues(columnIndex)
// get distinct kpi codes
var kpiCodes = data.getDistinctValues(0);
在此之后,我们可以为每个 kpi 构建数据视图和图表...
// add a div container and chart for each kpi
kpiCodes.forEach(function (kpi, index) {
// build data view for kpi
var view = new google.visualization.DataView(data);
// filter view rows for kpi code
view.setRows(data.getFilteredRows([{
column: 0,
value: kpi
}]));
// remove kpi column from data view
view.hideColumns([0]);
// create kpi chart container
container.insertAdjacentHTML('beforeEnd', '<div id="kpi-' + index + '"></div>');
// create kpi chart
var chart = new google.charts.Bar(document.getElementById('kpi-' + index));
// draw kpi chart using view
chart.draw(view, google.charts.Bar.convertOptions(options));
});
请参阅以下工作片段...
google.charts.load('current', {
packages:['bar']
}).then(function () {
var data = google.visualization.arrayToDataTable([
['KPI', 'Date', 'Sales'],
['KPI1', '11/13/2019', 100],
['KPI1', '11/14/2019', 150],
['KPI2', '11/13/2019', 15],
['KPI2', '11/14/2019', 30],
]);
// use div container for all charts
var container = document.getElementById('columnchart_material');
// get distinct kpi codes
var kpiCodes = data.getDistinctValues(0);
// add a div container and chart for each kpi
kpiCodes.forEach(function (kpi, index) {
// options for kpi
var options = {
chart: {
title: 'Sales for this week - KPI: ' + kpi,
subtitle: 'Number of sales for 11-13-2019 - 11-15-2019 ',
}
};
// build data view for kpi
var view = new google.visualization.DataView(data);
// filter view rows for kpi code
view.setRows(data.getFilteredRows([{
column: 0,
value: kpi
}]));
// remove kpi column from data view
view.hideColumns([0]);
// create kpi chart container
container.insertAdjacentHTML('beforeEnd', '<div id="kpi-' + index + '"></div>');
// create kpi chart
var chart = new google.charts.Bar(document.getElementById('kpi-' + index));
// draw kpi chart using view
chart.draw(view, google.charts.Bar.convertOptions(options));
});
});
<script src="https://www.gstatic.com/charts/loader.js"></script>
<div id="columnchart_material"></div>