lunarweekend - 脚本和图表函数
此函数用于返回与包含 date 的阴历周的最后毫秒的时间戳对应的值。Qlik Sense 中的农历周定义为将 1 月 1 日计算为一周的第一天,除一年的最后一周外,将正好包含七天。
语法:
LunarweekEnd(date[, period_no[, first_week_day]])
返回数据类型: 双
lunarweekend() 函数决定 date 属于哪个农历周。然后以日期格式返回该周最后一毫秒的时间戳。
参数 | 说明 |
---|---|
date | 要评估的日期或时间戳。 |
period_no | period_no 为整数,或解算为整数的表达式,其中值 0 表示该阴历周包含 date。period_no 为负数表示前几个阴历星期,为正数表示随后的几个阴历星期。 |
first_week_day | 偏移可以大小或小于零。这可以按指定的天数和/或某日内时间的小数对更改一年的开始。 |
适用场景
当用户希望计算使用当周尚未发生的分数时,lunarweekend() 函数通常用作表达式的一部分。与 weekend() 函数不同,每个日历年的最后一个农历周将于 12 月 31 日结束。例如,lunarweekend() 函数可用于计算一周内尚未发生的利息。
示例 | 结果 |
---|---|
lunarweekend('01/12/2013') | 返回 01/14/2013 23:59:59。 |
lunarweekend('01/12/2013', -1) | 返回 01/07/2013 23:59:59。 |
lunarweekend('01/12/2013', 0, 1) | 返回 01/15/2013 23:59:59。 |
区域设置
除非另有规定,本主题中的示例使用以下日期格式:MM/DD/YYYY。日期格式已经在数据加载脚本中的 SET DateFormat 语句中指定。由于区域设置和其他因素,系统中的默认日期格式可能有所不同。您可以更改以下示例中的格式以满足您的要求。或者,您可以更改加载脚本中的格式以匹配这些示例。
应用程序中的默认区域设置基于安装 Qlik Sense 的计算机或服务器的区域系统设置。如果您访问的 Qlik Sense 服务器设置为瑞典,则数据加载编辑器将使用瑞典地区设置的日期、时间和货币。这些区域格式设置与 Qlik Sense 用户界面中显示的语言无关。Qlik Sense 将以与您使用的浏览器相同的语言显示。
示例 1 – 没有其他参数
概述
打开数据加载编辑器,并将下面的加载脚本添加到新选项卡。
加载脚本包含:
-
包含 2022 年交易集的数据集,该数据集加载到名为 Transactions 的表中。
-
日期字段已以 DateFormat 系统变量 (MM/DD/YYYY) 格式提供。
-
创建字段 end_of_week,返回交易发生的农历周结束的时间戳。
加载脚本
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
lunarweekend(date) as end_of_week,
timestamp(lunarweekend(date)) as end_of_week_timestamp
;
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
-
end_of_week
-
end_of_week_timestamp
日期 | end_of_week | end_of_week_timestamp |
---|---|---|
1/7/2022 | 01/07/2022 | 1/7/2022 11:59:59 PM |
1/19/2022 | 01/21/2022 | 1/21/2022 11:59:59 PM |
2/5/2022 | 02/11/2022 | 2/11/2022 11:59:59 PM |
2/28/2022 | 03/04/2022 | 3/4/2022 11:59:59 PM |
3/16/2022 | 03/18/2022 | 3/18/2022 11:59:59 PM |
4/1/2022 | 04/01/2022 | 4/1/2022 11:59:59 PM |
5/7/2022 | 05/13/2022 | 5/13/2022 11:59:59 PM |
5/16/2022 | 05/20/2022 | 5/20/2022 11:59:59 PM |
6/15/2022 | 06/17/2022 | 6/17/2022 11:59:59 PM |
6/26/2022 | 07/01/2022 | 7/1/2022 11:59:59 PM |
7/9/2022 | 07/15/2022 | 7/15/2022 11:59:59 PM |
7/22/2022 | 07/22/2022 | 7/22/2022 11:59:59 PM |
7/23/2022 | 07/29/2022 | 7/29/2022 11:59:59 PM |
7/27/2022 | 07/29/2022 | 7/29/2022 11:59:59 PM |
8/2/2022 | 08/05/2022 | 8/5/2022 11:59:59 PM |
8/8/2022 | 08/12/2022 | 8/12/2022 11:59:59 PM |
8/19/2022 | 08/19/2022 | 8/19/2022 11:59:59 PM |
9/26/2022 | 09/30/2022 | 9/30/2022 11:59:59 PM |
10/14/2022 | 10/14/2022 | 10/14/2022 11:59:59 PM |
10/29/2022 | 11/04/2022 | 11/4/2022 11:59:59 PM |
通过使用 lunarweekend() 函数并将 end_of_week 字段作为函数的参数传递,在前置 Load 语句中创建了 date 字段。
lunarweekend() 函数标识日期值属于哪个农历周,并返回该周最后一毫秒的时间戳。
交易 8189 发生在 1 月 19 日。lunarweekend() 函数确定农历周从 1 月 15 日开始。因此,该交易 end_of_week 的值返回农历周的最后一毫秒,即 1 月 21 日下午 11:59:59。
示例 2 – period_no
概述
打开数据加载编辑器,并将下面的加载脚本添加到新选项卡。
加载脚本包含:
-
与第一个示例相同的数据集和场景。
-
创建一个字段 previous_lunar_week_end,该字段返回事务发生前的农历周末的时间戳。
加载脚本
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
lunarweekend(date,-1) as previous_lunar_week_end,
timestamp(lunarweekend(date,-1)) as previous_lunar_week_end_timestamp
;
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_end
-
previous_lunar_week_end_timestamp
日期 | previous_lunar_week_end | previous_lunar_week_end_timestamp |
---|---|---|
1/7/2022 | 12/31/2021 | 12/31/2021 11:59:59 PM |
1/19/2022 | 01/14/2022 | 1/14/2022 11:59:59 PM |
2/5/2022 | 02/04/2022 | 2/4/2022 11:59:59 PM |
2/28/2022 | 02/25/2022 | 2/25/2022 11:59:59 PM |
3/16/2022 | 03/11/2022 | 3/18/2022 11:59:59 PM |
4/1/2022 | 03/25/2022 | 3/25/2022 11:59:59 PM |
5/7/2022 | 05/06/2022 | 5/6/2022 11:59:59 PM |
5/16/2022 | 05/13/2022 | 5/13/2022 11:59:59 PM |
6/15/2022 | 06/10/2022 | 6/10/2022 11:59:59 PM |
6/26/2022 | 06/24/2022 | 6/24/2022 11:59:59 PM |
7/9/2022 | 07/08/2022 | 7/8/2022 11:59:59 PM |
7/22/2022 | 07/15/2022 | 7/15/2022 11:59:59 PM |
7/23/2022 | 07/22/2022 | 7/22/2022 11:59:59 PM |
7/27/2022 | 07/22/2022 | 7/22/2022 11:59:59 PM |
8/2/2022 | 07/29/2022 | 7/29/2022 11:59:59 PM |
8/8/2022 | 08/05/2022 | 8/5/2022 11:59:59 PM |
8/19/2022 | 08/12/2022 | 8/12/2022 11:59:59 PM |
9/26/2022 | 09/23/2022 | 9/23/2022 11:59:59 PM |
10/14/2022 | 10/07/2022 | 10/7/2022 11:59:59 PM |
10/29/2022 | 10/28/2022 | 10/28/2022 11:59:59 PM |
在本例中,由于 lunarweekend() 函数中使用了为 -1 的 period_no 作为偏移量参数,因此该函数首先标识交易发生的农历周。然后,它在一周前移动,并确定农历周的最后一毫秒。
交易 8189 发生在 1 月 19 日。lunarweekend() 函数确定农历周从 1 月 15 日开始。因此,上一个农历周开始于 1 月 8 日,结束于 1 月 14 日晚上 11:59:59;这是为 previous_lunar_week_end 字段返回的值。
示例 3 – first_week_day
概述
打开数据加载编辑器,并将下面的加载脚本添加到新选项卡。
加载脚本包含与第一个示例相同的数据集和场景。然而,在这个例子中,我们将农历周设置为 1 月 6 日开始。
加载脚本
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
lunarweekend(date,0,4) as end_of_week,
timestamp(lunarweekend(date,0,4)) as end_of_week_timestamp
;
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
-
end_of_week
-
end_of_week_timestamp
日期 | end_of_week | end_of_week_timestamp |
---|---|---|
1/7/2022 | 01/11/2022 | 1/11/2022 11:59:59 PM |
1/19/2022 | 01/25/2022 | 1/25/2022 11:59:59 PM |
2/5/2022 | 02/08/2022 | 2/8/2022 11:59:59 PM |
2/28/2022 | 03/01/2022 | 3/1/2022 11:59:59 PM |
3/16/2022 | 03/22/2022 | 3/22/2022 11:59:59 PM |
4/1/2022 | 04/05/2022 | 4/5/2022 11:59:59 PM |
5/7/2022 | 05/10/2022 | 5/10/2022 11:59:59 PM |
5/16/2022 | 05/17/2022 | 5/17/2022 11:59:59 PM |
6/15/2022 | 06/21/2022 | 6/21/2022 11:59:59 PM |
6/26/2022 | 06/28/2022 | 6/28/2022 11:59:59 PM |
7/9/2022 | 07/12/2022 | 7/12/2022 11:59:59 PM |
7/22/2022 | 07/26/2022 | 7/26/2022 11:59:59 PM |
7/23/2022 | 07/26/2022 | 7/26/2022 11:59:59 PM |
7/27/2022 | 08/02/2022 | 8/2/2022 11:59:59 PM |
8/2/2022 | 08/02/2022 | 8/2/2022 11:59:59 PM |
8/8/2022 | 08/09/2022 | 8/9/2022 11:59:59 PM |
8/19/2022 | 08/23/2022 | 8/23/2022 11:59:59 PM |
9/26/2022 | 09/27/2022 | 9/27/2022 11:59:59 PM |
10/14/2022 | 10/18/2022 | 10/18/2022 11:59:59 PM |
10/29/2022 | 11/01/2022 | 11/1/2022 11:59:59 PM |
在本例中,由于 lunarweekend() 函数中使用了参数 first_week_date,因此它将年初从 1 月 1 日偏移到 1 月 5 日。
交易 8189 发生在 1 月 19 日。由于农历周从 1 月 5 日开始,lunarweekend() 函数确定包含 1 月 19 日的农历周也从 1 月 19 号开始。因此,农历周的结束发生在 1 月 25 日晚上 11:59:59;这是为 end_of_week 字段返回的值。
示例 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。
添加以下度量:
=lunarweekend(date)
=timestamp(lunarweekend(date))
日期 | =lunarweekend(date) | =timestamp(lunarweekend(date)) |
---|---|---|
1/7/2022 | 01/07/2022 | 1/7/2022 11:59:59 PM |
1/19/2022 | 01/21/2022 | 1/21/2022 11:59:59 PM |
2/5/2022 | 02/11/2022 | 2/11/2022 11:59:59 PM |
2/28/2022 | 03/04/2022 | 3/4/2022 11:59:59 PM |
3/16/2022 | 03/18/2022 | 3/18/2022 11:59:59 PM |
4/1/2022 | 04/01/2022 | 4/1/2022 11:59:59 PM |
5/7/2022 | 05/13/2022 | 5/13/2022 11:59:59 PM |
5/16/2022 | 05/20/2022 | 5/20/2022 11:59:59 PM |
6/15/2022 | 06/17/2022 | 6/17/2022 11:59:59 PM |
6/26/2022 | 07/01/2022 | 7/1/2022 11:59:59 PM |
7/9/2022 | 07/15/2022 | 7/15/2022 11:59:59 PM |
7/22/2022 | 07/22/2022 | 7/22/2022 11:59:59 PM |
7/23/2022 | 07/29/2022 | 7/29/2022 11:59:59 PM |
7/27/2022 | 07/29/2022 | 7/29/2022 11:59:59 PM |
8/2/2022 | 08/05/2022 | 8/5/2022 11:59:59 PM |
8/8/2022 | 08/12/2022 | 8/12/2022 11:59:59 PM |
8/19/2022 | 08/19/2022 | 8/19/2022 11:59:59 PM |
9/26/2022 | 09/30/2022 | 9/30/2022 11:59:59 PM |
10/14/2022 | 10/14/2022 | 10/14/2022 11:59:59 PM |
10/29/2022 | 11/04/2022 | 11/4/2022 11:59:59 PM |
通过使用 lunarweekend() 函数并将 date 字段作为函数的参数传递,在图表对象中创建 end_of_week 度量。
lunarweekend() 函数标识日期值属于哪个农历周,并返回该周最后一毫秒的时间戳。
交易 8189 发生在 1 月 19 日。lunarweekend() 函数确定农历周从 1 月 15 日开始。因此,该交易 end_of_week 的值返回农历周的最后一毫秒,即 1 月 21 日下午 11:59:59。
示例 5 – 场景
概述
打开数据加载编辑器,并将下面的加载脚本添加到新选项卡。
加载脚本包含:
-
加载到名为 Employee_Expenses 的表中的数据集。
-
每个员工的员工 ID、员工姓名和平均每日费用报销。
最终用户需要一个图表对象,该图表对象按员工 ID 和员工姓名显示农历周剩余时间内仍要发生的估计费用索赔。
加载脚本
Employee_Expenses:
Load
*
Inline
[
employee_id,employee_name,avg_daily_claim
182,Mark, $15
183,Deryck, $12.5
184,Dexter, $12.5
185,Sydney,$27
186,Agatha,$18
];
结果
执行以下操作:
-
加载数据并打开工作表。新建表格。
-
添加以下字段作为维度:
-
employee_id
-
employee_name
-
-
接下来,创建以下度量来计算累计利息:
=(lunarweekend(today(1))-today(1))*avg_daily_claim
-
将度量的数字格式设置为金额。
EmployeeID | employee_name | =(lunarweekend(today(1))-today(1))*avg_daily_claim |
---|---|---|
182 | Mark | $75.00 |
183 | Deryck | $62.50 |
184 | Dexter | $62.50 |
185 | Sydney | $135.00 |
186 | Agatha | $90.00 |
lunarkweekend() 函数使用今天的日期作为唯一参数,返回当前农历周的结束日期。然后,通过从农历周结束日期中减去今天的日期,表达式返回本周剩余的天数。
然后将该值乘以每个员工的平均每日费用索赔,以计算每个员工在剩余农历周预计提出的索赔的估计值。