0

我正在运行以下查询,在为 SECONDCONN 运行 QoQ 之后,我没有在我的 cfchart 中获得所需的输出。

<!--- QoQ for FIRSTCONN --->
<!--- Master Query --->
<cfquery datasource = "XX.XX.X.XX" name="master1">
     SELECT STR_TO_DATE(date_format(Timedetail,'%m-%d-%Y'),'%m-%d-%Y') as FIRSTCONN
            , COUNT(Timedetail) as FIRSTOccurances
            , EVENTS 
     FROM  MyDatabase
     WHERE EVENTS = "FIRST" 
     GROUP BY FIRSTCONN ;
</cfquery> 

<!--- Detail Query --->
<!--- <cfdump var = "#master#"> --->
<cfquery dbtype="query" name="detail1">
    SELECT  *
    FROM master1 
    WHERE FIRSTCONN  >= <cfqueryparam value="#form.startdate#" cfsqltype="cf_sql_varchar"> 
    AND   FIRSTCONN  <  <cfqueryparam value="#dateAdd('d', 1,form.enddate)#" cfsqltype="cf_sql_varchar">;
</cfquery>  


<!--- QoQ for SECONDCONN --->
<!--- Master Query --->
<cfquery datasource = "XX.XX.X.XX" name="master2">
    SELECT STR_TO_DATE(date_format(Timedetail,'%m-%d-%Y'),'%m-%d-%Y') as SECONDCONN
           , COUNT(Timedetail) as SECONDOccurances
           , EVENTS 
    FROM  MyDatabase
    WHERE EVENTS = "SECOND" 
    GROUP BY SECONDCONN ;
</cfquery> 

<!--- Detail Query --->
<!--- <cfdump var = "#master#"> --->
<cfquery dbtype="query" name="detail2">
    SELECT  *
    FROM   master2 
    WHERE  SECONDCONN  >= <cfqueryparam value="#form.startdate#" cfsqltype="cf_sql_varchar"> 
    AND    SECONDCONN  <  <cfqueryparam value="#dateAdd('d', 1,form.enddate)#" cfsqltype="cf_sql_varchar">;
</cfquery>  


<cfchart format="flash"  chartwidth="1000" chartheight="500" scalefrom="0" scaleto="50000" xAxisTitle="Dates" yaxistitle="Number of Connections">
     <cfchartseries  query="detail1" type="line" itemColumn="FIRSTCONN" valueColumn="FIRSTOccurances" > 
     <cfchartseries  query="detail2" type="line" itemColumn="SECONDCONN" valueColumn="SECONDOccurances" > 
     </cfchartseries>
</cfchart>

在 X 轴上,图表显示正确startdate,但它停止显示某处中间点之后的日期,并且折线图的其余部分显示在 x 轴上没有提及任何日期。可能是什么原因?当我只运行一个查询时,日期显示正确,即FIRSTCONN.

图片#1附件显示了只有一个查询的输出,即 QoQFIRSTCONN

图片 #2适用于两者并显示不良输出。

我注意到的另一点是,当我仅针对 SECONDCONN 运行查询时,我看到的输出在 x 轴上没有提及任何日期。可能是什么原因?我附在图片 #3下面供参考。查询没有变化。

我使用的cfchart代码如下:

<cfchart format="flash"  
          chartwidth="1000" 
          chartheight="500" 
          scalefrom="0" 
          scaleto="50000" 
          xAxisTitle="Date" 
          yaxistitle="Number of Connections" 
          showLegend = "yes" 
          showMarkers = "yes"
          sortXAxis= "yes"
          tipStyle="MouseDown"
          >



         <cfchartseries  query="detail2" type="line" itemColumn="SECONDCONN " valueColumn="SECONDOccurances" > 

  </cfchartseries>  
</cfchart>  

第二个查询的cfdump如下:

query
RESULTSET   
query
    SECONDCONN                SECONDOCCURANCES   EVENTS
1   {ts '2013-06-24 00:00:00'}  556             SECOND
2   {ts '2013-06-25 00:00:00'}  2710            SECOND
3   {ts '2013-06-26 00:00:00'}  2854            SECOND
4   {ts '2013-06-27 00:00:00'}  6348            SECOND
5   {ts '2013-06-28 00:00:00'}  4285            SECOND
6   {ts '2013-06-29 00:00:00'}  2843            SECOND
7   {ts '2013-06-30 00:00:00'}  875             SECOND
8   {ts '2013-07-01 00:00:00'}  4033            SECOND
9   {ts '2013-07-02 00:00:00'}  3211            SECOND
10  {ts '2013-07-03 00:00:00'}  2882            SECOND
11  {ts '2013-07-04 00:00:00'}  978             SECOND
12  {ts '2013-07-05 00:00:00'}  1727            SECOND
13  {ts '2013-07-06 00:00:00'}  811             SECOND
14  {ts '2013-07-07 00:00:00'}  522             SECOND
15  {ts '2013-07-08 00:00:00'}  2556            SECOND
16  {ts '2013-07-09 00:00:00'}  1160            SECOND
17  {ts '2013-07-10 00:00:00'}  8580            SECOND
18  {ts '2013-07-11 00:00:00'}  2630            SECOND
19  {ts '2013-07-16 00:00:00'}  12              SECOND 

如果我能回答更多问题,请告诉我。

4

2 回答 2

0

当我更改显示折线图的顺序时,问题得到解决。我的意思是我以以下方式以递增顺序显示:

<cfchartseries  query="detail1" type="line" itemColumn="FIRSTCONN" valueColumn="FIRSTOccurances" > 
<cfchartseries  query="detail2" type="line" itemColumn="SECONDCONN" valueColumn="SECONDOccurances" > and so on till seventh connection.

当我开始以如下方式显示它时:

<cfchartseries  query="detail7" type="line" itemColumn="SEVENTHCONN" valueColumn="SEVENTHOccurances" > 
    <cfchartseries  query="detail6" type="line" itemColumn="SIXTHCONN" valueColumn="SIXTHOccurances" > and so on till FIRST CONNECTION

问题已解决,但我不确定其背后的原因。

于 2013-07-29T00:23:55.520 回答
0

在没有看到查询数据的转储的情况下,我的猜测是图表引擎可能已经决定有太多的值无法合理地显示在 x 轴上。(我测试了你的代码,它适用于 CF9)。尝试使用较小的日期范围,看看日期标签是否再次出现。如果是这样,您可能需要自定义图表设置以获得更好的拟合。以下是一些相关的样式设置。

  • isHideOverlapped- 隐藏/显示重叠的标签
  • skipLabels- 调整以显示每个n标签而不是全部
  • orientation- 标签方向(水平或垂直)

测试代码

<cfset detail1 = queryNew("")>
<cfset queryAddColumn(detail1, "FIRSTCONN", "date", listToArray("2013-07-31,2013-08-15,2013-08-17"))>
<cfset queryAddColumn(detail1, "FIRSTOccurances", listToArray("3,5,6"))>

<cfset detail2 = queryNew("")>
<cfset queryAddColumn(detail2, "SECONDCONN", "date", listToArray("2013-08-10,2013-08-18,2013-08-20"))>
<cfset queryAddColumn(detail2, "SECONDOccurances", listToArray("4,10,8"))>
<cfchart format="flash"  xAxisTitle="Dates" yaxistitle="Number of Connections">
       <cfchartseries  query="detail1" type="line" itemColumn="FIRSTCONN" valueColumn="FIRSTOccurances" /> 
       <cfchartseries  query="detail2" type="line" itemColumn="SECONDCONN" valueColumn="SECONDOccurances" /> 
</cfchart>

QoQ 更快,这就是我使用它的原因。

老实说,这不是处理运行缓慢的查询的好方法。优化 db 查询的最佳位置是在数据库中。花时间检查查询计划并找到瓶颈,添加适当的索引等等。通过使用 QoQ,您会通过拉回最终被丢弃的大量额外数据来产生大量额外的网络 o/h。更不用说构建新结果集所需的内存了。这是大量浪费的资源,并且无法很好地扩展。

(也就是说,我相信您已经打开了一个关于查询速度的单独线程。因此,我不会再次混合问题,而是将该对话留给您的另一个线程。)

于 2013-07-17T23:58:46.847 回答