如何收集图表数据

时间:2017-04-13 06:12:18

标签: mysql database-design charts

我知道这听起来像个愚蠢的问题,但收集图表数据的过程是什么?应该如何保存到DB中?

例如,我有一个门票应用程序,我想显示一个图表,以显示在过去30分钟,1小时,12小时,24小时内创建了多少张门票

我应该如何将这些数据存储在数据库中,以便以后能够在界面中使用它?

我的想法是创建一个TicketsSummary表,并为每个创建的故障单在Db中创建一条新记录,并创建dateTime

之后,在ui中,根据过滤器(比如说最后30分钟),我从数据库中汇集CreatedDateTime >= (DateTime.UtcNow - TimeSpan.AddMinutes(-30))

所有的票据

为了使界面保持最新,我将每60秒汇集一次数据,并更新图表。

这是正确的方法吗?

Id            CreatedDateTime           Source
--------------------------------------------------
1             2017-04-13 05:17:29       Chat
2             2017-04-13 05:21:05       Email
3             2017-04-13 06:18:47       Chat
4             2017-04-13 06:49:10       Call Center

enter image description here

1 个答案:

答案 0 :(得分:1)

通常,二维图表只是x值与y值相应映射的关联。在您的情况下,如果您基本上将绘制SELECT DATE(CreatedDateTime) as X, COUNT(*) as Y FROM TicketsSummary GROUP BY X的结果(其中X和Y是您需要显示的值。

如果您想要动态更新,可以使用支持开箱即用的Highcharts(排序)。

基本上你需要类似下面的例子(在这里稍作修改)。 http://jsfiddle.net/w15e9chz/

您的想法是最初生成图表数据,并且在加载图表时(在事件:加载中),您可以设置函数的间隔,以便每隔60秒触发一次对服务器端的另一个AJAX调用并更新图表数据。

示例:

events: {
       load: function () {

           // set up the updating of the chart each second
           setInterval(function () {
               var series = this.series[0]; //You can do this for each series if there are more
                   $.ajax({ url: "/data/url", success: function (newData) { 
                        series.setData(newData,true);//Assuming it is properly formatted.

                    });         
                }, 60000);
            }
        }