monthsname - 脚本和图表函数在该页面上
此函数用于返回一个显示值,表示时段各月份(根据 MonthNames 脚本变量的格式)和年的范围。基础数值与包含基准日期的一个月、两个月、季度、四个月期间或半年的第一毫秒的时间戳对应。
语法:
MonthsName( n_months, date[, period_no[, first_month_of_year]] )
返回数据类型: 双
monthsname 函数的图表
monthsname() 函数根据提供的 n_months 参数将一年划分为若干段。然后,它评估每个提供的 date 所属的段,并返回该段的开始和结束月份名称以及年份。该函数还提供了从前面或后面的段返回这些边界的能力,以及重新定义一年中的第一个月的能力。
函数中提供了一年中的以下时段作为 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(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 语句中指定。由于区域设置和其他因素,系统中的默认日期格式可能有所不同。您可以更改以下示例中的格式以满足您的要求。或者,您可以更改加载脚本中的格式以匹配这些示例。有关详细信息,请参阅修改应用程序和脚本的区域设置 。
应用程序中的默认区域设置基于用户配置文件。这些区域格式设置与 Qlik Cloud 用户界面中显示的语言无关。Qlik Cloud 将以与您使用的浏览器相同的语言显示。
如果你是应用程序创建者,你可以为自己创建的应用程序设置默认区域。有关更多信息,请参阅设置 Qlik Cloud 分析 中创建应用程序和脚本所用的首选区域设置 。
示例 1 – 基本示例
加载脚本和结果
概述
打开数据加载编辑器,并将下面的加载脚本添加到新选项卡。
加载脚本包含:
包含 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
];
结果
加载数据并打开工作表。创建新表并将这些字段添加为维度 :
结果表
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 函数的图表,基本示例
交易 8195 发生在 5 月 22 日。monthsname() 函数最初将一年划分为两个月的段。交易 8195 发生在 5 月至 6 月期间。因此,函数以 MonthNames 系统变量格式返回这些月份,以及 2022 年 5 月至 6 月的年份。
示例 2 – period_no
加载脚本和结果
概述
打开数据加载编辑器,并将下面的加载脚本添加到新选项卡。
加载脚本包含:
根据需要在此处添加其他文本,包括列表等。
加载脚本
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
结果表
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 示例
交易 8195 发生在 5 月至 6 月期间。因此,上一个双月段在 3 月 1 日至 4 月 30 日之间,因此函数返回 Mar-Apr 2022。
示例 3 – first_month_of_year
加载脚本和结果
概述
打开数据加载编辑器,并将下面的加载脚本添加到新选项卡。
加载脚本包含:
然而,在本例中,我们还需要将 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
];
结果
加载数据并打开工作表。创建新表并将这些字段添加为维度 :
结果表
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 示例的图表
示例 4 – 图表对象
加载脚本和图表表达式
概述
打开数据加载编辑器 ,并将下面的加载脚本 添加到新选项卡。
加载脚本包含与第一个示例相同的数据集和场景。然而,在本例中,未更改的数据集被加载到应用程序中。将交易分组为两个月段并返回每个交易的段边界的计算是作为应用程序的图表对象中的度量 创建的。
加载脚本
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)
结果表
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 函数的图表,图表对象示例
交易 8195 发生在 5 月 22 日。monthsname() 函数最初将一年划分为两个月的段。交易 8195 发生在 5 月至 6 月期间。因此,函数以 MonthNames 系统变量格式返回这些月份,以及 2022 年 5 月至 6 月的年份。
示例 5 – 场景
加载脚本和图表表达式
概述
打开数据加载编辑器,并将下面的加载脚本添加到新选项卡。
加载脚本包含:
最终用户想要一个图表对象,该对象按他们自己选择的时间段显示总销售额。即使该维度 在数据模型中不可用,也可以使用 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 ),该变量将绑定到变量输入控件。接下来,将变量配置为工作表中的自定义对象 。
执行以下操作:
在资产面板中,单击自定义对象 。
选择 Qlik 仪表板捆绑 ,并创建变量输入 对象。
输入图表对象的标题。
在变量 下,选择 vPeriod 作为名称,并将对象设置为显示为下拉列表 。
在值 下,将对象配置为使用动态值。输入以下内容:
='1~month|2~bi-month|3~quarter|4~tertial|6~half-year'
接下来,创建结果表。
执行以下操作:
创建新表并添加以下计算维度:
=monthsname($(vPeriod),date)
添加此度量以计算总销售额:
=sum(amount)
将度量的数字格式 设置为金额 。单击完成编辑 。现在可以通过调整变量对象中的时间段来修改表中显示的数据。
这是选择 tertial 选项时结果表的外观:
结果表
Jan-Apr 2022
253.89
May-Aug 2022
713.58
Sep-Dec 2022
248.12