# makeweekdate - 脚本和图表功能

此函数返回根据年、周数和星期几计算的日期。

语法：

MakeWeekDate(weekyear [, week [, weekday [, first\_week\_day [, broken\_weeks [, reference\_day]]]]])

返回数据类型： 双

`makeweekdate()` 函数可作为脚本和图表函数使用。函数将根据传递到函数中的参数计算日期。

参数

| 参数 | 描述 |
| --- | --- |
| weekyear | `WeekYear()` 函数为特定日期定义的年份，即周数所属的年份。<br><br>信息注释在某些情况下，周年份可能与日历年不同，例如，如果第 1 周已经在上一年的 12 月开始。 |
| week | `Week()` 函数为特定日期定义的周数。<br><br>如果未注明周数，则假定为 1。 |
| weekday | `WeekDay()` 函数为相关日期定义的星期几。0 是一周中的第一天，6 是一周的最后一天。<br><br>如果未指定星期几，则假定为 0。<br><br>信息注释尽管 0 总是表示一周的第一天，6 总是最后一天，但对应的工作日由 first\_week\_day 参数确定。如果忽略，使用 FirstWeekDay 变量的值。<br><br>如果使用中断周，以及不可能的参数组合，这可能会导致不属于所选年份的结果。<br><br>示例：<br><br>```<br>MakeWeekDate(2021,1,0,6,1)<br>```<br><br>返回 ‘Dec 27 2020’ ，因为这一天是指定周的第一天（星期日）。2021 年 1 月 1 日是星期五。 |
| first\_week\_day | 指定一周的开始日期。如果忽略，使用 FirstWeekDay 变量的值。<br><br>可能的值 first\_week\_day 为：周一为 0，周二为 1，周三为 2，周四为3，周五为 4，周六为 5，星期日为 6。<br><br>有关系统变量的详细信息，请参见[FirstWeekDay](https://help.qlik.com/zh-CN/sense/November2025/Subsystems/Hub/Content/Sense_Hub/Scripting/NumberInterpretationVariables/FirstWeekDay.htm)。 |
| broken\_weeks | 如果不指定 broken\_weeks，则变量 BrokenWeeks 的值将用于定义周是否中断。<br><br>有关系统变量的详细信息，请参见[BrokenWeeks](https://help.qlik.com/zh-CN/sense/November2025/Subsystems/Hub/Content/Sense_Hub/Scripting/NumberInterpretationVariables/BrokenWeeks.htm) |
| reference\_day | 如果不指定 reference\_day，则变量 ReferenceDay 的值用于定义将一月的哪一天设置为定义第 1 周的参考日。<br><br>有关系统变量的详细信息，请参见[ReferenceDay](https://help.qlik.com/zh-CN/sense/November2025/Subsystems/Hub/Content/Sense_Hub/Scripting/NumberInterpretationVariables/ReferenceDay.htm) |

## 适合使用它的情况

`makeweekdate()` 函数通常用于脚本中的数据生成，以生成日期列表，或在输入数据中提供年、周和日时构造日期。

以下示例假设：

```
SET FirstWeekDay=0;
SET BrokenWeeks=0;
SET ReferenceDay=4;
```

函数示例

| 示例 | 结果 |
| --- | --- |
| `makeweekdate(2014,6,6)` | 返回 02/09/2014 |
| `makeweekdate(2014,6,1)` | 返回 02/04/2014 |
| `makeweekdate(2014,6)` | 返回 02/03/2014（假定普通日为 0） |

## 区域设置

除非另有规定，本主题中的示例使用以下日期格式：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/makeweekdate.htm)

#### 加载脚本和结果

概述

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

加载脚本包含：

* 在名为 `Sales` 的表中包含 2022 年每周销售总额的数据集。

* 跨三个字段提供的交易日期：`year`、`week` 和 `sales`。

* 前置 Load，用于创建度量 `end_of_week`，使用 `makeweekdate()` 函数以 MM/DD/YYYY 格式返回该周星期五的日期。

为了证明返回的日期是星期五，`end_of_week` 表达式也被包装在 `weekday()` 函数中以显示星期几。

加载脚本

```
SET DateFormat='MM/DD/YYYY';
SET FirstWeekDay=0;
SET BrokenWeeks=0;
SET ReferenceDay=4;

Transactions:
    Load
        *,
        makeweekdate(transaction_year, transaction_week,4) as end_of_week,
        weekday(makeweekdate(transaction_year, transaction_week,4)) as week_day
        ; 
Load * Inline [
transaction_year, transaction_week, sales
2022, 01, 10000
2022, 02, 11250
2022, 03, 9830
2022, 04, 14010
2022, 05, 28402
2022, 06, 9992
2022, 07, 7292
];
```

结果

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

* `transaction_year`

* `transaction_week`

* `end_of_week`

* `week_day`

结果表

| transaction\_year | transaction\_week | end\_of\_week | week\_day |
| --- | --- | --- | --- |
| 2022 | 01 | 01/07/2022 | Fri |
| 2022 | 02 | 01/14/2022 | Fri |
| 2022 | 03 | 01/21/2022 | Fri |
| 2022 | 04 | 01/28/2022 | Fri |
| 2022 | 05 | 02/04/2022 | Fri |
| 2022 | 06 | 02/11/2022 | Fri |
| 2022 | 07 | 02/18/2022 | Fri |

`end_of_week` 字段是在前置 Load 语句中使用 `makeweekdate()` 函数创建的。`transaction_year`、`transaction_week` 字段作为年和周参数通过函数传递。值 4 用于日参数。

然后，该函数将这些值组合并转换为日期字段，以 `DateFormat` 系统变量的格式返回结果。

`makeweekdate()` 函数及其参数也封装在一个 `weekday()` 函数中以返回 `week_day` 字段；如上表所示，`week_day` 字段显示这些日期确实发生在星期五。

## 示例 2 – 排除日

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

#### 加载脚本和结果

概述

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

加载脚本包含：

* 在名为 Sales 的表中包含 2022 年每周销售总额的数据集。

* 跨三个字段提供的交易日期：year、week 和 sales。

* 前置 Load，用于使用 makeweekdate() 函数创建度量 first\_day\_of\_week。这将返回星期一的日期，格式为 MM/DD/YYYY。

为了证明返回的日期是星期一，first\_day\_of\_week 表达式也被包装在 weekday() 函数中以显示星期几。

加载脚本

```
SET DateFormat='MM/DD/YYYY';
SET FirstWeekDay=0;
SET BrokenWeeks=0;
SET ReferenceDay=4;

Transactions:
    Load
        *,
        makeweekdate(transaction_year, transaction_week) as first_day_of_week,
        weekday(makeweekdate(transaction_year, transaction_week)) as week_day
        ; 
Load * Inline [
transaction_year, transaction_week, sales
2022, 01, 10000
2022, 02, 11250
2022, 03, 9830
2022, 04, 14010
2022, 05, 28402
2022, 06, 9992
2022, 07, 7292
];
```

结果

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

* transaction\_year

* transaction\_week

* first\_day\_of\_week

* week\_day

结果表

| transaction\_year | transaction\_week | first\_day\_of\_week | week\_day |
| --- | --- | --- | --- |
| 2022 | 01 | 01/03/2022 | Mon |
| 2022 | 02 | 01/10/2022 | Mon |
| 2022 | 03 | 01/17/2022 | Mon |
| 2022 | 04 | 01/24/2022 | Mon |
| 2022 | 05 | 01/31/2022 | Mon |
| 2022 | 06 | 02/07/2022 | Mon |
| 2022 | 07 | 02/14/2022 | Mon |

first\_day\_of\_week 字段是在前置 Load 语句中使用 makeweekdate() 函数创建的。transaction\_year 和 transaction\_week 参数作为函数参数传递，day 参数为空。

然后，该函数将这些值组合并转换为日期字段，以 DateFormat 系统变量的格式返回结果。

makeweekdate() 函数及其参数也封装在 weekday() 函数中以返回 week\_day 字段。从上表中可以看出，week\_day 字段在所有情况下都返回星期一，因为该参数在 makeweekdate() 函数中为空，默认为 0（一周的第一天），并且 FirstWeekDay 系统变量将一周的第 1 天设置为星期一。

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

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

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

概述

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

加载脚本包含：

* 在名为 Sales 的表中包含 2022 年每周销售总额的数据集。

* 跨三个字段提供的交易日期：year、week 和 sales。

在本例中，将使用图表对象创建与第一个示例中的 end\_of\_week 计算等效的度量。此度量值将使用 makeweekdate() 函数以 MM/DD/YYYY 格式返回该星期五的日期。

为了证明返回的日期是星期五，创建了第二个度量来返回星期几。

加载脚本

```
SET DateFormat='MM/DD/YYYY';
SET FirstWeekDay=0;
SET BrokenWeeks=0;
SET ReferenceDay=4;

Master_Calendar:
Load * Inline [
transaction_year, transaction_week, sales
2022, 01, 10000
2022, 02, 11250
2022, 03, 9830
2022, 04, 14010
2022, 05, 28402
2022, 06, 9992
2022, 07, 7292
];
```

结果

执行以下操作：

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

   * transaction\_year

   * transaction\_week

2. 要执行与第一个示例中的 end\_of\_week 字段等效的计算，请创建以下度量：

   =makeweekdate(transaction\_year,transaction\_week,4)

3. 要计算每个事务的星期几，请创建以下度量：

   =weekday(makeweekdate(transaction\_year,transaction\_week,4))

结果表

| transaction\_year | transaction\_week | =makeweekdate(transaction\_year,transaction\_week,4) | =weekday(makeweekdate(transaction\_year,transaction\_week,4)) |
| --- | --- | --- | --- |
| 2022 | 01 | 01/07/2022 | Fri |
| 2022 | 02 | 01/14/2022 | Fri |
| 2022 | 03 | 01/21/2022 | Fri |
| 2022 | 04 | 01/28/2022 | Fri |
| 2022 | 05 | 02/04/2022 | Fri |
| 2022 | 06 | 02/11/2022 | Fri |
| 2022 | 07 | 02/18/2022 | Fri |

使用 makeweekdate() 函数在图表对象中创建与 end\_of\_week 的等效字段作为度量。transaction\_year 和 transaction\_week 字段作为年和周参数传递。值 4 用于日参数。

然后，该函数将这些值组合并转换为日期字段，以 DateFormat 系统变量的格式返回结果。

makeweekdate() 函数及其参数也封装在一个 weekday() 函数中，以返回与第一个示例中的 week\_day 字段等效的计算。如上表所示，右侧最后一列显示这些日期确实发生在星期五。

## 示例 4 – 场景

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

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

概述

在本例中，创建一个包含 2022 年所有周五的日期列表。

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

加载脚本

```
SET DateFormat='MM/DD/YYYY';
SET FirstWeekDay=0;
SET BrokenWeeks=0;
SET ReferenceDay=4;

Calendar:
    load
	    *,
        weekday(date) as weekday
    where year(date)=2022;
load
    makeweekdate(2022,recno()-2,4) as date
AutoGenerate 60;
```

结果

结果表

| 日期 | weekday |
| --- | --- |
| 01/07/2022 | Fri |
| 01/14/2022 | Fri |
| 01/21/2022 | Fri |
| 01/28/2022 | Fri |
| 02/04/2022 | Fri |
| 02/11/2022 | Fri |
| 02/18/2022 | Fri |
| 02/25/2022 | Fri |
| 03/04/2022 | Fri |
| 03/11/2022 | Fri |
| 03/18/2022 | Fri |
| 03/25/2022 | Fri |
| 04/01/2022 | Fri |
| 04/08/2022 | Fri |
| 04/15/2022 | Fri |
| 04/22/2022 | Fri |
| 04/29/2022 | Fri |
| 05/06/2022 | Fri |
| 05/13/2022 | Fri |
| 05/20/2022 | Fri |
| 05/27/2022 | Fri |
| 06/03/2022 | Fri |
| 06/10/2022 | Fri |
| 06/17/2022 | Fri |
| + 27 更多行 |  |

makeweekdate() 函数查找 2022 年的每个星期五。使用为 -2 的 week 参数可确保不会错过任何日期。最后，为了清晰起见，前置 Load 创建了一个额外的 weekday 字段，以显示每个 date 值都是星期五。