SSRS月份月份日期表达式从上一个工作日开始

时间:2016-10-24 14:58:20

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

业务要求是从上一个工作日开始,每月有一个月份的报告。我如何实现?

一个月的月份 - 我的表达是:

=dateadd("m",-3,Today)

前一个工作日 - 我的表达是:

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

如何将这些表达式合并到一个表达式中,以便月份从上个工作日开始,而不是今天的日期?

谢谢,

1 个答案:

答案 0 :(得分:1)

您可以在开始营业日表达中使用上一个工作日表达式:

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

但是外部DATEADD函数可能会生成一个非工作日的日期,如果您的数据源与非工作日中的日期不匹配,则查询将返回该日期的行,如果您有非营业日期并且您不想报告它,则会出现问题。

为简单起见,我将创建一个名为ThreeMonthsPreviousDay的Hidden参数(检查参数属性中的隐藏属性无线电控件),将其设置为日期/时间数据类型,并使用默认值属性中的以下表达式。

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

现在您可以在上一个工作日之前3个月获得营业日期,因此请使用:

=DateAdd(DateInterval.Day,
  Switch(
    DatePart(DateInterval.WeekDay, Parameters!ThreeMonthsPreviousDay.Value) = 2, -3,
    DatePart(DateInterval.WeekDay, Parameters!ThreeMonthsPreviousDay.Value) = 1, -2,
    True, 0), 
 Parameters!ThreeMonthsPreviousDay.Value)

如果有帮助,请告诉我。