SSRS将另一个字段的平均IF值等于

时间:2016-08-29 22:34:14

标签: mysql sql-server reporting-services ssrs-2012

我使用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

1 个答案:

答案 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