# lastworkdate - 脚本和图表函数

lastworkdate 函数用于返回最早的结束日以获得 no\_of\_workdays（周一至周五），如果在 start\_date 开始考虑任何列出的可选 holiday。start\_date 和 holiday 应是有效的日期或时间戳。

语法：

lastworkdate(start\_date, no\_of\_workdays {, holiday})

返回数据类型： 整数

显示如何使用 `lastworkdate()` 函数的日历

显示如何使用 `lastworkdate()` 函数的日历

显示如何使用 `lastworkdate()`lastworkdate() 函数的日历 ![显示一个月的日历的图表。](https://help.qlik.com/zh-CN/sense/November2024/Subsystems/Hub/Content/Resources/Images/scripting-functions-lastworkdate-diagram1.png)

限制

除了周一开始到周五结束的工作周之外，没有任何方法可以修改区域或场景的 `lastworkdate()` 函数。

假日参数必须是字符串常数。它不接受表达式。

适用场景

`lastworkdate()` 函数通常用作表达式的一部分，当用户希望根据项目开始的时间和该期间将发生的假期计算项目或作业的建议结束日期时。

## 区域设置

除非另有规定，本主题中的示例使用以下日期格式：MM/DD/YYYY。日期格式已经在数据加载脚本中的 `SET DateFormat` 语句中指定。由于区域设置和其他因素，系统中的默认日期格式可能有所不同。您可以更改以下示例中的格式以满足您的要求。或者，您可以更改加载脚本中的格式以匹配这些示例。

应用程序中的默认区域设置基于安装 Qlik Sense 的计算机或服务器的区域系统设置。如果您访问的 Qlik Sense 服务器设置为瑞典，则数据加载编辑器将使用瑞典地区设置的日期、时间和货币。这些区域格式设置与 Qlik Sense 用户界面中显示的语言无关。Qlik Sense 将以与您使用的浏览器相同的语言显示。

参数

| 参数 | 说明 |
| --- | --- |
| start\_date | 评估的开始日期。 |
| no\_of\_workdays | 要实现的工作日天数。 |
| holiday | 从工作日排除假期。假日表示为字符串常量日期。您可以指定多个假期日期，以逗号分隔。<br><br>示例： `  '12/25/2013', '12/26/2013', '12/31/2013', '01/01/2014' ` |

## 示例 1 – 基本示例

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/DateAndTimeFunctions/lastworkdate.htm)

#### 加载脚本和结果

概述

打开数据加载编辑器，并将下面的加载脚本添加到新选项卡。

加载脚本包含：

* 包含项目 ID、项目开始日期和项目所需的估计工作量（以天为单位）的数据集。数据集加载到名为 ‘`Projects`’ 的表中。

* 包含设置为字段 ‘`end_date`’ 并标识每个项目计划何时结束的 `lastworkdate()` 函数的前置 Load。

加载脚本

```
SET DateFormat='MM/DD/YYYY'; 

Projects: 
    Load 
       *, 
       LastWorkDate(start_date,effort) as end_date 
       ; 
Load 
id, 
start_date, 
effort 
Inline  
[	 
id,start_date,effort 
1,01/01/2022,14 
2,02/10/2022,17 
3,05/17/2022,5 
4,06/01/2022,12 
5,08/10/2022,26 
]; 
```

结果

加载数据并打开工作表。创建新表并将这些字段添加为维度：

* `id`
* `start_date`
* `effort`
* `end_date`

结果表

| id | start\_date | effort | end\_date |
| --- | --- | --- | --- |
| 1 | 01/01/2022 | 14 | 01/20/2022 |
| 2 | 02/10/2022 | 17 | 03/04/2022 |
| 3 | 05/17/2022 | 5 | 05/23/2022 |
| 4 | 06/01/2022 | 12 | 06/16/2022 |
| 5 | 08/10/2022 | 26 | 09/14/2022 |

由于没有计划的假日，该函数将定义的工作日数（星期一到星期五）添加到开始日期，以找到最早可能的结束日期。

以下日历显示项目 3 的开始和结束日期，工作日以绿色突出显示。

显示项目 3 开始和结束日期的日历

显示项目 3 开始和结束日期的日历

显示项目 3 开始和结束日期的日历 ![图中显示了项目 3 的开始日期为 5 月 17 日，最后一个工作日为 5 月 23 日，总共五个工作日。](https://help.qlik.com/zh-CN/sense/November2024/Subsystems/Hub/Content/Resources/Images/scripting-functions-lastworkdate-example1-diagram.png)

## 示例 2 - 单假期

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/DateAndTimeFunctions/lastworkdate.htm)

#### 加载脚本和结果

概述

打开数据加载编辑器，并将下面的加载脚本添加到新选项卡。

加载脚本包含：

* 包含项目 ID、项目开始日期和项目所需的估计工作量（以天为单位）的数据集。数据集加载到名为 ‘`Projects`’ 的表中。

* 包含设置为字段 ‘`end_date`’ 并标识每个项目计划何时结束的 `lastworkdate()` 函数的前置 Load。

然而，2022 年 5 月 18 日有一个假期。前置 Load 中的 `lastworkdate()` 函数在其第三个参数中包含假日，以标识每个项目计划何时结束。

加载脚本

```
SET DateFormat='MM/DD/YYYY'; 

Projects: 
    Load 
       *, 
       LastWorkDate(start_date,effort, '05/18/2022') as end_date 
       ; 
Load 
id, 
start_date, 
effort 
Inline  
[	 
id,start_date,effort 
1,01/01/2022,14 
2,02/10/2022,17 
3,05/17/2022,5 
4,06/01/2022,12 
5,08/10/2022,26 
]; 
```

结果

加载数据并打开工作表。创建新表并将这些字段添加为维度：

* `id`
* `start_date`
* `effort`
* `end_date`

结果表

| id | start\_date | effort | end\_date |
| --- | --- | --- | --- |
| 1 | 01/01/2022 | 14 | 01/20/2022 |
| 2 | 02/10/2022 | 17 | 03/04/2022 |
| 3 | 05/17/2022 | 5 | 05/24/2022 |
| 4 | 06/01/2022 | 12 | 06/16/2022 |
| 5 | 08/10/2022 | 26 | 09/14/2022 |

单个计划假日作为 `lastworkdate()` 函数中的第三个参数输入。因此，项目 3 的结束日期推迟了一天，因为假期发生在结束日期之前的一个工作日。

下面的日历显示项目 3 的开始和结束日期，并显示假日将项目的结束日期更改一天。

显示项目 3 开始和结束日期的日历，5 月 18 日为假日

显示项目 3 开始和结束日期的日历，5 月 18 日为假日

显示项目 3 开始和结束日期的日历，5 月 18 日为假日 ![图中显示项目 3 的开始日期为 5 月 17 日，假期为 5 月 18 日。](https://help.qlik.com/zh-CN/sense/November2024/Subsystems/Hub/Content/Resources/Images/scripting-functions-lastworkdate-example2-diagram.png)

## 示例 3 - 多个假期

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/DateAndTimeFunctions/lastworkdate.htm)

#### 加载脚本和结果

概述

打开数据加载编辑器，并将下面的加载脚本添加到新选项卡。

加载脚本包含：

* 包含项目 ID、项目开始日期和项目所需的估计工作量（以天为单位）的数据集。数据集加载到名为 ‘`Projects`’ 的表中。

* 包含设置为字段 ‘`end_date`’ 并标识每个项目计划何时结束的 `lastworkdate()` 函数的前置 Load。

然而，5 月 19 日、20 日、21 日和 22 日有三个假期。前置 Load 中的 `lastworkdate()` 函数在其第三个参数中包含每个假日，以确定每个项目计划何时结束。

加载脚本

```
SET DateFormat='MM/DD/YYYY'; 

Projects: 
    Load 
       *, 
       LastWorkDate(start_date,effort, '05/19/2022','05/20/2022','05/21/2022','05/22/2022') as end_date 
       ; 
Load 
id, 
start_date, 
effort 
Inline  
[	 
id,start_date,effort 
1,01/01/2022,14 
2,02/10/2022,17 
3,05/17/2022,5 
4,06/01/2022,12 
5,08/10/2022,26 
]; 
```

结果

加载数据并打开工作表。创建新表并将这些字段添加为维度：

* `id`
* `start_date`
* `effort`
* `end_date`

结果表

| id | start\_date | effort | end\_date |
| --- | --- | --- | --- |
| 1 | 01/01/2022 | 14 | 01/20/2022 |
| 2 | 02/10/2022 | 17 | 03/04/2022 |
| 3 | 05/17/2022 | 5 | 05/25/2022 |
| 4 | 06/01/2022 | 12 | 06/16/2022 |
| 5 | 08/10/2022 | 26 | 09/14/2022 |

这四个假期在开始日期和工作日数之后作为参数列表输入 `lastworkdate()` 函数中。

以下日历显示项目 3 的开始和结束日期，并显示节假日将项目的结束日期更改三天。

显示项目 3 的开始和结束日期的日历，假期为 5 月 19 日至 22 日

显示项目 3 的开始和结束日期的日历，假期为 5 月 19 日至 22 日

显示项目 3 的开始和结束日期的日历，假期为 5 月 19 日至 22 日 ![图中显示了项目 3 的开始日期为 5 月 17 日，最后一个工作日期为 5 日 25 日，四个额外的假期将最后一个上班日期推迟了三天，其中两个假期在周六和周日。](https://help.qlik.com/zh-CN/sense/November2024/Subsystems/Hub/Content/Resources/Images/scripting-functions-lastworkdate-example3-diagram.png)

## 示例 4 - 单假期（图表）

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/DateAndTimeFunctions/lastworkdate.htm)

#### 加载脚本和图表表达式

概述

使用与第一个 相同的数据集和场景。

然而，在本例中，未更改的数据集被加载到应用程序中。`end_date` 字段作为图表对象中的度量计算。

加载脚本

```
SET DateFormat='MM/DD/YYYY'; 

Projects: 
Load 
id, 
start_date, 
effort 
Inline  
[	 
id,start_date,effort 
1,01/01/2022,14 
2,02/10/2022,17 
3,05/17/2022,5 
4,06/01/2022,12 
5,08/10/2022,26 
]; 
```

结果

加载数据并打开工作表。创建新表并将这些字段添加为维度：

* `id`
* `start_date`
* `effort`

要计算 end\_date，创建以下度量：

* `=LastWorkDate(start_date,effort,'05/18/2022')`

结果表

| id | start\_date | effort | =LastWorkDate(start\_date,effort,'05/18/2022') |
| --- | --- | --- | --- |
| 1 | 01/01/2022 | 14 | 01/20/2022 |
| 2 | 02/10/2022 | 17 | 03/04/2022 |
| 3 | 05/17/2022 | 5 | 05/23/2022 |
| 4 | 06/01/2022 | 12 | 06/16/2022 |
| 5 | 08/10/2022 | 26 | 09/14/2022 |

在图表中输入单个计划假日作为度量。因此，项目 3 的结束日期推迟了一天，因为假期发生在结束日期之前的一个工作日。

下面的日历显示项目 3 的开始和结束日期，并显示假日将项目的结束日期更改一天。

显示项目 3 开始和结束日期的日历，5 月 18 日为假日

显示项目 3 开始和结束日期的日历，5 月 18 日为假日

显示项目 3 开始和结束日期的日历，5 月 18 日为假日 ![图中显示项目 3 的开始日期为 5 月 17 日，假期为 5 月 18 日。](https://help.qlik.com/zh-CN/sense/November2024/Subsystems/Hub/Content/Resources/Images/scripting-functions-lastworkdate-example2-diagram.png)