我正在尝试使用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
对于简单情况很好,但是一旦您开始自定义外观(这总是会发生),通常最好直接使用底层工具。