如何使用 cfchart 区域类型显示每个时间段的注释



我正在尝试使用cfchart创建一个面积图,但不确定如何去做。我正在查询表格中的所有评论,并希望在创建评论时显示时间段(x 轴上的几天或几个月)和输出评论数。下面是注释查询:

<cfquery name="qGetComments" datasource="#session.datasource#">
SELECT PersonFirstName
       , PersonLastName
       , PersonZip
       , CommentCode
       , refTopicID
       , tbComment.CommentID
       , tbComment.CreateDateTime
FROM tbPerson 
JOIN tbComment ON tbPerson.PersonID = tbComment.PersonID
</cfquery>

从这里开始,我不确定要在 cfchart 中放入哪些值以按照我想要的方式输出面积图。像这样的东西?

<cfchart chartWidth="400" show3D="yes"> 
    <cfchartseries type="area" query="qGetComments" 
       valueColumn="CommentID" 
       itemColumn="CreateDateTime" /> 
</cfchart> 

在上面的 Server 2008+ 中按日期对记录进行分组的一种简单方法是将datetime列强制转换为date。 然后只需使用"CommentDate"列作为图表项,并使用"NumOfComments"作为值:

SELECT CONVERT(DATE, tbComment.CreateDateTime) AS CommentDate
      , COUNT(*) NumOfComments
FROM  tbPerson INNER JOIN tbComment ON tbPerson.PersonID = tbComment.PersonID
GROUP BY CONVERT(DATE, tbComment.CreateDateTime); 


您可以通过在 SQL 中格式化日期来使图表标签更加用户友好(请参阅转换和转换)。只需确保按date值而不是格式化字符串对结果进行排序。否则,图表标签可能不会按正确的时间顺序显示(这是一个常见的错误):

--- format as:  Mon dd, yyyy
SELECT CONVERT(VARCHAR, tbComment.CreateDateTime, 107) AS CommentDateString
      , COUNT(*) NumOfComments 
FROM  tbPerson INNER JOIN tbComment ON tbPerson.PersonID = tbComment.PersonID 
GROUP BY CONVERT(VARCHAR, tbComment.CreateDateTime, 107) 
ORDER BY CONVERT(DATE, CONVERT(VARCHAR, tbComment.CreateDateTime, 107), 107)

SQLFiddle

顺便说一句,如果HTML图表是一种选择,你可以看看斯科特的建议。通常,CFChart对于简单情况很好,但是一旦您开始自定义外观(这总是会发生),通常最好直接使用底层工具。

相关内容

  • 没有找到相关文章

最新更新