WORKDAY( ) 函数

返回两个日期之间的工作日数量。

语法

WORKDAY(开始日期, 结束日期 <,非工作日>)

参数

名称 类型 描述
开始日期

日期时间

要计算其工作日的期限的开始日期。开始日期包括在该期限中。

结束日期 日期时间 要计算其工作日的期限的结束日期。结束日期包括在该期限中。
非工作日

可选

字符

一周中是周末或非工作日并且被从计算中排除的日子。如果非工作日被省略,则周六和周日被用作默认的非工作日。

使用以下缩写输入非工作日,并且通过空格或逗号进行分隔:

  • Mon
  • Tue
  • Wed
  • Thu
  • Fri
  • Sat
  • Sun

非工作日不区分大小写。即使您使用的是 Analytics 的非英语版本,也必须用英语输入这些缩写:

"Fri, Sat, Sun"

说明

您可以为开始日期结束日期指定一个日期时间值,但该值的时间部分被忽略。

如果开始日期结束日期更晚,则返回一个负值。

输出

数值。要计算其工作日的期限的工作日数量。

示例

基本示例

字面量输入值

返回 5,即 2015 年 3 月 2 日(周一)和 2015 年 3 月 8 日(周日)(包括本日期)之间的工作日的数量。

WORKDAY(`20150302`, `20150308`)

当周日是唯一的非工作日时,返回 6,即 2015 年 3 月 2 日(周一)和 2015 年 3 月 8 日(周日)(包括本日期)之间的工作日的数量。

WORKDAY(`20150302`, `20150308`, "Sun")

当周五和周六是非工作日时,返回 5,即 2015 年 3 月 1 日(周日)和 2015 年 3 月 7 日(周六)(包括本日期)之间的工作日的数量。

WORKDAY(`20150301`, `20150307`, "Fri, Sat")

域输入值

返回开始日期域中的每个日期与 2015 年 12 月 31 日(包括本日期)之间的工作日的数量。

WORKDAY(开始日期, `20151231`)

返回开始日期域中的各个日期和结束日期域中的相应日期(包括本日期)之间的工作日的数量。

  • 法定节假日被包括在工作日合计中,可能需要使用单独的计算分解出去。
  • 负的返回值指示比结束日期更晚的开始日期。
WORKDAY(开始日期, 结束日期)

备注

日期格式

开始日期结束日期指定的域可以使用任何日期格式,前提是域定义正确定义了该格式。

在为开始日期结束日期指定字面量日期值时,您必须使用格式 YYYYMMDDYYMMDD,并且必须将值放在反引号中 — 例如,`20141231`

除周六和周日以外的非工作日

由于能够指定除周六和周日以外的非工作日,因此您可以对 WORKDAY( ) 函数使用非基于周一至周五工作周或五日工作周的数据。

例如,如果您指定 "Sun" 自身作为非工作日,则会创建一个从周一到周六的六天工作周。

考虑法定节假日

WORKDAY( ) 函数不考虑法定节假日,这意味着如果某个期限包含一个或多个法定节假日,则返回值可能无法反映该期限内的实际工作日数量。

ScriptHub 中的“计算工作日”脚本

如果您需要考虑法定节假日,则一个选择是使用 ScriptHub 中的计算工作日脚本,该脚本接受一个由用户定义的节假日列表。

对于覆盖较长期限且包括很多个节假日的数据,使用该脚本很可能是一种更容易的方法。有关详细信息,请参见《Analytics 帮助》中的“从 ScriptHub 导入脚本”。

对于只包含三到四个节假日的较短期限,如一个季度,您可能会发现创建如下所述的条件性计算域不是太费力。

用于扣除法定节假日的条件性计算域

如果需要,您可以创建一个条件性计算域,以便从 WORKDAY( ) 函数返回的值中扣除法定节假日。

例如,对于 2015 年的一季度数据,您可以为落入某个期间的下列每个节假日将 WORKDAY( ) 返回值减去 1:

  • 2015 年 1 月 1 日
  • 2015 年 1 月 19 日
  • 2015 年 2 月 16 日

下面的示例适应具有任何落入该季度的开始日期和结束日期的期限。

您将首先创建一个计算域,例如工作日,以计算该季度内指定期间的工作日:

DEFINE FIELD 工作日 COMPUTED WORKDAY(开始日期, 结束日期)

然后,您创建一个条件性计算域,例如不包含节假日的工作日,以调整由第一个计算域(工作日)返回的值:

DEFINE FIELD 不包含节假日的工作日 COMPUTED
 
工作日-1 IF 开始日期 = `20150101` AND 结束日期 < `20150119`
工作日-2 IF 开始日期 = `20150101` AND 结束日期 < `20150216`
工作日-3 IF 开始日期 = `20150101` AND 结束日期 <= `20150331`
工作日   IF 开始日期 < `20150119` AND 结束日期 < `20150119`
工作日-1 IF 开始日期 < `20150119` AND 结束日期 < `20150216`
工作日-2 IF 开始日期 < `20150119` AND 结束日期 <= `20150331`
工作日-1 IF 开始日期 = `20150119` AND 结束日期 < `20150216`
工作日-2 IF 开始日期 = `20150119` AND 结束日期 <= `20150331`
工作日   IF 开始日期 < `20150216` AND 结束日期 < `20150216`
工作日-1 IF 开始日期 < `20150216` AND 结束日期 <= `20150331`
工作日-1 IF 开始日期 = `20150216` AND 结束日期 <= `20150331`
工作日   IF 开始日期 < `20150331` AND 结束日期 <= `20150331`
工作日

说明

条件计算域中条件的顺序很重要。

Analytics 从顶部开始对多个条件进行求值。对某个记录求值为真的第一个条件为该记录分配该条件性计算域的值。求值为真的后续条件不会更改已分配的值。

ACL 脚本指南 14.1