lunarweekname - 脚本和图表函数
此函数用于返回一个显示值,显示与包含 date 的阴历周的第一天的第一毫秒时间戳对应的年份和阴历周数。Qlik Sense 中的农历周定义为将 1 月 1 日计算为一周的第一天,除一年的最后一周外,将正好包含七天。
语法:
LunarWeekName(date [, period_no[, first_week_day]])
返回数据类型: 双
lunarweekname() 函数确定日期属于哪个农历周,从 1 月 1 日开始计算周数。然后返回一个包含 year/weekcount 的值。
参数 | 描述 |
---|---|
date | 要评估的日期或时间戳。 |
period_no | period_no 为整数,或解算为整数的表达式,其中值 0 表示该阴历周包含 date。period_no 为负数表示前几个阴历星期,为正数表示随后的几个阴历星期。 |
first_week_day | 偏移可以大小或小于零。这可以按指定的天数和/或某日内时间的小数对更改一年的开始。 |
适用场景
当您希望按农历周比较聚合时,lunarweekname() 函数非常有用。例如,该函数可用于确定农历周产品的总销售额。如果您希望确保一年中第一周包含的所有值最早只包含从 1 月 1 日开始的值,农历周非常有用。
通过使用函数在主日历表中创建字段,可以在 LOAD 脚本中创建这些维度。该函数也可以直接在图表中用作计算维度。
Example | 结果 |
---|---|
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 语句中指定。由于区域设置和其他因素,系统中的默认日期格式可能有所不同。您可以更改以下示例中的格式以满足您的要求。或者,您可以更改加载脚本中的格式以匹配这些示例。
应用程序中的默认区域设置基于安装 Qlik Sense 的计算机或服务器的区域系统设置。如果您访问的 Qlik Sense 服务器设置为瑞典,则数据加载编辑器将使用瑞典地区设置的日期、时间和货币。这些区域格式设置与 Qlik Sense 用户界面中显示的语言无关。Qlik Sense 将以与您使用的浏览器相同的语言显示。
示例 1 – 没有其他参数的日期
概述
打开数据加载编辑器,并将下面的加载脚本添加到新选项卡。
加载脚本包含:
-
包含 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
日期 | 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() 函数并将 date 字段作为函数的参数传递,在前面的 LOAD 语句中创建了 lunar_week_name 字段。
lunarweekname() 函数标识日期值属于哪个农历周,并返回该日期的年和周数字。
交易 8189 发生在 1 月 19 日。lunarweekname() 函数确定该日期属于 1 月 15 日开始的农历周;这是一年中的第三个农历周。因此,该交易返回的 lunar_week_name 值为 2022/03。
示例 2–带 period_no 参数的日期
概述
打开数据加载编辑器,并将下面的加载脚本添加到新选项卡。
加载脚本包含:
-
与第一个示例相同的数据集和场景。
-
创建字段 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
日期 | 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 作为偏移量参数,因此该函数首先标识交易发生的农历周。然后返回年份和前一周的数字。
交易 8189 发生在 1 月 19 日。lunarweekname() 函数确定该交易发生在一年中的第三个农历周,因此它返回 previous_lunar_week_name 字段在 2022/02 之前一周的年份和值。
示例 3 – 带有 first_week_day 参数的日期
概述
打开数据加载编辑器,并将下面的加载脚本添加到新选项卡。
加载脚本包含与第一个示例相同的数据集和场景。然而,在这个例子中,我们将农历周设置为 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
日期 | 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_date,因此它将农历周初从 1 月 1 日偏移到 1 月 5 日。
交易 8188 发生在 1 月 7 日。由于农历周从 1 月 5 日开始,lunarweekname() 函数确定包含 1 月 7 号的农历周是一年中的第一个农历周。因此,该交易返回的 lunar_week_name 值为 2022/01。
示例 4 – 图表对象示例
概述
打开数据加载编辑器,并将下面的加载脚本添加到新选项卡。
加载脚本包含与第一个示例相同的数据集和场景。
然而,在本例中,未更改的数据集被加载到应用程序中。返回交易发生的农历周数和年份的计算在应用程序的图表对象中创建为度量。
加载脚本
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() 函数标识日期值属于哪个农历周,并返回该日期的年和周数字。
交易 8189 发生在 1 月 19 日。lunarweekname() 函数确定该日期属于 1 月 15 日开始的农历周;这是一年中的第三个农历周。因此,该交易的 lunar_week_name 值为 2022/03。
示例 5 – 场景
概述
打开数据加载编辑器,并将下面的加载脚本添加到新选项卡。
加载脚本包含:
-
包含 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
];
结果
执行以下操作:
-
加载数据并打开工作表。新建表格。
-
使用以下表达式创建计算维度:
=lunarweekname(date)
-
使用以下聚合度量计算总销售额:
=sum(amount)
-
将度量的数字格式设置为金额。
=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 |