我的报告中有2个参数,月份和年份。
我还有一个表,在一列中包含该特定月份的行数,另一列包含该特定月份和接下来的5个月(滚动6个月)的行数。
这两列都有一个表达式链接到参数,如下所示:
月份表达:
6个月表达: 我的参数使用了我输入的特定值(1 - 12)所以当我的滚动月份每次增加1个值时,你可能会猜到当我接近一年后几个月时这不会起作用,因为我的表达式没有滚动到明年,在12月停止。
概述:参数是1到12的整数值,我不知道如何计算滚动的6个月,这将在一年中选择月份时延续到下一年。例如如果我选择11月作为我的月份参数,我滚动的6个月将只显示11月和12月的行数,而不会显示到下一年。我假设这是因为我的月份值是整数,并且在我的表达式中,我每个月都会为整数添加数字,因此我的滚动6将尝试添加11,12,13,14,15,16个月,显然几个月只会去到12岁。
答案 0 :(得分:3)
这不是你问题的答案,但是看看这个,你或许可以找到一个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]