# lunarweekname 脚本和图表功能

此函数用于返回一个显示值，显示与包含 date 的阴历周的第一天的第一毫秒时间戳对应的年份和阴历周数。Qlik Sense 中的农历周定义为将 1 月 1 日计算为一周的第一天，除一年的最后一周外，将正好包含七天。

语法：

LunarWeekName(date [, period\_no[, first\_week\_day]])

返回数据类型： 双

`lunarweekname()` 函数的示例图表

`lunarweekname()` 函数的示例图表

`lunarweekname()`lunarweekname() 函数的示例图表 ![示例图显示了 lunarweekname 函数如何将输入日期转换为显示年和农历周编号组合的值。](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Resources/Images/scripting-functions-lunarweekname-general.png)

`lunarweekname()` 函数确定日期属于哪个农历周，从 1 月 1 日开始计算周数。然后返回一个包含 `year/weekcount` 的值。

参数

| 参数 | 描述 |
| --- | --- |
| date | 要评估的日期或时间戳。 |
| period\_no | period\_no 为整数，或解算为整数的表达式，其中值 0 表示该阴历周包含 date。period\_no 为负数表示前几个阴历星期，为正数表示随后的几个阴历星期。 |
| first\_week\_day | 偏移可以大小或小于零。这可以按指定的天数和/或某日内时间的小数对更改一年的开始。 |

## 适合使用 lunarweekname 的情况

当您希望按农历周比较聚合时，`lunarweekname()` 函数非常有用。例如，该函数可用于确定农历周产品的总销售额。如果您希望确保一年中第一周包含的所有值最早只包含从 1 月 1 日开始的值，农历周非常有用。

通过使用函数在主日历表中创建字段，可以在 Load 脚本中创建这些维度。该函数也可以直接在图表中用作计算维度。

函数示例

| 示例 | 结果 |
| --- | --- |
| `lunarweekname('01/12/2013')` | 返回 2006/02。 |
| `lunarweekname('01/12/2013', -1)` | 返回 2006/01。 |
| `lunarweekname('01/12/2013', 0, 1)` | 返回 2006/02。 |

## 区域设置

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

## 示例 1 – 没有其他参数的日期

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

#### 加载脚本和结果

概述

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

加载脚本包含：

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

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

* 创建字段 `  lunar_week_name `，返回交易发生的农历周的年和周数字。

加载脚本

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

Transactions:
    Load
        *,
        lunarweekname(date) as lunar_week_name
        ;
Load
*
Inline 
[
id,date,amount
8188,1/7/2022,17.17
8189,1/19/2022,37.23
8190,2/28/2022,88.27
8191,2/5/2022,57.42
8192,3/16/2022,53.80
8193,4/1/2022,82.06
8194,5/7/2022,40.39
8195,5/16/2022,87.21
8196,6/15/2022,95.93
8197,6/26/2022,45.89
8198,7/9/2022,36.23
8199,7/22/2022,25.66
8200,7/23/2022,82.77
8201,7/27/2022,69.98
8202,8/2/2022,76.11
8203,8/8/2022,25.12
8204,8/19/2022,46.23
8205,9/26/2022,84.21
8206,10/14/2022,96.24
8207,10/29/2022,67.67
];
```

结果

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

* `date`

* `lunar_week_name`

结果表

| 日期 | 农历周名称 |
| --- | --- |
| 1/7/2022 | 2022/01 |
| 1/19/2022 | 2022/03 |
| 2/5/2022 | 2022/06 |
| 2/28/2022 | 2022/09 |
| 3/16/2022 | 2022/11 |
| 4/1/2022 | 2022/13 |
| 5/7/2022 | 2022/19 |
| 5/16/2022 | 2022/20 |
| 6/15/2022 | 2022/24 |
| 6/26/2022 | 2022/26 |
| 7/9/2022 | 2022/28 |
| 7/22/2022 | 2022/29 |
| 7/23/2022 | 2022/30 |
| 7/27/2022 | 2022/30 |
| 8/2/2022 | 2022/31 |
| 8/8/2022 | 2022/32 |
| 8/19/2022 | 2022/33 |
| 9/26/2022 | 2022/39 |
| 10/14/2022 | 2022/41 |
| 10/29/2022 | 2022/44 |

通过使用 `lunarweekname()` 函数并将 `lunar_week_name` 字段作为函数的参数传递，在前置 Load 语句中创建了 `date` 字段。

`lunarweekname()` 函数标识日期值属于哪个农历周，并返回该日期的年和周数字。

`lunarweekname()` 函数图表，示例没有额外参数

`lunarweekname()` 函数图表，示例没有额外参数

`lunarweekname()`lunarweekname() 函数图表，示例没有额外参数 ![图表显示了 lunarweekname 函数如何将输入日期转换为显示年和农历周编号组合的值。](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Resources/Images/scripting-functions-lunarweekname-examples-no-add-arg.png)

交易 8189 发生在 1 月 19 日。`lunarweekname()` 函数确定该日期属于 1 月 15 日开始的农历周；这是一年中的第三个农历周。因此，该交易返回的 `lunar_week_name` 值为 2022/03。

## 示例 2–带 period\_no 参数的日期

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

#### 加载脚本和结果

概述

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

加载脚本包含：

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

* 创建字段 `previous_lunar_week_name`，返回交易发生前的农历周的年和周数字。

加载脚本

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

Transactions:
    Load
        *,
        lunarweekname(date,-1) as previous_lunar_week_name
        ;
Load
*
Inline 
[
id,date,amount
8188,1/7/2022,17.17
8189,1/19/2022,37.23
8190,2/28/2022,88.27
8191,2/5/2022,57.42
8192,3/16/2022,53.80
8193,4/1/2022,82.06
8194,5/7/2022,40.39
8195,5/16/2022,87.21
8196,6/15/2022,95.93
8197,6/26/2022,45.89
8198,7/9/2022,36.23
8199,7/22/2022,25.66
8200,7/23/2022,82.77
8201,7/27/2022,69.98
8202,8/2/2022,76.11
8203,8/8/2022,25.12
8204,8/19/2022,46.23
8205,9/26/2022,84.21
8206,10/14/2022,96.24
8207,10/29/2022,67.67
];
```

结果

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

* `date`

* `previous_lunar_week_name`

结果表

| 日期 | 上一农历周名称 |
| --- | --- |
| 1/7/2022 | 2021/52 |
| 1/19/2022 | 2022/02 |
| 2/5/2022 | 2022/05 |
| 2/28/2022 | 2022/08 |
| 3/16/2022 | 2022/10 |
| 4/1/2022 | 2022/12 |
| 5/7/2022 | 2022/18 |
| 5/16/2022 | 2022/19 |
| 6/15/2022 | 2022/23 |
| 6/26/2022 | 2022/25 |
| 7/9/2022 | 2022/27 |
| 7/22/2022 | 2022/28 |
| 7/23/2022 | 2022/29 |
| 7/27/2022 | 2022/29 |
| 8/2/2022 | 2022/30 |
| 8/8/2022 | 2022/31 |
| 8/19/2022 | 2022/32 |
| 9/26/2022 | 2022/38 |
| 10/14/2022 | 2022/40 |
| 10/29/2022 | 2022/43 |

在本例中，由于 `lunarweekname()` 函数中使用了为 -1 的 `period_no` 作为偏移量参数，因此该函数首先标识交易发生的农历周。然后返回年份和前一周的数字。

`lunarweekname()` 函数的图表，period\_no 示例

`lunarweekname()` 函数的图表，period\_no 示例

`lunarweekname()`lunarweekname() 函数的图表，period\_no 示例 ![显示 lunarweekname 函数如何将交易的输入日期转换为显示交易发生的农历周的年数和周数的组合值的图。](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Resources/Images/scripting-functions-lunarweekname-examples-period-no.png)

交易 8189 发生在 1 月 19 日。`lunarweekname()` 函数确定该交易发生在一年中的第三个农历周，因此它返回 `previous_lunar_week_name` 字段在 2022/02 之前一周的年份和值。

## 示例 3 – 带有 first\_week\_day 参数的日期

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

#### 加载脚本和结果

概述

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

加载脚本包含与第一个示例相同的数据集和场景。然而，在这个例子中，我们将农历周设置为 1 月 6 日开始。

加载脚本

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

Transactions:
    Load
        *,
        lunarweekname(date,0,4) as lunar_week_name
        ;
Load
*
Inline 
[
id,date,amount
8188,1/7/2022,17.17
8189,1/19/2022,37.23
8190,2/28/2022,88.27
8191,2/5/2022,57.42
8192,3/16/2022,53.80
8193,4/1/2022,82.06
8194,5/7/2022,40.39
8195,5/16/2022,87.21
8196,6/15/2022,95.93
8197,6/26/2022,45.89
8198,7/9/2022,36.23
8199,7/22/2022,25.66
8200,7/23/2022,82.77
8201,7/27/2022,69.98
8202,8/2/2022,76.11
8203,8/8/2022,25.12
8204,8/19/2022,46.23
8205,9/26/2022,84.21
8206,10/14/2022,96.24
8207,10/29/2022,67.67
];
```

结果

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

* `date`

* `lunar_week_name`

结果表

| 日期 | 农历周名称 |
| --- | --- |
| 1/7/2022 | 2022/01 |
| 1/19/2022 | 2022/03 |
| 2/5/2022 | 2022/05 |
| 2/28/2022 | 2022/08 |
| 3/16/2022 | 2022/11 |
| 4/1/2022 | 2022/13 |
| 5/7/2022 | 2022/18 |
| 5/16/2022 | 2022/19 |
| 6/15/2022 | 2022/24 |
| 6/26/2022 | 2022/25 |
| 7/9/2022 | 2022/27 |
| 7/22/2022 | 2022/29 |
| 7/23/2022 | 2022/29 |
| 7/27/2022 | 2022/30 |
| 8/2/2022 | 2022/30 |
| 8/8/2022 | 2022/31 |
| 8/19/2022 | 2022/33 |
| 9/26/2022 | 2022/38 |
| 10/14/2022 | 2022/41 |
| 10/29/2022 | 2022/43 |

`lunarweekname()` 函数的图表，first\_week\_day 示例

`lunarweekname()` 函数的图表，first\_week\_day 示例

`lunarweekname()`lunarweekname() 函数的图表，first\_week\_day 示例 ![显示 lunarweekname 函数如何将每个事务的输入日期转换为显示年份和农历周编号的组合值的图。](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Resources/Images/scripting-functions-lunarweekname-examples-first-week-day.png)

在本例中，由于 `lunarweekname()` 函数中使用了参数 `first_week_date`，因此它将农历周初从 1 月 1 日偏移到 1 月 5 日。

交易 8188 发生在 1 月 7 日。由于农历周从 1 月 5 日开始，`lunarweekname()` 函数确定包含 1 月 7 号的农历周是一年中的第一个农历周。因此，该交易返回的 `lunar_week_name` 值为 2022/01。

## 示例 4 – 图表对象

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

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

概述

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

加载脚本包含与第一个示例相同的数据集和场景。

然而，在本例中，未更改的数据集被加载到应用程序中。返回交易发生的农历周数和年份的计算在应用程序的图表对象中创建为度量。

加载脚本

```
Transactions:
Load
*
Inline 
[
id,date,amount
8188,1/7/2022,17.17
8189,1/19/2022,37.23
8190,2/28/2022,88.27
8191,2/5/2022,57.42
8192,3/16/2022,53.80
8193,4/1/2022,82.06
8194,5/7/2022,40.39
8195,5/16/2022,87.21
8196,6/15/2022,95.93
8197,6/26/2022,45.89
8198,7/9/2022,36.23
8199,7/22/2022,25.66
8200,7/23/2022,82.77
8201,7/27/2022,69.98
8202,8/2/2022,76.11
8203,8/8/2022,25.12
8204,8/19/2022,46.23
8205,9/26/2022,84.21
8206,10/14/2022,96.24
8207,10/29/2022,67.67
];
```

结果

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

要计算交易发生的农历周的开始日期，请创建以下度量：

=lunarweekname(date)

结果表

| 日期 | =lunarweekname(date) |
| --- | --- |
| 1/7/2022 | 2022/01 |
| 1/19/2022 | 2022/03 |
| 2/5/2022 | 2022/06 |
| 2/28/2022 | 2022/09 |
| 3/16/2022 | 2022/11 |
| 4/1/2022 | 2022/13 |
| 5/7/2022 | 2022/19 |
| 5/16/2022 | 2022/20 |
| 6/15/2022 | 2022/24 |
| 6/26/2022 | 2022/26 |
| 7/9/2022 | 2022/28 |
| 7/22/2022 | 2022/29 |
| 7/23/2022 | 2022/30 |
| 7/27/2022 | 2022/30 |
| 8/2/2022 | 2022/31 |
| 8/8/2022 | 2022/32 |
| 8/19/2022 | 2022/33 |
| 9/26/2022 | 2022/39 |
| 10/14/2022 | 2022/41 |
| 10/29/2022 | 2022/44 |

通过使用 lunarweekname() 函数并将 date 字段作为函数的参数传递，在图表对象中创建 lunar\_week\_name 度量。

lunarweekname() 函数标识日期值属于哪个农历周，并返回该日期的年和周数字。

lunarweekname() 函数的图表，图表对象示例

lunarweekname() 函数的图表，图表对象示例

lunarweekname()lunarweekname() 函数的图表，图表对象示例 ![图表显示了 lunarweekname 函数如何将输入日期转换为显示年和农历周编号组合的值。](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Resources/Images/scripting-functions-lunarweekname-examples-chart-object.png)

交易 8189 发生在 1 月 19 日。lunarweekname() 函数确定该日期属于 1 月 15 日开始的农历周；这是一年中的第三个农历周。因此，该交易的 lunar\_week\_name 值为 2022/03。

## 示例 5 – 场景

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

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

概述

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

加载脚本包含：

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

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

最终用户需要一个图表对象，该对象按周显示当前年度的总销售额。第 1 周，长度为 7 天，应该从 1 月 1 日开始。即使数据模型中没有此维度，也可以通过将 lunarweekname() 函数用作图表中的计算维度来实现。

加载脚本

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

Transactions:
Load
*
Inline 
[
id,date,amount
8188,1/7/2022,17.17
8189,1/19/2022,37.23
8190,2/28/2022,88.27
8191,2/5/2022,57.42
8192,3/16/2022,53.80
8193,4/1/2022,82.06
8194,5/7/2022,40.39
8195,5/16/2022,87.21
8196,6/15/2022,95.93
8197,6/26/2022,45.89
8198,7/9/2022,36.23
8199,7/22/2022,25.66
8200,7/23/2022,82.77
8201,7/27/2022,69.98
8202,8/2/2022,76.11
8203,8/8/2022,25.12
8204,8/19/2022,46.23
8205,9/26/2022,84.21
8206,10/14/2022,96.24
8207,10/29/2022,67.67
];
```

结果

执行以下操作：

1. 加载数据并打开工作表。新建表格。

2. 使用以下表达式创建计算维度：

   =lunarweekname(date)

3. 使用以下聚合度量计算总销售额：

   =sum(amount)

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

结果表

| =lunarweekname(date) | =sum(amount) |
| --- | --- |
| 2022/01 | $17.17 |
| 2022/03 | $37.23 |
| 2022/06 | $57.42 |
| 2022/09 | $88.27 |
| 2022/11 | $53.80 |
| 2022/13 | $82.06 |
| 2022/19 | $40.39 |
| 2022/20 | $87.21 |
| 2022/24 | $95.93 |
| 2022/26 | $45.89 |
| 2022/28 | $36.23 |
| 2022/29 | $25.66 |
| 2022/30 | $152.75 |
| 2022/31 | $76.11 |
| 2022/32 | $25.12 |
| 2022/33 | $46.23 |
| 2022/39 | $84.21 |
| 2022/41 | $96.24 |
| 2022/44 | $67.67 |