SSRS取平均值如果另一个字段的值相等

SSRS take average IF value of another field is equal

我使用 SSRS 和数据库查询为我们的一个系统创建了性能跟踪器。所以现在,它将对卡片和处理时间求和,SSRS 将使用每天的 ProcessingDate 对其进行绘制。我们的数据库根据 DataBatchID 在数据库中放入一个新行。但是,这种添加所有卡片并添加每天处理时间的方法并没有正确考虑线程同时 运行 的情况。因此,使用 SSRS 有一种方法可以确定 ProcessingDate 是否完全相同,只需取这些并对 NumCardsPassed 求和并取 ProcessingTime 的平均值,然后将这些结果添加到当天的其余部分。对不起,如果我没有解释清楚。下面是从查询返回的数据集示例,因此对于在 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

您可以在查询中这样做:

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 服务器

SELECT DateAdd(mi, DateDiff(mi, 0, ProcessingDate), 0) AS TimeInMinutes