# weekday 脚本和图表功能

此函数用于返回包含以下名称的对偶值：

* 在环境变量 DayNames 中定义的日期名称。
* 介于 0-6 之间的整数对应于一周 (0-6) 的标定天。

语法：

weekday(date [,first\_week\_day=0])

返回数据类型： 双

`weekday()` 函数确定日期发生在一周中的哪一天。然后，它返回表示当天的字符串值。

返回日期所在日期名称的 `weekday()` 函数图表

返回日期所在日期名称的 `weekday()` 函数图表

返回日期所在日期名称的 `weekday()`weekday() 函数图表 ![显示 weekday() 函数的图表，该函数返回日期所在的日的名称。](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Resources/Images/scripting-functions-weekday-diagram1.png)

结果根据一周的开始日期返回与一周的那一天 (0-6) 对应的数值。例如，如果一周的第一天设置为星期天，星期三将返回 `3` 的数值。该开始日期由 `FirstWeekDay` 系统变量或 `first_week_day` 函数参数确定。

可以将此数值用作算术表达式的一部分。例如，将其乘以 `1` 以返回值本身。

显示日期数值而不是日期名称的函数 `weekday()` 的图表

显示日期数值而不是日期名称的函数 `weekday()` 的图表

显示日期数值而不是日期名称的函数 `weekday()`weekday() 的图表 ![显示 weekday() 函数的图表可以返回与所标识的日期相对应的数值。](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Resources/Images/scripting-functions-weekday-diagram2.png)

适合使用 weekday 的情况

当您希望按星期几比较聚合时，`weekday()` 函数非常有用。例如，如果您想比较平日产品的平均销售额。

可以使用函数在主日历表中创建字段，在加载脚本中创建这些维度；或者直接在图表中创建作为计算的度量。

相关主题

| 主题 | 交互 |
| --- | --- |
| [FirstWeekDay](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/NumberInterpretationVariables/FirstWeekDay.htm) | 定义每周的开始日期。 |

| <ul> </ul> |
| --- |

参数

| 参数 | 描述 |
| --- | --- |
| date | 要评估的日期或时间戳。 |
| first\_week\_day | 指定一周的开始日期。如果忽略，使用 FirstWeekDay 变量的值。<br><br>[FirstWeekDay](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/NumberInterpretationVariables/FirstWeekDay.htm) |

可以使用以下值在 `first_week_day` 参数中设置一周开始的日期：

first\_week\_day 值

| 日 | 值 |
| --- | --- |
| 星期一 | 0 |
| 星期二 | 1 |
| 星期三 | 2 |
| 星期四 | 3 |
| 星期五 | 4 |
| 星期六 | 5 |
| 星期日 | 6 |

## 区域设置

除非另有规定，本主题中的示例使用以下日期格式：MM/DD/YYYY。日期格式已经在数据加载脚本中的 `SET DateFormat` 语句中指定。由于区域设置和其他因素，系统中的默认日期格式可能有所不同。您可以更改以下示例中的格式以满足您的要求。或者，您可以更改加载脚本中的格式以匹配这些示例。有关更多信息，请参阅[修改应用程序和脚本的区域设置](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/Apps/regional-settings-in-apps.htm)。

应用程序中的默认区域设置基于用户配置文件。这些区域格式设置与 Qlik Cloud 用户界面中显示的语言无关。Qlik Cloud 将以与您使用的浏览器相同的语言显示。

如果你是应用程序创建者，你可以为自己创建的应用程序设置默认区域。有关更多信息，请参阅[设置 Qlik Cloud Analytics 中创建应用程序和脚本所用的首选区域设置](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/UserInterface/Languages.htm#Setting)。

信息注释在以下示例中，`FirstWeekDay` 设置为 `0`（除非另有说明）。

函数示例

| 示例 | 结果 |
| --- | --- |
| `weekday('10/12/1971')` | 返回 “Tue” 和 1。 |
| `weekday('10/12/1971' , 6)` | 返回 “Tue” 和 2。<br><br>在此示例中，Sunday (`6`) 作为一周的第一天。 |
| `SET FirstWeekDay=6;`<br><br>`...`<br><br>`weekday('10/12/1971')` | 返回 “Tue” 和 2。 |

## 示例 1 - 工作日字符串

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

#### 加载脚本和结果

概述

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

加载脚本包含：

* 包含 2022 年交易集的数据集，该数据集加载到名为 ‘`Transactions`’ 的表中。

* 设置为 6（星期日）的 `FirstWeekDay` 系统变量。

* 设置为使用默认日期名称的 `DayNames` 变量。

* 包含 `weekday()` 函数的前置 Load，该函数设置为 ‘`week_day`’ 字段，并返回事务发生的工作日。

加载脚本

```
SET DateFormat='MM/DD/YYYY'; 
SET DayNames='Mon;Tue;Wed;Thu;Fri;Sat;Sun'; 
SET FirstWeekDay=6; 
 
Transactions: 
    Load 
       *, 
       WeekDay(date) as week_day 
       ; 
Load 
* 
Inline  
[ 
id,date,amount 
8188,01/01/2022,37.23 
8189,01/02/2022,17.17 
8190,01/03/2022,88.27 
8191,01/04/2022,57.42 
8192,01/05/2022,53.80 
8193,01/06/2022,82.06 
8194,01/07/2022,40.39 
]; 
```

结果

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

* `id`
* `date`
* `week_day`

结果表

| id | 日期 | week\_day |
| --- | --- | --- |
| 8188 | 01/01/2022 | Sat |
| 8189 | 01/02/2022 | Sun |
| 8190 | 01/03/2022 | Mon |
| 8191 | 01/04/2022 | Tue |
| 8192 | 01/05/2022 | Wed |
| 8193 | 01/06/2022 | Thu |
| 8194 | 01/07/2022 | Fri |

通过使用 `weekday()` 函数并将日期字段作为函数的参数传递，在前置 Load 语句中创建了 ‘`week_day`’ 字段。

`weekday()` 函数返回工作日字符串值；也就是说，它返回由 `DayNames` 系统变量设置的工作日的名称。

返回周三作为交易 8192 的工作日的 `weekday()` 函数的图表

返回周三作为交易 8192 的工作日的 `weekday()` 函数的图表

返回周三作为交易 8192 的工作日的 `weekday()`weekday() 函数的图表 ![显示 weekday() 函数返回周三作为交易 8192 的工作日的图表。](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Resources/Images/scripting-functions-weekday-examples1_and3-diagram.png)

交易 8192 发生在 1 月 5 日。`FirstWeekDay` 系统变量将一周的第一天设置为星期天。`weekday()` 函数交易发生在星期三，并在 `week_day` 字段中以 `DayNames` 系统变量的缩写形式返回该值。

‘`week_day`’ 字段中的值在列中右对齐，因为该字段有双数字和文本结果（周三，3）。要将字段值转换为等效的数字，可以将字段包装在 `num()` 函数中。例如，在交易 8192 中，周三值将转换为数字 3。

## 示例 2 – first\_week\_day

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

#### 加载脚本和结果

概述

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

加载脚本包含：

* 包含 2022 年交易集的数据集，该数据集加载到名为 ‘`Transactions`’ 的表中。

* 设置为 6（星期日）的 `FirstWeekDay` 系统变量。

* 设置为使用默认日期名称的 `DayNames` 变量。

* 包含 `weekday()` 函数的前置 Load，该函数设置为 ‘`week_day`’ 字段，并返回事务发生的工作日。

加载脚本

```
SET DateFormat='MM/DD/YYYY'; 
SET DayNames='Mon;Tue;Wed;Thu;Fri;Sat;Sun'; 
SET FirstWeekDay=6; 
 
Transactions: 
    Load 
       *, 
       WeekDay(date,1) as week_day 
       ; 
Load 
* 
Inline  
[ 
id,date,amount 
8188,01/01/2022,37.23 
8189,01/02/2022,17.17 
8190,01/03/2022,88.27 
8191,01/04/2022,57.42 
8192,01/05/2022,53.80 
8193,01/06/2022,82.06 
8194,01/07/2022,40.39 
]; 
```

结果

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

* `id`
* `date`
* `week_day`

结果表

| id | 日期 | week\_day |
| --- | --- | --- |
| 8188 | 01/01/2022 | Sat |
| 8189 | 01/02/2022 | Sun |
| 8190 | 01/03/2022 | Mon |
| 8191 | 01/04/2022 | Tue |
| 8192 | 01/05/2022 | Wed |
| 8193 | 01/06/2022 | Thu |
| 8194 | 01/07/2022 | Fri |

周三显示的 `weekday()` 函数图表具有双数值 1

周三显示的 `weekday()` 函数图表具有双数值 1

周三显示的 `weekday()`weekday() 函数图表具有双数值 1 ![图中显示 2022 年 1 月 5 日为周三，周三的数值为 1，因为一周的第一天设置为周二。](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Resources/Images/scripting-functions-weekday-example2-diagram.png)

因为 `first_week_day` 参数在 `weekday()` 函数中设置为 `1`，所以一周的第一天是星期二。因此，周二发生的所有交易都将具有双数值 `0`。

交易 8192 发生在 1 月 5 日。`weekday()`函数标识这是星期三，因此表达式将返回双数值 `1`。

## 示例 3 – 图表对象示例

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

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

概述

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

加载脚本包含：

* 包含 2022 年交易集的数据集，该数据集加载到名为 ‘`Transactions`’ 的表中。

* 设置为 `6`（星期日）的 `FirstWeekDay` 系统变量。

* 设置为使用默认日期名称的 `DayNames` 变量。

然而，在本例中，未更改的数据集被加载到应用程序中。标识工作日值的计算在应用程序的图表中创建为度量。

加载脚本

```
SET DateFormat='MM/DD/YYYY'; 
SET DayNames='Mon;Tue;Wed;Thu;Fri;Sat;Sun'; 
SET FirstWeekDay=6; 
 
Transactions: 
Load 
* 
Inline  
[ 
id,date,amount 
8188,01/01/2022,37.23 
8189,01/02/2022,17.17 
8190,01/03/2022,88.27 
8191,01/04/2022,57.42 
8192,01/05/2022,53.80 
8193,01/06/2022,82.06 
8194,01/07/2022,40.39 
]; 
```

结果

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

* `id`
* `date`

要计算工作日值，请创建以下度量：

* `=weekday(date)`

结果表

| id | 日期 | =weekday(date) |
| --- | --- | --- |
| 8188 | 01/01/2022 | Sat |
| 8189 | 01/02/2022 | Sun |
| 8190 | 01/03/2022 | Mon |
| 8191 | 01/04/2022 | Tue |
| 8192 | 01/05/2022 | Wed |
| 8193 | 01/06/2022 | Thu |
| 8194 | 01/07/2022 | Fri |

通过使用 `weekday()` 函数并将日期字段作为函数的参数传递，在图表中创建了 ‘`=weekday(date)`’ 字段。

`weekday()` 函数返回工作日字符串值；也就是说，它返回由 `DayNames` 系统变量设置的工作日的名称。

返回周三作为交易 8192 的工作日的 `weekday()` 函数的图表

返回周三作为交易 8192 的工作日的 `weekday()` 函数的图表

返回周三作为交易 8192 的工作日的 `weekday()`weekday() 函数的图表 ![显示 weekday() 函数返回周三作为交易 8192 的工作日的图表。](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Resources/Images/scripting-functions-weekday-examples1_and3-diagram.png)

交易 8192 发生在 1 月 5 日。`FirstWeekDay` 系统变量将一周的第一天设置为星期天。`weekday()` 函数交易发生在星期三，并在 `=weekday(date)` 字段中以 `DayNames` 系统变量的缩写形式返回该值。

## 示例 4 – 场景

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

#### 加载脚本和结果

概述

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

加载脚本包含：

* 包含 2022 年交易集的数据集，该数据集加载到名为 ‘`Transactions`’ 的表中。

* 设置为 `6`（星期日）的 `FirstWeekDay` 系统变量。

* 设置为使用默认日期名称的 `DayNames` 变量。

最终用户希望得到一个图表，该图表按工作日显示交易的平均销售额。

加载脚本

```
SET DateFormat='MM/DD/YYYY'; 
SET DayNames='Mon;Tue;Wed;Thu;Fri;Sat;Sun'; 
SET FirstWeekDay=6; 
 
Transactions: 
LOAD 
  RecNo() AS id, 
  MakeDate(2022, 1, Ceil(Rand() * 31)) as date, 
  Rand() * 1000 AS amount 
						
Autogenerate(1000); 
```

结果

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

* `=weekday(date)`
* `=avg(amount)`

将度量的数字格式设置为金额。

结果表

| weekday(date) | Avg(amount) |
| --- | --- |
| Sun | $536.96 |
| Mon | $500.80 |
| Tue | $515.63 |
| Wed | $509.21 |
| Thu | $482.70 |
| Fri | $441.33 |
| Sat | $505.22 |