SSRS:如何通过表达式返回自定义/财务月(非日历)的最后一天

时间:2017-11-14 13:20:56

标签: reporting-services ssrs-2008 ssrs-tablix

这是一个真正的拔毛器所以任何帮助,非常感谢!

我希望能够确定:

  • 当前自定义/财政月的第一天
  • 当前自定义/财政月的最后一天

并在Matrix中的过滤器之间使用这些新列Start_Dateend_Date

注意:我知道如果这是日历月,那么这将是“相当”直截了当的。

但在这种情况下它完全不同。

请参阅图片,该图片可能有助于我正在尝试使用的上下文:

enter image description here

1 个答案:

答案 0 :(得分:0)

我确信这可以使用SSRS中的表达式,但我没有时间进行调查。如果它有用,请按照以下方式在SQL中进行操作。

同样可能有更优雅的解决方案,但这就是我的想法。

我会根据您的样本再现您的数据以及更多的日期,以便进行测试。

DECLARE @t TABLE(Custom_Date date, Custom_Day int)

INSERT INTO @t VALUES
('2017-10-26', 28),
('2017-10-27', 29),
('2017-10-28', 30),
('2017-10-29', 1),
('2017-10-30', 2),
('2017-10-31', 3),
('2017-11-01', 4),
('2017-11-02', 5),
('2017-11-03', 6),
('2017-11-04', 7),
('2017-11-05', 8),
('2017-11-06', 9),
('2017-11-07', 10),
('2017-11-08', 11),
('2017-11-09', 12),
('2017-11-10', 13),
('2017-11-11', 14),
('2017-11-12', 15),
('2017-11-13', 16),
('2017-11-14', 17),
('2017-11-15', 18),
('2017-11-16', 19),
('2017-11-17', 20),
('2017-11-18', 21),
('2017-11-19', 22),
('2017-11-20', 23),
('2017-11-21', 24),
('2017-11-22', 25),
('2017-11-23', 26),
('2017-11-24', 27),
('2017-11-25', 28),
('2017-11-26', 1),
('2017-11-27', 2),
('2017-11-28', 3)

然后两个查询来提取正确的日期,如果需要,可以将它们组合在一起。

SELECT MAX(Custom_Date) FROM @t WHERE Custom_Date < getdate() AND custom_day = 1

SELECT MAX(Custom_Date) 
    FROM @t 
    WHERE 
        Custom_Date > getdate() 
        AND DATEDIFF(d, getdate(), Custom_Date)<=31 
        AND Custom_Day = (
                            SELECT MAX(custom_day) 
                                FROM @t 
                                WHERE 
                                    Custom_Date > getdate() 
                                    AND datediff(d, getdate(), Custom_Date)<=31
                        )

仅供参考:如果您在日期表中有自定义月份/期间和年份,那么这将更加容易,因为您可以查看custom_day 1和max(custom_day)自定义月份和年份与当前日期相同。