业务要求是从上一个工作日开始,每月有一个月份的报告。我如何实现?
一个月的月份 - 我的表达是:
=dateadd("m",-3,Today)
前一个工作日 - 我的表达是:
=DateAdd(DateInterval.Day
, Switch(DatePart(DateInterval.WeekDay, Today()) = 2, -3
,DatePart(DateInterval.WeekDay, Today()) = 1, -2
,True, -1)
, Today())
如何将这些表达式合并到一个表达式中,以便月份从上个工作日开始,而不是今天的日期?
谢谢,
答案 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)
如果有帮助,请告诉我。