# monthsname 脚本和图表功能

此函数用于返回一个显示值，表示时段各月份（根据 MonthNames 脚本变量的格式）和年的范围。基础数值与包含基准日期的一个月、两个月、季度、四个月期间或半年的第一毫秒的时间戳对应。

语法：

MonthsName(n\_months, date[, period\_no[, first\_month\_of\_year]])

返回数据类型： 双

monthsname 函数的图表

monthsname 函数的图表

monthsname 函数的图表 ![示例图显示给定特定的输入日期时 monthsname 函数返回的月份范围。](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Resources/Images/scripting-functions-monthsname-general.png)

`monthsname()` 函数根据提供的 `n_months` 参数将一年划分为若干段。然后，它评估每个提供的 `date` 所属的段，并返回该段的开始和结束月份名称以及年份。该函数还提供了从前面或后面的段返回这些边界的能力，以及重新定义一年中的第一个月的能力。

函数中提供了一年中的以下时段作为 `n_month` 参数：

可能的 `n_month`n\_month 参数

| 期间 | 月数 |
| --- | --- |
| 月 | 1 |
| 双月 | 2 |
| 季 | 3 |
| 四个月 | 4 |
| 半年 | 6 |

参数

| 参数 | 描述 |
| --- | --- |
| n\_months | 用于定义时段的月数。整数或解算为整数的表达式必须为下列之一：1（相当于 inmonth() 函数）、2（两个月）、3（相当于 inquarter()函数）、4（四个月期间）或 6（半年）。 |
| date | 要评估的日期或时间戳。 |
| period\_no | 该周期可通过 period\_no 偏移，其为整数，或解算为整数的表达式，其中值 0 表示该周期包含 base\_date。period\_no 为负数表示前几个时段，为正数则表示随后的几个时段。 |
| first\_month\_of\_year | 如果您不想从一月开始处理（财政）年，可在 first\_month\_of\_year 中指定一个介于 2 和 12 之间的值。 |

## 适合使用 monthsname 的情况

当您希望向用户提供按其选择的时间段比较聚合的功能时，`monthsname()` 函数非常有用。例如，您可以提供一个输入变量，让用户查看每月、季度或半年的产品总销售额。

可以在加载脚本中创建这些维度，方法是将函数作为主日历表中的字段添加，或者直接在图表中创建维度作为计算维度。

函数示例

| 示例 | 结果 |
| --- | --- |
| `monthsname(4, '10/19/2013')` | 返回 'Sep-Dec 2013' 。因为在此例和其他示例中，已将 SET Monthnames 语句设置为 Jan;Feb;Mar，以此类推。 |
| `monthsname(4, '10/19/2013', -1)` | 返回 'May-Aug 2013'。 |
| ` monthsname(4, '10/19/2013', 0, 2)  ` | 返回 'Oct-Jan 2014'，因为指定年从月份 2 开始。因此，四个月期在次年的第一个月结束。 |

## 区域设置

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

#### 加载脚本和结果

概述

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

加载脚本包含：

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

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

* 创建一个字段 `bi_monthly_range`，将交易分组为双月段，并为每个交易返回该段的边界名称。

加载脚本

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

Transactions:
    Load
        *,
        monthsname(2,date) as bi_monthly_range
        ;
Load
*
Inline
[
id,date,amount
8188,2/19/2022,37.23
8189,3/7/2022,17.17
8190,3/30/2022,88.27
8191,4/5/2022,57.42
8192,4/16/2022,53.80
8193,5/1/2022,82.06
8194,5/7/2022,40.39
8195,5/22/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`

* `bi_monthly_range`

结果表

| 日期 | bi\_monthly\_range |
| --- | --- |
| 2/19/2022 | Jan-Feb 2022 |
| 3/7/2022 | Mar-Apr 2022 |
| 3/30/2022 | Mar-Apr 2022 |
| 4/5/2022 | Mar-Apr 2022 |
| 4/16/2022 | Mar-Apr 2022 |
| 5/1/2022 | May-Jun 2022 |
| 5/7/2022 | May-Jun 2022 |
| 5/22/2022 | May-Jun 2022 |
| 6/15/2022 | May-Jun 2022 |
| 6/26/2022 | May-Jun 2022 |
| 7/9/2022 | Jul-Aug 2022 |
| 7/22/2022 | Jul-Aug 2022 |
| 7/23/2022 | Jul-Aug 2022 |
| 7/27/2022 | Jul-Aug 2022 |
| 8/2/2022 | Jul-Aug 2022 |
| 8/8/2022 | Jul-Aug 2022 |
| 8/19/2022 | Jul-Aug 2022 |
| 9/26/2022 | Sep-Oct 2022 |
| 10/14/2022 | Sep-Oct 2022 |
| 10/29/2022 | Sep-Oct 2022 |

`bi_monthly_range` 字段是在前置 Load 语句中使用 `monthsname()` 函数创建的。提供的第一个参数是 2，将一年分成两个月的段。第二个参数标识要计算的字段。

monthsname 函数的图表，基本示例

monthsname 函数的图表，基本示例

monthsname 函数的图表，基本示例 ![显示使用 monthsname 函数确定交易发生月份范围的结果的图表。](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Resources/Images/scripting-functions-monthsname-basic-example.png)

交易 8195 发生在 5 月 22 日。`monthsname()` 函数最初将一年划分为两个月的段。交易 8195 发生在 5 月至 6 月期间。因此，函数以 `MonthNames` 系统变量格式返回这些月份，以及 2022 年 5 月至 6 月的年份。

## 示例 2 – period\_no

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

#### 加载脚本和结果

概述

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

加载脚本包含：

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

* 创建一个字段 `prev_bi_monthly_range`，将交易分组为两个月一次的段，并返回每个交易的先前段边界名称。

根据需要在此处添加其他文本，包括列表等。

加载脚本

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

Transactions:
    Load
        *,
        MonthsName(2,date,-1) as prev_bi_monthly_range
        ;
Load
*
Inline
[
id,date,amount
8188,2/19/2022,37.23
8189,3/7/2022,17.17
8190,3/30/2022,88.27
8191,4/5/2022,57.42
8192,4/16/2022,53.80
8193,5/1/2022,82.06
8194,5/7/2022,40.39
8195,5/22/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`

* `prev_bi_monthly_range`

结果表

| 日期 | prev\_bi\_monthly\_range |
| --- | --- |
| 2/19/2022 | Nov-Dec 2021 |
| 3/7/2022 | Jan-Feb 2022 |
| 3/30/2022 | Jan-Feb 2022 |
| 4/5/2022 | Jan-Feb 2022 |
| 4/16/2022 | Jan-Feb 2022 |
| 5/1/2022 | Mar-Apr 2022 |
| 5/7/2022 | Mar-Apr 2022 |
| 5/22/2022 | Mar-Apr 2022 |
| 6/15/2022 | Mar-Apr 2022 |
| 6/26/2022 | Mar-Apr 2022 |
| 7/9/2022 | May-Jun 2022 |
| 7/22/2022 | May-Jun 2022 |
| 7/23/2022 | May-Jun 2022 |
| 7/27/2022 | May-Jun 2022 |
| 8/2/2022 | May-Jun 2022 |
| 8/8/2022 | May-Jun 2022 |
| 8/19/2022 | May-Jun 2022 |
| 9/26/2022 | Jul-Aug 2022 |
| 10/14/2022 | Jul-Aug 2022 |
| 10/29/2022 | Jul-Aug 2022 |

在本例中，-1 用作 `monthsname()` 函数中的 `period_no`参数。最初将一年划分为两个月段后，该函数返回交易发生时的前一段边界。

monthsname 函数的图表，period\_no 示例

monthsname 函数的图表，period\_no 示例

monthsname 函数的图表，period\_no 示例 ![显示使用 monthsname 函数确定交易发生月份范围的结果的图表。](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Resources/Images/scripting-functions-monthsname-example-period-no.png)

交易 8195 发生在 5 月至 6 月期间。因此，上一个双月段在 3 月 1 日至 4 月 30 日之间，因此函数返回 Mar-Apr 2022。

## 示例 3 – first\_month\_of\_year

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

#### 加载脚本和结果

概述

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

加载脚本包含：

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

* 创建一个不同的字段 `bi_monthly_range`，将交易分为两个月的段，并返回每个交易的段边界。

然而，在本例中，我们还需要将 4 月设置为财政年度的第一个月。

加载脚本

```
SET DateFormat='MM/DD/YYYY';
						
Transactions:
    Load
        *,
        MonthsName(2,date,0,4) as bi_monthly_range
        ;
Load
*
Inline
[
id,date,amount
8188,2/19/2022,37.23
8189,3/7/2022,17.17
8190,3/30/2022,88.27
8191,4/5/2022,57.42
8192,4/16/2022,53.80
8193,5/1/2022,82.06
8194,5/7/2022,40.39
8195,5/22/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`

* `bi_monthly_range`

结果表

| 日期 | bi\_monthly\_range |
| --- | --- |
| 2/19/2022 | Feb-Mar 2021 |
| 3/7/2022 | Feb-Mar 2021 |
| 3/30/2022 | Feb-Mar 2021 |
| 4/5/2022 | Apr-May 2022 |
| 4/16/2022 | Apr-May 2022 |
| 5/1/2022 | Apr-May 2022 |
| 5/7/2022 | Apr-May 2022 |
| 5/22/2022 | Apr-May 2022 |
| 6/15/2022 | Jun-Jul 2022 |
| 6/26/2022 | Jun-Jul 2022 |
| 7/9/2022 | Jun-Jul 2022 |
| 7/22/2022 | Jun-Jul 2022 |
| 7/23/2022 | Jun-Jul 2022 |
| 7/27/2022 | Jun-Jul 2022 |
| 8/2/2022 | Aug-Sep 2022 |
| 8/8/2022 | Aug-Sep 2022 |
| 8/19/2022 | Aug-Sep 2022 |
| 9/26/2022 | Aug-Sep 2022 |
| 10/14/2022 | Oct-Nov 2022 |
| 10/29/2022 | Oct-Nov 2022 |

通过在 `monthsname()` 函数中使用 4 作为 `first_month_of_year` 参数，函数从 4 月 1 日开始一年。然后它将一年分成两个月的段：Apr-May、Jun-Jul、Aug-Sep、Oct-Nov、Dec-Jan、Feb-Mar。

结果的段落文本。

交易 8195 发生在 5 月 22 日，属于 4 月 1 日至 5 月 31 日期间。因此，函数返回 Apr-May 2022。

monthsname 函数 first\_month\_of\_year 示例的图表

monthsname 函数 first\_month\_of\_year 示例的图表

monthsname 函数 first\_month\_of\_year 示例的图表 ![显示使用 monthsname 函数确定交易发生月份范围的结果的图表。](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Resources/Images/scripting-functions-monthsname-example-first-month-of-year.png)

## 示例 4 – 图表对象

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

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

概述

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

加载脚本包含与第一个示例相同的数据集和场景。然而，在本例中，未更改的数据集被加载到应用程序中。将交易分组为两个月段并返回每个交易的段边界的计算是作为应用程序的图表对象中的度量创建的。

加载脚本

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

Transactions:
Load
*
Inline
[
id,date,amount
8188,2/19/2022,37.23
8189,3/7/2022,17.17
8190,3/30/2022,88.27
8191,4/5/2022,57.42
8192,4/16/2022,53.80
8193,5/1/2022,82.06
8194,5/7/2022,40.39
8195,5/22/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。

创建以下度量：

=monthsname(2,date)

结果表

| 日期 | =monthsname(2,date) |
| --- | --- |
| 2/19/2022 | Jan-Feb 2022 |
| 3/7/2022 | Mar-Apr 2022 |
| 3/30/2022 | Mar-Apr 2022 |
| 4/5/2022 | Mar-Apr 2022 |
| 4/16/2022 | Mar-Apr 2022 |
| 5/1/2022 | May-Jun 2022 |
| 5/7/2022 | May-Jun 2022 |
| 5/22/2022 | May-Jun 2022 |
| 6/15/2022 | May-Jun 2022 |
| 6/26/2022 | May-Jun 2022 |
| 7/9/2022 | Jul-Aug 2022 |
| 7/22/2022 | Jul-Aug 2022 |
| 7/23/2022 | Jul-Aug 2022 |
| 7/27/2022 | Jul-Aug 2022 |
| 8/2/2022 | Jul-Aug 2022 |
| 8/8/2022 | Jul-Aug 2022 |
| 8/19/2022 | Jul-Aug 2022 |
| 9/26/2022 | Sep-Oct 2022 |
| 10/14/2022 | Sep-Oct 2022 |
| 10/29/2022 | Sep-Oct 2022 |

通过使用 monthsname() 函数在图表对象中创建 bi\_monthly\_range 字段作为度量。提供的第一个参数是 2，将一年分成两个月的段。第二个参数标识要计算的字段。

monthsname 函数的图表，图表对象示例

monthsname 函数的图表，图表对象示例

monthsname 函数的图表，图表对象示例 ![显示将 monthsname 函数与图表对象一起使用的结果的图。](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Resources/Images/scripting-functions-monthsname-example-chart-object.png)

交易 8195 发生在 5 月 22 日。monthsname() 函数最初将一年划分为两个月的段。交易 8195 发生在 5 月至 6 月期间。因此，函数以 MonthNames 系统变量格式返回这些月份，以及 2022 年 5 月至 6 月的年份。

## 示例 5 – 场景

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

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

概述

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

加载脚本包含：

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

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

最终用户想要一个图表对象，该对象按他们自己选择的时间段显示总销售额。即使该维度在数据模型中不可用，也可以使用 monthsname() 函数作为由变量输入控件动态修改的计算维度来实现。

加载脚本

```
SET vPeriod = 1;
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
];
```

结果

加载数据并打开工作表。

在加载脚本开始时，创建了一个变量 (vPeriod)，该变量将绑定到变量输入控件。接下来，将变量配置为工作表中的自定义对象。

执行以下操作：

1. 在资产面板中，单击 图表。

2. 在 仪表板对象 下，将 变量输入 拖动到工作表上。

3. 输入图表对象的标题。

4. 在变量下，选择 vPeriod 作为名称，并将对象设置为显示为下拉列表。

5. 在值下，将对象配置为使用动态值。输入以下内容：

   ='1~month|2~bi-month|3~quarter|4~tertial|6~half-year'

接下来，创建结果表。

执行以下操作：

1. 创建新表并添加以下计算维度：

   =monthsname($(vPeriod),date)

2. 添加此度量以计算总销售额：

   =sum(amount)

3. 将度量的数字格式设置为金额。单击“编辑工作表”完成编辑。现在可以通过调整变量对象中的时间段来修改表中显示的数据。

这是选择 tertial 选项时结果表的外观：

结果表

| monthsname($(vPeriod),date) | =sum(amount) |
| --- | --- |
| Jan-Apr 2022 | 253.89 |
| May-Aug 2022 | 713.58 |
| Sep-Dec 2022 | 248.12 |