0

我正在 Microsoft SQL Server Report Builder 中处理报告,我正在尝试编写一个表达式,该表达式仅显示从今天起接下来的 5 个工作日(即一个表有 5 列,它从今天开始并继续进行接下来的五个业务天)。如果这一天是星期六或星期日,使用我的枚举值将使用该函数返回 6 或 7 Weekday,那么您将跳到下一个工作日。目前我在今天日期的列之后的第一列有这个表达式

IIf(Weekday(DateAdd("d",1,Today()),2)=6,DateAdd("d",3,Today()),
(IIf(Weekday(DateAdd("d",1,Today()),2)=7,DateAdd("d",2,Today()),
DateAdd("d",1,Today()))))

它不起作用。我相信这是因为如果我们有像周三、周四或周五这样的日子,周末的日子就没有足够的日子被跳过。

4

2 回答 2

2

如果我们可以假设您将从工作日开始,那么我们可以使用一个简单的公式:

=IIF(6 - WeekDay(Today()) - X < 0, DateAdd("d", X + 2, Today()), DateAdd("d", X, Today()))

其中X是该列距开始日期的天数。

不幸的是,如果开始日期是周六或周日,它就会崩溃,但如果您只需要在工作日使用它,那么您就可以开始了。

于 2012-12-13T02:33:31.380 回答
1

我认为您必须使用上一列值而不是使用 Today() 所以在第一列中它将是当前日期。(如果可以从周末开始,则应用相同的公式)。我认为在这种情况下开关盒更容易。

当前日期列的公式

=switch (
Weekday(today) = 6, dateadd("d", 2, today),
Weekday(today) = 7, dateadd("d", 1, today),
Weekday(today) < 6, today
)

在第二列而不是 today() 中使用“Fields!previous_column_name.Value”。

=switch (
Weekday(dateadd("d", 1, Fields!previous_column_name.Value)) = 6, dateadd("d", 3, Fields!previous_column_name.Value),
Weekday(dateadd("d", 1, Fields!previous_column_name.Value)) = 7, dateadd("d", 2, Fields!previous_column_name.Value),
Weekday(dateadd("d", 1, Fields!previous_column_name.Value)) < 6, dateadd("d", 1, Fields!previous_column_name.Value)
)

在第三列中使用第二列作为previous_column。

希望这会帮助你。

于 2012-12-13T08:21:30.267 回答