0
天
我想出现如下的一份报告中创建表的时间分组行:报表生成器3.0 - 通过
数据集基于此查询:
SELECT
DATENAME(dw, CurrentReadTime) AS 'DAY',
DATEPART(dw, CurrentReadTime) AS 'DOW',
CAST(datename(HH, CurrentReadTime) as int) AS 'HOD',
AVG([Difference]) AS 'AVG'
FROM
Consumption
INNER JOIN Readings ON Readings.[RadioID-Hex] = Consumption.[RadioID-Hex]
WHERE
CONCAT([Building], ' ', [Apt]) = @ServiceLocation
GROUP BY
CurrentReadTime
ORDER BY
DATEPART(DW, CurrentReadTime),
CAST(DATENAME(HH, CurrentReadTime) AS INT)
如下从该表中的数据返回:
在报表生成器,我加入这个代码报告属性:
Function GetRangeValueByHour(ByVal Hour As Integer) As String
Select Case Hour
Case 6 To 12
GetRangeValueByHour = "Morning"
Case 12 to 17
GetRangeValueByHour = "Afternoon"
Case 17 to 22
GetRangeValueByHour = "Evening"
Case Else
GetRangeValueByHour = "Overnight"
End Select
Return GetRangeValueByHour
End Function
而这个代码为“行组”:
=Code.GetRangeValueByHour(Fields!HOD.Value)
当我执行报告,选择了参数目标服务的位置,我得到这样的结果:
正如你会发现,在“时刻”的displayin g在报表属性代码中符合CASE表达式的第一个结果;但是,我确认了所有“HOD”(存储为整数)通过对此结果执行SUM进行分组。
此外,实际表值(.05,.08等)仅返回首次满足VB代码中CASE语句要求的HOD结果。
这些都是我需要解决的事情,但想不通:
- 为什么不报告属性VB代码显示“上午”,“下午”,“晚上”和“隔夜“在当日时间专栏?
- 如何将表中的值组合在一起?因此,AVG实际上是指定范围内的所有小时和每周的星期几(周一,周二等6-12,12-18等)的每个AVG的总和。
对于那些仍在阅读,感谢您的协助!如果您需要更多信息,请告诉我。
您是使用表格还是矩阵?你是否在时间列中使用行组表达式('= Code.GetRangeValueByHour(Fields!HOD.Value)')? – stubaker
我正在使用一张桌子。报告属性中的代码在时间列中被调用以对“早晨”,“下午”等进行分组。 我最终更改了“每日时间”的参数,以创建(4)六小时时段。然后,只需将查询中返回的值乘以6即可得到我需要的数字。这就是说,如果你有一个解决方案的原始问题,我仍然非常有兴趣听到如何解决这个问题。 – johnwonderbread