# networkdays - 脚本和图表函数

networkdays 函数用于返回工作日的编号（周一至周五），在 start\_date 和 end\_date 之间，并将任何列出的可选 holiday考虑在内。

语法：

networkdays (start\_date, end\_date [, holiday])

返回数据类型： 整数

日历图表显示 networkdays 函数返回的日期范围

日历图表显示 networkdays 函数返回的日期范围

日历图表显示 networkdays 函数返回的日期范围 ![在此处添加文本.....!!!!!!](https://help.qlik.com/zh-CN/sense/May2025/Subsystems/Hub/Content/Resources/Images/scripting-functions-networkdays-general-calendar.png)

`networkdays` 函数具有以下限制：

* 没有修改工作日的方法。换言之，除了周一至周五的工作之外，没有办法修改区域或情况的函数。

* `holiday` 参数必须是字符串常数。不接受表达式。

参数

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

## 适用场景

当用户希望计算使用两个日期之间的工作周天数时，`networkdays()` 函数通常用作表达式的一部分。例如，如果用户希望计算员工在 PAYE（即收即付）合同中的总工资。

函数示例

| 示例 | 结果 |
| --- | --- |
| `networkdays ('12/19/2013', '01/07/2014')` | 返回 14。以下示例没有将假期考虑在内。 |
| `networkdays ('12/19/2013', '01/07/2014', '12/25/2013', '12/26/2013')` | 返回 12。以下示例将 12/25/2013 至 12/26/2013 的假期考虑在内。 |
| `networkdays ('12/19/2013', '01/07/2014', '12/25/2013', '12/26/2013', '12/31/2013', '01/01/2014')` | 返回 10。以下示例将两个假期考虑在内。 |

## 区域设置

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

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

## 示例 1 – 基本示例

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

#### 加载脚本和结果

概览

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

加载脚本包含：

* 包含项目 ID、开始日期和结束日期的数据集。该信息加载到名为 `Projects` 的表中。

* 日期字段已以 `DateFormat` 系统变量 (MM/DD/YYYY) 格式提供。

* 创建一个额外的字段 `net_work_days`，以计算每个项目所涉及的工作日数。

加载脚本

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

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

结果

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

* `id`

* `start_date`

* `end_date`

* `net_work_days`

结果表

| id | start\_date | end\_date | net\_work\_days |
| --- | --- | --- | --- |
| 1 | 01/01/2022 | 01/18/2022 | 12 |
| 2 | 02/10/2022 | 02/17/2022 | 6 |
| 3 | 05/17/2022 | 07/05/2022 | 36 |
| 4 | 06/01/2022 | 06/12/2022 | 8 |
| 5 | 08/10/2022 | 08/26/2022 | 13 |

由于没有计划的假日（这将出现在 `networkdays()` 函数的第三个参数中），函数从 `end_date` 中以及所有周末中减去 `start_date`，以计算两个日期之间的工作日数。

突出显示项目 5 工作日的日历图（无节假日）

突出显示项目 5 工作日的日历图（无节假日）

突出显示项目 5 工作日的日历图（无节假日）![8 月份的日历图，显示了 ID 为 5 的数据集中项目的工作日。此处突出显示了 2022 年 8 月 10 日至 26 日的所有工作日（周一至周五），不包括周六和周日。](https://help.qlik.com/zh-CN/sense/May2025/Subsystems/Hub/Content/Resources/Images/scripting-functions-networkdays-example-basic.png)

上面的日历以为 5 的 `id` 从视觉上勾勒出项目的轮廓。项目 5 于 2022 年 8 月 10 日星期三开始，2022 年 9 月 26 日结束。由于忽略了所有周六和周日，这两个日期之间（包括在内）有 13 个工作日。

## 示例 2 - 单假期

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

#### 加载脚本和结果

概览

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

加载脚本包含：

* 与上一个示例相同的数据集和场景。

* 日期字段已以 `DateFormat` 系统变量 (MM/DD/YYYY) 格式提供。

* 创建一个额外的字段 `net_work_days`，以计算每个项目所涉及的工作日数。

在这个例子中，2022 年 8 月 19 日有一天的假期。

加载脚本

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

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

结果

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

* `id`

* `start_date`

* `end_date`

* `net_work_days`

结果表

| id | start\_date | end\_date | net\_work\_days |
| --- | --- | --- | --- |
| 1 | 01/01/2022 | 01/18/2022 | 12 |
| 2 | 02/10/2022 | 02/17/2022 | 6 |
| 3 | 05/17/2022 | 07/05/2022 | 36 |
| 4 | 06/01/2022 | 06/12/2022 | 8 |
| 5 | 08/10/2022 | 08/26/2022 | 12 |

单个计划假日作为 `networkdays()` 函数中的第三个参数输入。

突出显示项目 5 工作日的日历图（单个假日）

突出显示项目 5 工作日的日历图（单个假日）

突出显示项目 5 工作日的日历图（单个假日）![8 月份的日历图，显示了 ID 为 5 的数据集中项目的工作日。此处突出显示了 2022 年 8 月 10 日至 26 日的所有工作日（周一至周五），其中 2022 年 8 月 19 日（节假日）除外。](https://help.qlik.com/zh-CN/sense/May2025/Subsystems/Hub/Content/Resources/Images/scripting-functions-networkdays-example-single-holiday.png)

上面的日历直观地勾勒了项目 5，展示了将假日包括在内的调整。这个假期发生在 2022 年 8 月 19 日星期五的项目 5 期间。因此，项目 5 的总 `net_work_days` 值减少了一天，从 13 天减少到 12 天。

## 示例 3 - 多个假期

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

#### 加载脚本和结果

概览

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

加载脚本包含：

* 与第一个示例相同的数据集和场景。

* 日期字段已以 `DateFormat` 系统变量 (MM/DD/YYYY) 格式提供。

* 创建一个额外的字段 `net_work_days`，以计算每个项目所涉及的工作日数。

然而，在本例中，有四个假期计划于 2022 年 8 月 18 日至 8 月 21 日。

加载脚本

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

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

结果

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

* `id`

* `start_date`

* `end_date`

* `net_work_days`

结果表

| id | start\_date | end\_date | net\_work\_days |
| --- | --- | --- | --- |
| 1 | 01/01/2022 | 01/18/2022 | 12 |
| 2 | 02/10/2022 | 02/17/2022 | 6 |
| 3 | 05/17/2022 | 07/05/2022 | 36 |
| 4 | 06/01/2022 | 06/12/2022 | 8 |
| 5 | 08/10/2022 | 08/26/2022 | 11 |

从 `networkdays()` 函数的第三个参数开始，以逗号分隔的列表形式输入四个计划假日。

突出显示项目 5 工作日的日历图（多个节假日）

突出显示项目 5 工作日的日历图（多个节假日）

突出显示项目 5 工作日的日历图（多个节假日）![8 月份的日历图，显示了 ID 为 5 的数据集中项目的工作日。此处突出显示了 2022 年 8 月 10 日至 26 日的所有工作日（周一至周五），其中 2022 年 8 月 18 日和 19 日（节假日）除外。](https://help.qlik.com/zh-CN/sense/May2025/Subsystems/Hub/Content/Resources/Images/scripting-functions-networkdays-example-multiple-holidays.png)

上面的日历直观地勾勒了项目 5，展示了将这些假日包括在内的调整。这段计划假期发生在项目 5 期间，其中两天发生在星期四和星期五。因此，项目 5 的总 `net_work_days` 值从 13 天减少到 11 天。

## 示例 4 - 单假期

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

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

概览

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

加载脚本包含：

* 与第一个示例相同的数据集和场景。

* 日期字段已以 DateFormat 系统变量 (MM/DD/YYYY) 格式提供。

2022 年 8 月 19 日有一天的假期。

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

加载脚本

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

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

结果

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

* id

* start\_date

* end\_date

创建以下度量：

= networkdays(start\_date,end\_date,’08/19/2022’)

结果表

| id | start\_date | end\_date | net\_work\_days |
| --- | --- | --- | --- |
| 1 | 01/01/2022 | 01/18/2022 | 12 |
| 2 | 02/10/2022 | 02/17/2022 | 6 |
| 3 | 05/17/2022 | 07/05/2022 | 36 |
| 4 | 06/01/2022 | 06/12/2022 | 8 |
| 5 | 08/10/2022 | 08/26/2022 | 12 |

单个计划假日作为 networkdays() 函数中的第三个参数输入。

日历图，显示带单个假日的净工作日（图表对象）

日历图，显示带单个假日的净工作日（图表对象）

日历图，显示带单个假日的净工作日（图表对象）![8 月份的日历图，显示了 ID 为 5 的数据集中项目的工作日。此处突出显示了 2022 年 8 月 10 日至 26 日的所有工作日（周一至周五），其中 2022 年 8 月 19 日（节假日）除外。](https://help.qlik.com/zh-CN/sense/May2025/Subsystems/Hub/Content/Resources/Images/scripting-functions-networkdays-example-chart-single-holiday.png)

上面的日历直观地勾勒了项目 5，展示了将假日包括在内的调整。这个假期发生在 2022 年 8 月 19 日星期五的项目 5 期间。因此，项目 5 的总 net\_work\_days 值减少了一天，从 13 天减少到 12 天。