如何在chartjs中绘制缺失数据的图表

问题描述 投票:0回答:1

问题

我想使用Chartjs创建基于时间的堆积条形图,但是缺少时间值。我有两个问题:

1。)如何在SQL查询中或从Ajax响应构建数组时,如何用零填充缺失的数据?

2。)有比使用不需要丢失数据的堆叠图表更好的方法来使用chartjs可视化数据吗?

以下是按月份汇总的简单说明。 在生产中,这可以动态更改为每周或每天的摘要。jsFiddle上可用的工作示例>

期望的结果:

+----+
|Bill|  +----+  +----+
|    |  |Bill|  |Bill|
|----|  |----|  +----+
|Joe |  |Mary|  |Mary|
+----+  +----+  +----+
 Jan     Feb     Mar

这是数据库表的超级简化版本,用于说明问题。

Orders table:
+--------+---------+-------+
|Salesman| Order # | Month |
+--------+---------+-------+
|Bill    | 10500   | Jan   |
|Bill    | 10501   | Jan   |
|Joe     | 10867   | Jan   |
|Mary    | 10892   | Feb   |
|Bill    | 12527   | Feb   |
|Mary    | 12741   | Mar   |
|Bill    | 13292   | Mar   |
+--------+---------+-------+
SELECT salesman, month, count(*) as orders
FROM orders
GROUP BY month, salesman
ORDER BY month, Salesman
+------+----------+--------+
|Month | Salesman | Orders |
+------+----------+--------+
|Jan   | Bill     | 2      |
|Jan   | Joe      | 1      |
|Feb   | Mary     | 1      |
|Feb   | Bill     | 1      |
|Mar   | Mary     | 1      |
|Mar   | Bill     | 1      |  
+------+----------+--------+

[Mary没有Jan的条目,而Joe没有Feb和Mar的条目。当我从ajax响应构建数组时,我的x值的chart.data.labels数组是[Jan,Feb,Mar],但是y值的chart.datasets [n] .data看起来像这样:

Bill : [2,1,1]
Joe : [1]
Mary: [1,1]

它们应该看起来像这样:

Bill : [2,1,1]
Joe : [1,0,0]
Mary: [0,1,1]

我想使用Chartjs创建基于时间的堆积条形图的问题,但是我缺少时间值。我有两个问题:1.)如何在SQL中用零填充缺少的数据...

javascript mysql arrays chart.js
1个回答
0
投票

@@ nbk通过数据透视表提供了解决方案的线索。这是我的解决方案,控制器中的PHP函数可为数据透视表动态构建SQL。

© www.soinside.com 2019 - 2024. All rights reserved.