简体   繁体   English

SSRS-如何使用SSRS表情拉出上周五

[英]SSRS - How to pull previous Friday with SSRS expression

I'm needing help to pull the previous business days and excluding the weekends in SSRS. 我需要帮助来缩短以前的工作日,并且不包括SSRS中的周末。 I use the following code, however this code doesn't look past the weekends. 我使用以下代码,但是该代码不会在周末结束。

Here's the code I normally use: 这是我通常使用的代码:

=DateAdd(DateInterval.Day
, Switch(DatePart(DateInterval.WeekDay, Today()) = 2, -3
,DatePart(DateInterval.WeekDay, Today()) = 1, -2
,True, -1)
, Today())

Does anyone have any thoughts on how to write an SSRS expression to look past the weekends and pull only business days? 是否有人想过如何编写SSRS表达式以查看周末并仅在工作日内结束?

You may have a different first day of the week set (depending on region or how the server is configured). 您可能设置了一周的第一天(取决于区域或服务器的配置方式)。 Explicitly setting FirstDayOfWeek in the DatePart function should give consistent results regardless of this setting: 不管此设置如何,在DatePart函数中显式设置FirstDayOfWeek应该会给出一致的结果:

=DateAdd(DateInterval.Day
    , Switch(DatePart(DateInterval.WeekDay, Today(), FirstDayOfWeek.Sunday) = 2, -3
        ,DatePart(DateInterval.WeekDay, Today(), FirstDayOfWeek.Sunday) = 1, -2
        ,True, -1)
    , Today())

Continued exploring this and worked with others here...This is what we came up with to look to the previous business day and exclude the weekends when pulling the report on a Monday. 继续探索此问题并在这里与其他人一起工作...这就是我们想到的上一个工作日,而排除了在星期一提取报表时的周末的想法。 This expression would be added to the date parameter. 该表达式将添加到date参数。

=Switch(WeekdayName(DatePart("w", Today)) = "Wednesday",DateAdd(DateInterval.Day
    , Switch(DatePart(DateInterval.WeekDay, Today()) = 2, -3
 ,DatePart(DateInterval.WeekDay, Today()) = 1, -2,True, -2)    , Today()),

    WeekdayName(DatePart("w", Today)) = "Thursday",DateAdd(DateInterval.Day
    , Switch(DatePart(DateInterval.WeekDay, Today()) = 2, -3
 ,DatePart(DateInterval.WeekDay, Today()) = 1, -2,True, -2)    , Today()),

    WeekdayName(DatePart("w", Today)) = "Friday",DateAdd(DateInterval.Day
    , Switch(DatePart(DateInterval.WeekDay, Today()) = 2, -3
 ,DatePart(DateInterval.WeekDay, Today()) = 1, -2,True, -2)    , Today()),

    WeekdayName(DatePart("w", Today)) = "Saturday",DateAdd(DateInterval.Day
    , Switch(DatePart(DateInterval.WeekDay, Today()) = 2, -3
 ,DatePart(DateInterval.WeekDay, Today()) = 1, -2,True, -2)   , Today()),

    WeekdayName(DatePart("w", Today)) = "Sunday",DateAdd(DateInterval.Day
    , Switch(DatePart(DateInterval.WeekDay, Today()) = 2, -3
 ,DatePart(DateInterval.WeekDay, Today()) = 1, -2,True, -3)    , Today()),

    WeekdayName(DatePart("w", Today)) = "Monday",DateAdd(DateInterval.Day
    , Switch(DatePart(DateInterval.WeekDay, Today()) = 2, -3
 ,DatePart(DateInterval.WeekDay, Today()) = 1, -2,True, -4)    , Today()),

    WeekdayName(DatePart("w", Today)) = "Tuesday",DateAdd(DateInterval.Day
    , Switch(DatePart(DateInterval.WeekDay, Today()) = 2, -3
 ,DatePart(DateInterval.WeekDay, Today()) = 1, -2,True, -2)    , Today())

)

If you want to default a date parameter to Friday when the report runs on a Monday (otherwise the default is the prior day), try this: 如果要将报表在星期一运行时将日期参数默认为星期五(否则默认为前一天),请尝试以下操作:

=DateAdd(DateInterval.Day, IIf(DatePart(DateInterval.Weekday, Today) = 2, -3, -1), Today)

This may be all you really need. 这可能就是您真正需要的。

The following expression can be used to default a date parameter to the prior Friday, no matter what day of the week the report is run on. 无论报表在一周的哪一天运行,都可以使用以下表达式将日期参数默认为上一个星期五。 This can have some value for weekly reporting. 这对于每周报告可能会有一些价值。

=DateAdd(DateInterval.Day, -(DatePart(DateInterval.Weekday, DateAdd(DateInterval.Day, 1, Today), 0, 0)), Today)

This expression will also pull the previous business day, which I've been using lately. 这种表达方式也将拉动我最近一直在使用的上一个工作日。 Just need to update your Date Parameter with this code. 只需使用此代码更新您的Date参数。

=DateAdd("d",Switch(DatePart("w", Today) = 2,-3,DatePart("w", Today) = 1,-2,True,-1),Today)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM