SSRS。如何在一个组中分组?
SSRS. How to group in a group?
我有如下所示的 SSRS 报告,带有布尔参数以显示 12 小时视图或 24 小时视图。为了使报告适合单个屏幕,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
我怎样才能做到这一点?
您可以添加一个计算字段,其值由以下内容给出:`Fields!Hour.Value + Fields!Hour.Value Mod 2',然后对该字段进行分组,使用参数选择报告中的分组依据字段(您的新字段或实际小时值)。
这声明了您的位变量(当他们想要 24 小时视图时应该为 true - 12 小时时为 false)
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 小时视图,我们将 hour = hour + hour % 2。(7 = 8、8=8、9=10,等等)。如果您有更复杂的查询,我建议您阅读交叉应用,但这很简单,我认为这就足够了。分组依据确保聚合 REAL 7 和 REAL 8 小时记录(如果使用 24 小时视图,它们都将返回为“8”)。如果您不对结果进行分组,您将获得两份 8 点钟记录 - 一份包含 REAL 7 小时总计,另一份包含 REAL 8 小时总计。
编辑:
由于您没有包含数据库的模式,我猜测 'Target' 是求和的值,但它也可以很容易地成为 'HourValue'。此外,我不知道您为什么需要 LineID,所以我在回答中省略了它。但如果它不准确,您可以轻松修改它。将来,您应该提供一些示例数据和您的数据库模式,这样其他人就不会被迫做出假设或猜测。
我有如下所示的 SSRS 报告,带有布尔参数以显示 12 小时视图或 24 小时视图。为了使报告适合单个屏幕,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
我怎样才能做到这一点?
您可以添加一个计算字段,其值由以下内容给出:`Fields!Hour.Value + Fields!Hour.Value Mod 2',然后对该字段进行分组,使用参数选择报告中的分组依据字段(您的新字段或实际小时值)。
这声明了您的位变量(当他们想要 24 小时视图时应该为 true - 12 小时时为 false)
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 小时视图,我们将 hour = hour + hour % 2。(7 = 8、8=8、9=10,等等)。如果您有更复杂的查询,我建议您阅读交叉应用,但这很简单,我认为这就足够了。分组依据确保聚合 REAL 7 和 REAL 8 小时记录(如果使用 24 小时视图,它们都将返回为“8”)。如果您不对结果进行分组,您将获得两份 8 点钟记录 - 一份包含 REAL 7 小时总计,另一份包含 REAL 8 小时总计。
编辑:
由于您没有包含数据库的模式,我猜测 'Target' 是求和的值,但它也可以很容易地成为 'HourValue'。此外,我不知道您为什么需要 LineID,所以我在回答中省略了它。但如果它不准确,您可以轻松修改它。将来,您应该提供一些示例数据和您的数据库模式,这样其他人就不会被迫做出假设或猜测。