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