# inlunarweek 脚本和图表功能

此函数用于判断 timestamp 是否位于包含 base\_date 的阴历周以内。Qlik Sense 中的农历周定义为将 1 月 1 日计算为一周的第一天。除了一年中的最后一周外，每周都会有七天。

语法：

InLunarWeek (timestamp, base\_date, period\_no[, first\_week\_day])

返回数据类型： 布尔值

信息注释

在 Qlik Sense 中，布尔 true 值由 -1 表示，false 值由 0 表示。

`inlunarweek()` 函数决定 `base_date` 属于哪个农历周。一旦确定每个时间戳值是否与 `base_date` 发生在同一个农历周内，它就会返回布尔值结果。

`inlunarweek()` 函数的图表

`inlunarweek()` 函数的图表

`inlunarweek()`inlunarweek() 函数的图表 ![inlunarweek 函数的示例图，显示给定输入信息时函数将返回 TRUE 值的日期。](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Resources/Images/scripting-functions-inlunarweek-overview.png)

## 适合使用 inlunarweek 的情况

`inlunarweek()` 函数返回布尔结果。通常，这种类型的函数将用作 IF 表达式中的条件。这将返回聚合或计算结果，具体取决于评估的日期是否发生在所讨论的农历周。

例如，`inlunarweek()` 函数可用于识别特定农历周内制造的所有设备。

参数

| 参数 | 描述 |
| --- | --- |
| timestamp | 想要用来与 base\_date 进行比较的日期。 |
| base\_date | 日期用于计算阴历周的值。 |
| period\_no | 阴历周可通过 period\_no 偏移。period\_no 为整数，其中值 0 表示该阴历周包含 base\_date。period\_no 为负数表示前几个阴历星期，为正数表示随后的几个阴历星期。 |
| first\_week\_day | 偏移可以大小或小于零。这可以按指定的天数和/或某日内时间的小数对更改一年的开始。 |

函数示例

| 示例 | 结果 |
| --- | --- |
| `inlunarweek('01/12/2013', '01/14/2013',<br>0)` | 由于 `timestamp`、01/12/2013 的值， 属于 01/08/2013 至 01/14/2013 的周之内，返回 `TRUE`。 |
| `inlunarweek('01/12/2013', '01/07/2013',<br>0)` | 由于 `base_date` 01/07/2013 处于定义为 01/01/2013 至 01/07/2013 的农历周，返回 `FALSE`。 |
| `inlunarweek('01/12/2013', '01/14/2013',<br>-1)` | 返回 `FALSE`。将 period\_no 的值指定为 -1，表示将周移动到前一周，即 01/01/2013 到 01/07/2013。 |
| `inlunarweek('01/07/2013', 01/14/2013',<br>-1)` | 返回 `TRUE`。与前面的示例相比，`timestamp` 是在考虑到向后移动后的后续周内。 |
| `inlunarweek('01/11/2006', '01/08/2006',<br>0, 3)` | 返回 `FALSE`。为 `first_week_day` 指定值 3 表示从 01/04/2013 开始计算年初。因此，`base`\_date 的值在第一周下降，而 `timestamp` 的值在周 01/11/2013 内下降到 01/17/2013。 |

`inlunarweek()` 函数通常与以下功能结合使用：

相关函数

| 函数 | 交互 |
| --- | --- |
| [lunarweekname 脚本和图表功能](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/DateAndTimeFunctions/lunarweekname.htm) | 此函数用于确定输入日期所在年份的农历周数。 |

## 区域设置

除非另有规定，本主题中的示例使用以下日期格式：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 – 没有其他参数

#### 加载脚本和结果

概述

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

加载脚本包含：

* 1 月交易的数据集，该数据集加载到名为 `Transactions` 的表中。

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

创建一个字段 `in_lunar_week`，确定交易是否发生在 1 月 10 日的同一个农历周。

加载脚本

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

Transactions:
    Load
        *,
        inlunarweek(date,'01/10/2022', 0) as in_lunar_week
        ;
Load
*
Inline 
[
id,date,amount
8183,'1/5/2022',42.32
8184,'1/6/2022',68.22
8185,'1/7/2022',15.25
8186,'1/8/2022',25.26
8187,'1/9/2022',37.23
8188,'1/10/2022',37.23
8189,'1/11/2022',17.17
8190,'1/12/2022',88.27
8191,'1/13/2022',57.42
8192,'1/14/2022',53.80
8193,'1/15/2022',82.06
8194,'1/16/2022',87.21
8195,'1/17/2022',95.93
8196,'1/18/2022',45.89
8197,'1/19/2022',36.23
8198,'1/20/2022',25.66
8199,'1/21/2022',82.77
8200,'1/22/2022',69.98
8201,'1/23/2022',76.11
];
```

结果

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

* `date`

* `in_lunar_week`

结果表

| 日期 | in\_lunar\_week |
| --- | --- |
| 1/5/2022 | 0 |
| 1/6/2022 | 0 |
| 1/7/2022 | 0 |
| 1/8/2022 | -1 |
| 1/9/2022 | -1 |
| 1/10/2022 | -1 |
| 1/11/2022 | -1 |
| 1/12/2022 | -1 |
| 1/13/2022 | -1 |
| 1/14/2022 | -1 |
| 1/15/2022 | 0 |
| 1/16/2022 | 0 |
| 1/17/2022 | 0 |
| 1/18/2022 | 0 |
| 1/19/2022 | 0 |
| 1/20/2022 | 0 |
| 1/21/2022 | 0 |
| 1/22/2022 | 0 |
| 1/23/2022 | 0 |

`inlunarweek()` 函数，基本示例

`inlunarweek()` 函数，基本示例

`inlunarweek()`inlunarweek() 函数，基本示例 ![inlunarweek 函数的使用示例，该函数显示在给定输入信息的情况下，函数将返回值 TRUE 的日期范围。](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Resources/Images/scripting-functions-inlunarweek-basic-example.png)

`in_lunar_week` 字段是在前置 Load 语句中创建的，方法是使用 `inlunarweek()` 函数，然后将以下内容作为函数的参数传递：

* `date` 字段

* 1 月 10 日的硬编码日期，作为 `base_date`

* 为 0 的`period_no`

因为农历周从 1 月 1 日开始，所以 1 月 10 日会在 1 月 8日开始、1 月 14 日结束的农历周中。因此，在 1 月份这两个日期之间发生的任何交易都将返回布尔值 `TRUE`。这在结果表中得到验证。

## 示例 2 – period\_no

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

#### 示例和结果：

概述

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

加载脚本包含：

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

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

然而，在本例中，任务是创建一个字段 `2_lunar_weeks_later`，用于确定交易是否发生在 1 月 10 日之后的两个农历周。

加载脚本

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

Transactions:
    Load
        *,
        inlunarweek(date,'01/10/2022', 2) as [2_lunar_weeks_later]
        ;
Load
*
Inline 
[
id,date,amount
8183,'1/5/2022',42.32
8184,'1/6/2022',68.22
8185,'1/7/2022',15.25
8186,'1/8/2022',25.26
8187,'1/9/2022',37.23
8188,'1/10/2022',37.23
8189,'1/11/2022',17.17
8190,'1/12/2022',88.27
8191,'1/13/2022',57.42
8192,'1/14/2022',53.80
8193,'1/15/2022',82.06
8194,'1/16/2022',87.21
8195,'1/17/2022',95.93
8196,'1/18/2022',45.89
8197,'1/19/2022',36.23
8198,'1/20/2022',25.66
8199,'1/21/2022',82.77
8200,'1/22/2022',69.98
8201,'1/23/2022',76.11
];
```

结果

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

* `date`

* `2_lunar_weeks_later`

结果表

| 日期 | 2\_lunar\_weeks\_later |
| --- | --- |
| 1/5/2022 | 0 |
| 1/6/2022 | 0 |
| 1/7/2022 | 0 |
| 1/8/2022 | 0 |
| 1/9/2022 | 0 |
| 1/10/2022 | 0 |
| 1/11/2022 | 0 |
| 1/12/2022 | 0 |
| 1/13/2022 | 0 |
| 1/14/2022 | 0 |
| 1/15/2022 | 0 |
| 1/16/2022 | 0 |
| 1/17/2022 | 0 |
| 1/18/2022 | 0 |
| 1/19/2022 | 0 |
| 1/20/2022 | 0 |
| 1/21/2022 | 0 |
| 1/22/2022 | -1 |
| 1/23/2022 | -1 |

`inlunarweek()` 函数，period\_no 示例

`inlunarweek()` 函数，period\_no 示例

`inlunarweek()`inlunarweek() 函数，period\_no 示例 ![inlunarweek 函数，period_no 示例](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Resources/Images/scripting-functions-inlunarweek-period-no.png)

在本例中，由于 `inlunarweek()` 函数中使用了 2 的 `period_no`作为偏移参数，因此该函数将从1月22日开始的一周定义为用于验证事务的农历周。因此，2020 年 1 月 1 日至 7 月 26 日之间发生的任何交易都将返回布尔值结果 `TRUE`。

## 示例 3 – first\_week\_day

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

#### 加载脚本和结果

概述

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

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

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

* 使用默认 `DateFormat` 系统变量 MM/DD/YYYY。

* `first_week_day` 参数为 5。这将设定农历周从 1 月 5 日开始。

加载脚本

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

Transactions:
    Load
        *,
        inlunarweek(date,'01/10/2022', 0,5) as in_lunar_week
        ;
Load
*
Inline 
[
id,date,amount
8183,'1/5/2022',42.32
8184,'1/6/2022',68.22
8185,'1/7/2022',15.25
8186,'1/8/2022',25.26
8187,'1/9/2022',37.23
8188,'1/10/2022',37.23
8189,'1/11/2022',17.17
8190,'1/12/2022',88.27
8191,'1/13/2022',57.42
8192,'1/14/2022',53.80
8193,'1/15/2022',82.06
8194,'1/16/2022',87.21
8195,'1/17/2022',95.93
8196,'1/18/2022',45.89
8197,'1/19/2022',36.23
8198,'1/20/2022',25.66
8199,'1/21/2022',82.77
8200,'1/22/2022',69.98
8201,'1/23/2022',76.11
];
```

结果

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

* `date`

* `in_lunar_week`

结果表

| 日期 | in\_lunar\_week |
| --- | --- |
| 1/5/2022 | 0 |
| 1/6/2022 | -1 |
| 1/7/2022 | -1 |
| 1/8/2022 | -1 |
| 1/9/2022 | -1 |
| 1/10/2022 | -1 |
| 1/11/2022 | -1 |
| 1/12/2022 | -1 |
| 1/13/2022 | 0 |
| 1/14/2022 | 0 |
| 1/15/2022 | 0 |
| 1/16/2022 | 0 |
| 1/17/2022 | 0 |
| 1/18/2022 | 0 |
| 1/19/2022 | 0 |
| 1/20/2022 | 0 |
| 1/21/2022 | 0 |
| 1/22/2022 | 0 |
| 1/23/2022 | 0 |

`inlunarweek()` 函数，first\_week\_day 示例

`inlunarweek()` 函数，first\_week\_day 示例

`inlunarweek()`inlunarweek() 函数，first\_week\_day 示例 ![inlunarweek 函数的使用示例，该函数显示在给定输入信息的情况下，函数将返回值 TRUE 的日期范围。](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Resources/Images/scripting-functions-inlunarweek-first-week-day.png)

在本例中，由于 `inlunarweek()` 函数中使用了 `first_week_date` 参数，因此它将农历周的开始日期偏移到 1 月 6 日。因此，1 月 10 日属于从 1 月6 日开始到 1 月 12 日结束的农历周。这两个日期之间的任何事务都将返回布尔值 `TRUE`。

## 示例 4 – 图表对象

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

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

概述

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

加载脚本包含：

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

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

然而，在本例中，未更改的数据集被加载到应用程序中。确定交易是否与 1 月 10 日发生在同一个农历周的计算被创建为应用程序图表对象中的度量。

加载脚本

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

Transactions:
Load
*
Inline 
[
id,date,amount
8183,'1/5/2022',42.32
8184,'1/6/2022',68.22
8185,'1/7/2022',15.25
8186,'1/8/2022',25.26
8187,'1/9/2022',37.23
8188,'1/10/2022',37.23
8189,'1/11/2022',17.17
8190,'1/12/2022',88.27
8191,'1/13/2022',57.42
8192,'1/14/2022',53.80
8193,'1/15/2022',82.06
8194,'1/16/2022',87.21
8195,'1/17/2022',95.93
8196,'1/18/2022',45.89
8197,'1/19/2022',36.23
8198,'1/20/2022',25.66
8199,'1/21/2022',82.77
8200,'1/22/2022',69.98
8201,'1/23/2022',76.11
];
```

结果

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

要计算交易是否发生在包含 1 月 10 日的农历周，请创建以下度量：

= inlunarweek(date,'01/10/2022', 0)

结果表

| 日期 | =inlunarweek(date,'01/10/2022', 0) |
| --- | --- |
| 1/5/2022 | 0 |
| 1/6/2022 | 0 |
| 1/7/2022 | 0 |
| 1/8/2022 | -1 |
| 1/9/2022 | -1 |
| 1/10/2022 | -1 |
| 1/11/2022 | -1 |
| 1/12/2022 | -1 |
| 1/13/2022 | -1 |
| 1/14/2022 | -1 |
| 1/15/2022 | 0 |
| 1/16/2022 | 0 |
| 1/17/2022 | 0 |
| 1/18/2022 | 0 |
| 1/19/2022 | 0 |
| 1/20/2022 | 0 |
| 1/21/2022 | 0 |
| 1/22/2022 | 0 |
| 1/23/2022 | 0 |

## 示例 5 – 场景

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

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

概述

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

加载脚本包含：

* 加载到名为 Products 的表中的数据集。

* 包含产品 ID、制造日期和成本价格的信息。

现已查明，由于设备错误，包括 1 月 12 日在内的农历周制造的产品存在缺陷。最终用户希望使用一个图表对象，通过农历周名称显示所生产产品的“缺陷”或“无缺陷”状态以及当月生产的产品的成本。

加载脚本

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

Transactions:
Load
*
Inline 
[
product_id,manufacture_date,cost_price
8183,'1/5/2022',42.32
8184,'1/6/2022',68.22
8185,'1/7/2022',15.25
8186,'1/8/2022',25.26
8187,'1/9/2022',37.23
8188,'1/10/2022',37.23
8189,'1/11/2022',17.17
8190,'1/12/2022',88.27
8191,'1/13/2022',57.42
8192,'1/14/2022',53.80
8193,'1/15/2022',82.06
8194,'1/16/2022',87.21
8195,'1/17/2022',95.93
8196,'1/18/2022',45.89
8197,'1/19/2022',36.23
8198,'1/20/2022',25.66
8199,'1/21/2022',82.77
8200,'1/22/2022',69.98
8201,'1/23/2022',76.11
];
```

结果

执行以下操作：

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

2. 创建维度以显示月名称：

   =lunarweekname(manufacture\_date)

3. 使用 inlunarweek() 函数创建一个度量，以识别哪些产品有缺陷，哪些无缺陷：

   =if(only(inlunarweek(manufacture\_date,makedate(2022,01,12),0)), 'Defective','Faultless')

4. 创建一个度量来求对产品的 cost\_price 求和：

   =sum(cost\_price)

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

6. 在外观下，关闭总计。

结果表

| lunarweekname(manufacture\_date) | =if(only(inlunarweek(manufacture\_date,makedate(2022,01,12),0)), 'Defective','Faultless') | sum(cost\_price) |
| --- | --- | --- |
| 2022/01 | Faultless | $125.79 |
| 2022/02 | Defective | $316.38 |
| 2022/03 | Faultless | $455.75 |
| 2022/04 | Faultless | $146.09 |

inlunarweek() 函数在评估每个产品的制造日期时返回布尔值。对于在农历周生产的包含 1 月 10 日的任何产品，inlunarweek() 函数返回布尔值 TRUE，并将产品标记为“缺陷”。对于任何返回 FALSE值的产品，由于不是在该周制造的，它将产品标记为 ‘Faultless’。