Метки 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
,
прикрепленный показывает вывод только с одним запросом, то есть QoQ для FIRSTCONN
для обоих и показывает нежелательный результат.
Еще один момент, на который я обратил внимание: когда я запускаю запрос только для SECONDCONN, я вижу выходные данные без каких-либо дат, упомянутых на оси x. В чем может быть причина? Я прикрепил ниже для 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, вы получаете много дополнительной сетевой производительности за счет извлечения большого количества дополнительных данных, которые в конечном итоге отбрасываются. Не говоря уже о памяти, необходимой для создания нового набора результатов. Это много потраченных впустую ресурсов и не будет хорошо масштабироваться.
(Тем не менее, я полагаю, что вы уже открыли отдельный поток, касающийся скорости запросов. Поэтому вместо того, чтобы снова смешивать вопросы, я оставлю этот разговор для вашего другого потока.)