我使用SSRS和数据库查询创建了一个系统的性能跟踪器。所以现在,它将汇总卡和处理时间,SSRS将每天使用ProcessingDate绘制它。我们的数据库根据DataBatchID在数据库中放入一个新行。但是,这种添加所有卡并每天添加处理时间的方法并没有正确考虑线程同时运行的情况。因此,使用SSRS有一种方法可以确定如果ProcessingDate完全相同,只需取出它们并将NumCardsPassed求和并取处理时间的平均值,然后将这些结果添加到当天的其余部分。对不起,如果我没有解释清楚。下面是从查询返回的数据集示例,因此对于10:24中的所有内容,添加numCardsPassed并对ProcessingTime求平均值,然后对10:25执行相同操作。之后,然后将所有这些值一起绘制在8/26的那一天。现在,正如它的图形所示,它使得它看起来像是按顺序一次一个地运行一个而不是一起运行它有时可能会做的事情:
ProcessingDate DataBatchId NumCardsPassed ProcessingTime
8/26/2016 7:39 10112 99314 485
8/26/2016 8:51 10113 4971 29
8/26/2016 9:14 10114 4971 34
8/26/2016 10:20 10115 4957 38
8/26/2016 10:23 10116 4961 104
8/26/2016 10:24 10117 4979 144
8/26/2016 10:24 10119 4979 182
8/26/2016 10:24 10118 4982 161
8/26/2016 10:24 10120 4987 219
8/26/2016 10:24 10122 4982 243
8/26/2016 10:24 10121 4981 236
8/26/2016 10:24 10125 4949 262
8/26/2016 10:24 10123 4941 247
8/26/2016 10:24 10127 4973 278
8/26/2016 10:24 10124 4975 241
8/26/2016 10:24 10128 4981 279
8/26/2016 10:25 10129 4976 280
8/26/2016 10:25 10126 4972 258
8/26/2016 10:25 10130 4979 277
8/26/2016 10:25 10132 4976 288
8/26/2016 10:25 10131 4972 277
8/26/2016 10:25 10133 4841 288
答案 0 :(得分:0)
您可以在查询中执行此操作:
SELECT ProcessingDate, SUM(NumCardsPassed) AS NumCardsPassed, AVG(ProcessingTime) AS ProcessingTime
FROM ProcessTable
GROUP BY ProcessingDate
ORDER BY ProcessingDate
请注意,如果日期实际上是精确到毫秒的日期,并且在几毫秒内存在轻微的差异,那么您可能需要对日期字段进行一些舍入或转换,以使其正确分组到分钟。
您可以使用以下SQL将日期舍入为分钟:
MySql (来自this answer)
SELECT SEC_TO_TIME((TIME_TO_SEC(ProcessingDate) DIV 60) * 60) AS TimeInMinutes
Sql Server
SELECT DateAdd(mi, DateDiff(mi, 0, ProcessingDate), 0) AS TimeInMinutes