Метки CFChart исчезают

Я выполняю следующий запрос и после запуска QoQ для SECONDCONN я не получаю желаемый результат в моей 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. Что может быть причиной? Даты отображаются правильно, когда я выполнил только один запрос, то есть QoQ для FIRSTCONN,

Изображение № 1 прикрепленный показывает вывод только с одним запросом, то есть QoQ для FIRSTCONN

Изображение № 2 для обоих и показывает нежелательный результат.

Еще один момент, на который я обратил внимание: когда я запускаю запрос только для SECONDCONN, я вижу выходные данные без каких-либо дат, упомянутых на оси x. В чем может быть причина? Я прикрепил изображение № 3 ниже для reference.t в запросе нет изменений.

Код 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 

Пожалуйста, дайте мне знать, если я смогу ответить на дополнительные вопросы.

2 ответа

Решение

Проблема была решена, когда я изменил порядок отображения графика. Я имею в виду, что я отображал в порядке возрастания порядка следующим образом:

<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

Проблема была решена, но я не уверен, что было причиной этого.

Не видя дамп данных запроса, я предполагаю, что механизм построения диаграмм, возможно, решил, что слишком много значений для разумного отображения по оси 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 быстрее, и поэтому я его использую.

Честно говоря, это не очень хороший подход для обработки медленно выполняющихся запросов. Лучшее место для оптимизации запросабазы данных- это база данных. Потратьте время, чтобы изучить план запроса и найти узкое место, добавьте соответствующие индексы и так далее. Используя QoQ, вы получаете много дополнительной сетевой производительности за счет извлечения большого количества дополнительных данных, которые в конечном итоге отбрасываются. Не говоря уже о памяти, необходимой для создания нового набора результатов. Это много потраченных впустую ресурсов и не будет хорошо масштабироваться.

(Тем не менее, я полагаю, что вы уже открыли отдельный поток, касающийся скорости запросов. Поэтому вместо того, чтобы снова смешивать вопросы, я оставлю этот разговор для вашего другого потока.)

Другие вопросы по тегам