SSRS。如何分组?

时间:2016-02-12 16:30:52

标签: sql-server reporting-services ssrs-tablix

我有如下所示的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

我怎样才能做到这一点?

2 个答案:

答案 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字段报告(您的新字段或实际小时值)。