SSRS 逐月日期表达式从前一个工作日开始

SSRS Month over Month Date Expression beginning with Previous business day

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

月复一月 - 我的表达是:

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

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

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

我怎样才能将这些组合成一个表达式,以便逐月从前一个工作日而不是今天开始?

谢谢,

您可以在开始工作日表达式中使用您之前的工作日表达式:

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

然而,外部 DATEADD 函数可能会生成一个非工作日的日期,如果您的数据源与非工作日的日期不匹配,您的查询将从该日期开始 return 行这不是问题,当您有非营业日期并且您不想报告时,问题就来了。

为简单起见,我将创建一个名为 ThreeMonthsPreviousDay 的隐藏参数(检查参数属性中的隐藏 属性 单选控件),将其设置为 Date/Time 数据类型并在默认值 属性.

=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)

如果有帮助请告诉我。