【问题标题】:SSRS Month over Month Date Expression beginning with Previous business daySSRS 月比月日期表达式从上一个工作日开始
【发布时间】:2016-10-24 23:45:16
【问题描述】:

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

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

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

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

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

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

谢谢,

【问题讨论】:

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


    【解决方案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 参数(检查 Parameter 属性中的 Hidden 属性单选控件),将其设置为 Date/Time 数据类型并在 Default Values 属性中使用以下表达式。

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

    如果这有帮助,请告诉我。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-26
      • 1970-01-01
      • 1970-01-01
      • 2020-07-02
      • 2019-09-27
      • 1970-01-01
      相关资源
      最近更新 更多