我有如下所示的SSRS报告,使用布尔参数显示12h视图或24h视图。为了使报告适合单个屏幕,24小时报告需要每2小时分组一次。
07:00 08:00 09:00 10:00 11:00 12:00 13:00 14:00 ...
Line 1 25 30 24 26 25 25 30 30 ...
08:00 10:00 12:00 14:00 ...
Line 1 55 50 50 60 ...
数据集的查询是:
SELECT LineID
,Hour
,HourValue
,Target
FROM vwData
ORDER BY LineID, CASE WHEN [Hour] > 6 THEN - 1 ELSE [Hour] END
我怎样才能做到这一点?
答案 0 :(得分:1)
这声明你的位变量(当他们想要24小时视图时应该是真的 - 12小时时是假的)
DECLARE @24Hour bit = 0
SELECT CASE WHEN @24Hour = 0
THEN Hour
ELSE Hour + (Hour % 2)
END AS [HourGroup]
,SUM(Target) AS [TargetTotal]
FROM vwData
GROUP BY CASE WHEN @24Hour = 0
THEN Hour
ELSE Hour + (Hour % 2)
END
如果他们想要24小时视图,我们制作小时=小时+小时%2.(7 = 8,8 = 8,9 = 10等等)。如果你有一个更复杂的查询,我建议阅读交叉申请,但这很简单,我认为这就足够了。分组确保聚合REAL 7和REAL 8小时记录(如果使用24小时视图,它们将作为" 8"返回)。如果您不对结果进行分组,您将获得两个8点钟记录 - 一个记录总共7小时,一个记录总计8小时。
编辑:
由于您没有包含数据库的架构,我猜测“目标”是什么?是被总结的价值,但它可以很容易地成为' HourValue'。此外,我不知道为什么你需要LineID,所以我从我的答案中省略了它。但如果不准确,您可以轻松修改它。将来,您应该提供一些示例数据和数据库架构,以便其他人不必做出假设或猜测。
答案 1 :(得分:0)
你可以添加一个计算字段,其值由下式给出:`Fields!Hour.Value + Fields!Hour.Value Mod 2'然后在该字段上分组,使用参数选择Group By字段报告(您的新字段或实际小时值)。