【问题标题】:Rolling 6 Months滚动 6 个月
【发布时间】:2014-08-21 17:34:24
【问题描述】:

我的报告中有 2 个参数,月份和年份。

我还有一个表格,其中一列包含该特定月份的行数,另一列包含该特定月份和接下来 5 个月(滚动 6 个月)的行数。

这两列都有一个链接到参数的表达式,如下所示:

月份表达式:

6 个月表达式: 我的参数使用我输入的特定值(1 - 12),所以当我的滚动月份每次添加 1 个值时,您可能会猜到,当我接近一年的最后几个月时,这将不起作用,因为我的表达式没有翻转到明年,直到十二月才停止。

概述:参数是整数值1-12,我不确定如何计算6个月的滚动,这将延续到明年的明年,当时在一年中晚些时候选择月份。例如如果我选择 11 月作为我的月份参数,我的滚动 6 个月将只显示 11 月和 12 月的行总和,而不是下一年。我假设这是因为我的月份值是整数,并且在我的表达式中我将数字添加到每个月的整数中,因此我的滚动 6 将尝试添加月份 11、12、13、14、15、16,而显然只有几个月到 12 点。

【问题讨论】:

  • 杰克你在用 TSQL 吗?
  • @JithinShaji 我不知道,我想我只是在使用普通 SQL
  • 我的意思是你正在使用 SQL Server,对吧
  • @JithinShaji 是的,SQL Server 管理工作室

标签: sql date reporting-services ssms


【解决方案1】:

这不是你问题的答案,但看看这个,你也许可以找到 SQL 本身的解决方案。

请参阅下面的查询。将此视为您的报告源 sql。

DECLARE @A TABLE (ID INT IDENTITY(1,1),DT DATE)
INSERT INTO @A (DT) 
VALUES
('2013-01-26'),('2013-02-23'),('2013-03-20'),
('2013-04-23'),('2013-05-23'),('2013-07-23'),
('2013-08-23'),('2013-08-29'),('2013-09-23'),
('2013-12-10'),('2014-03-01')

如果你将结果与自身连接起来,如下所示,你将在 sql 查询本身中得到结果,你只需要在报告中显示它。见下文。

SELECT  DATEPART(YEAR,DT) [Y],DATEPART(MONTH,DT) [M],COUNT(*) [ROLLING 6] 
FROM    (
        SELECT  A.*
        FROM    @A A,@A B
        WHERE   ((DATEPART(YEAR,B.DT) * 12) + DATEPART(MONTH,B.DT)) BETWEEN 
                (DATEPART(YEAR,A.DT) * 12) + DATEPART(MONTH,A.DT) AND 
                ((DATEPART(YEAR,A.DT) * 12) + DATEPART(MONTH,A.DT) + 6)) LU
GROUP   BY DATEPART(YEAR,DT),DATEPART(MONTH,DT)
ORDER   BY [Y],[M]

【讨论】:

  • 肯定比根据规则“你可以用 SQL 实现什么,用它来实现”的 SSRS 表达式更好:P
  • @JithinShaji 感谢您的回复,我会尝试这种方式而不是表达方式,现在我想它更有意义。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
  • 2017-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-23
相关资源
最近更新 更多