lunarweekstart - 脚本和图表函数
此函数用于返回与包含 date 的阴历周第一天的第一毫秒的时间戳对应的值。Qlik Sense 中的农历周定义为将 1 月 1 日计算为一周的第一天,除一年的最后一周外,将正好包含七天。
语法:
LunarweekStart(date[, period_no[, first_week_day]])
返回数据类型: 双
lunarweekstart() 函数决定 date 属于哪个农历周。然后以日期格式返回该周第一毫秒的时间戳。
参数 | 说明 |
---|---|
date | 要评估的日期或时间戳。 |
period_no | period_no 为整数,或解算为整数的表达式,其中值 0 表示该阴历周包含 date。period_no 为负数表示前几个阴历星期,为正数表示随后的几个阴历星期。 |
first_week_day | 偏移可以大小或小于零。这可以按指定的天数和/或某日内时间的小数对更改一年的开始。 |
适用场景
当用户希望计算使用到目前为止已过的一周的部分时,lunarweekstart() 函数通常用作表达式的一部分。与 weekstart() 函数不同,在每个新日历年开始时,一周从 1 月 1 日开始,随后的每一周都在 7 天后开始。lunarweekstart() 函数不受 FirstWeekDay 系统变量的影响。
例如,lunarweekstart() 可用于计算一周内累计的利息。
示例 | 结果 |
---|---|
lunarweekstart('01/12/2013') | 返回 01/08/2013。 |
lunarweekstart('01/12/2013', -1) | 返回 01/01/2013。 |
lunarweekstart('01/12/2013', 0, 1 ) | 返回 01/09/2013,因为设置 first_week_day 为 1 表示年初已更改为 01/02/2013。 |
区域设置
除非另有规定,本主题中的示例使用以下日期格式:MM/DD/YYYY。日期格式已经在数据加载脚本中的 SET DateFormat 语句中指定。由于区域设置和其他因素,系统中的默认日期格式可能有所不同。您可以更改以下示例中的格式以满足您的要求。或者,您可以更改加载脚本中的格式以匹配这些示例。有关详细信息,请参阅修改应用程序和脚本的区域设置。
应用程序中的默认区域设置基于用户配置文件。这些区域格式设置与 Qlik Cloud 用户界面中显示的语言无关。Qlik Cloud 将以与您使用的浏览器相同的语言显示。
如果你是应用程序创建者,你可以为自己创建的应用程序设置默认区域。有关更多信息,请参阅设置 Qlik Cloud 分析 中创建应用程序和脚本所用的首选区域设置。
示例 1 – 没有其他参数
概述
打开数据加载编辑器,并将下面的加载脚本添加到新选项卡。
加载脚本包含:
-
包含 2022 年交易集的数据集,该数据集加载到名为 Transactions 的表中。
- 日期字段已以 DateFormat 系统变量 (MM/DD/YYYY) 格式提供。
-
创建字段 start_of_week,返回交易发生的农历周开始的时间戳。
加载脚本
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
lunarweekstart(date) as start_of_week,
timestamp(lunarweekstart(date)) as start_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
-
start_of_week
-
start_of_week_timestamp
日期 | start_of_week | start_of_week_timestamp |
---|---|---|
1/7/2022 | 01/01/2022 | 1/1/2022 12:00:00 AM |
1/19/2022 | 01/15/2022 | 1/15/2022 12:00:00 AM |
2/5/2022 | 02/05/2022 | 2/5/2022 12:00:00 AM |
2/28/2022 | 02/26/2022 | 2/26/2022 12:00:00 AM |
3/16/2022 | 03/12/2022 | 3/12/2022 12:00:00 AM |
4/1/2022 | 03/26/2022 | 3/26/2022 12:00:00 AM |
5/7/2022 | 05/07/2022 | 5/7/2022 12:00:00 AM |
5/16/2022 | 05/14/2022 | 5/14/2022 12:00:00 AM |
6/15/2022 | 06/11/2022 | 6/11/2022 12:00:00 AM |
6/26/2022 | 06/25/2022 | 6/25/2022 12:00:00 AM |
7/9/2022 | 07/09/2022 | 7/9/2022 12:00:00 AM |
7/22/2022 | 07/16/2022 | 7/16/2022 12:00:00 AM |
7/23/2022 | 07/23/2022 | 7/23/2022 12:00:00 AM |
7/27/2022 | 07/23/2022 | 7/23/2022 12:00:00 AM |
8/2/2022 | 07/30/2022 | 7/30/2022 12:00:00 AM |
8/8/2022 | 08/06/2022 | 8/6/2022 12:00:00 AM |
8/19/2022 | 08/13/2022 | 8/13/2022 12:00:00 AM |
9/26/2022 | 09/24/2022 | 9/24/2022 12:00:00 AM |
10/14/2022 | 10/08/2022 | 10/8/2022 12:00:00 AM |
10/29/2022 | 10/29/2022 | 10/29/2022 12:00:00 AM |
通过使用 lunarweekstart() 函数并将 date 字段作为函数的参数传递,在前置 Load 语句中创建了 start_of_week 字段。
lunarweekstart() 函数标识日期所属的农历周,并返回该周第一毫秒的时间戳。
交易 8189 发生在 1 月 19 日。lunarweekstart() 函数确定农历周从 1 月 15 日开始。因此,该交易的 start_of_week 值返回当天的第一毫秒,即 1 月 15 日上午 12:00:00。
示例 2 – period_no
概述
打开数据加载编辑器,并将下面的加载脚本添加到新选项卡。
加载脚本包含:
-
与第一个示例相同的数据集和场景。
-
创建一个字段 previous_lunar_week_start,该字段返回事务发生前的农历周开始的时间戳。
加载脚本
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
lunarweekstart(date,-1) as previous_lunar_week_start,
timestamp(lunarweekstart(date,-1)) as previous_lunar_week_start_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
];
结果
日期 | previous_lunar_week_start | previous_lunar_week_start_timestamp |
---|---|---|
1/7/2022 | 12/24/2021 | 12/24/2021 12:00:00 AM |
1/19/2022 | 01/08/2022 | 1/8/2022 12:00:00 AM |
2/5/2022 | 01/29/2022 | 1/29/2022 12:00:00 AM |
2/28/2022 | 02/19/2022 | 2/19/2022 12:00:00 AM |
3/16/2022 | 03/05/2022 | 3/5/2022 12:00:00 AM |
4/1/2022 | 03/19/2022 | 3/19/2022 12:00:00 AM |
5/7/2022 | 04/30/2022 | 4/30/2022 12:00:00 AM |
5/16/2022 | 05/07/2022 | 5/7/2022 12:00:00 AM |
6/15/2022 | 06/04/2022 | 6/4/2022 12:00:00 AM |
6/26/2022 | 06/18/2022 | 6/18/2022 12:00:00 AM |
7/9/2022 | 07/02/2022 | 7/2/2022 12:00:00 AM |
7/22/2022 | 07/09/2022 | 7/9/2022 12:00:00 AM |
7/23/2022 | 07/16/2022 | 7/16/2022 12:00:00 AM |
7/27/2022 | 07/16/2022 | 7/16/2022 12:00:00 AM |
8/2/2022 | 07/23/2022 | 7/23/2022 12:00:00 AM |
8/8/2022 | 07/30/2022 | 7/30/2022 12:00:00 AM |
8/19/2022 | 08/06/2022 | 8/6/2022 12:00:00 AM |
9/26/2022 | 09/17/2022 | 9/17/2022 12:00:00 AM |
10/14/2022 | 10/01/2022 | 10/1/2022 12:00:00 AM |
10/29/2022 | 10/22/2022 | 10/22/2022 12:00:00 AM |
在本例中,由于 lunarweekstart() 函数中使用了为 -1 的 period_no 作为偏移参数,因此函数首先标识交易发生的农历周。然后,它在一周前移动,并确定农历周的第一毫秒。
交易 8189 发生在 1 月 19 日。lunarweekstart() 函数确定农历周从 1 月 15 日开始。因此,上一个农历周从 1 月 8 日上午 12:00:00 开始;这是为 previous_lunar_week_start 字段返回的值。
示例 3 – first_week_day
概述
打开数据加载编辑器,并将下面的加载脚本添加到新选项卡。
加载脚本包含与第一个示例相同的数据集和场景。然而,在这个例子中,我们将农历周设置为 1 月 6 日开始。
加载脚本
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
lunarweekstart(date,0,4) as start_of_week,
timestamp(lunarweekstart(date,0,4)) as start_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
-
start_of_week
-
start_of_week_timestamp
日期 | start_of_week | start_of_week_timestamp |
---|---|---|
1/7/2022 | 01/05/2022 | 1/5/2022 12:00:00 AM |
1/19/2022 | 01/19/2022 | 1/19/2022 12:00:00 AM |
2/5/2022 | 02/02/2022 | 2/2/2022 12:00:00 AM |
2/28/2022 | 02/23/2022 | 2/23/2022 12:00:00 AM |
3/16/2022 | 03/16/2022 | 3/16/2022 12:00:00 AM |
4/1/2022 | 03/30/2022 | 3/30/2022 12:00:00 AM |
5/7/2022 | 05/04/2022 | 5/4/2022 12:00:00 AM |
5/16/2022 | 05/11/2022 | 5/11/2022 12:00:00 AM |
6/15/2022 | 06/15/2022 | 6/15/2022 12:00:00 AM |
6/26/2022 | 06/22/2022 | 6/22/2022 12:00:00 AM |
7/9/2022 | 07/06/2022 | 7/6/2022 12:00:00 AM |
7/22/2022 | 07/20/2022 | 7/20/2022 12:00:00 AM |
7/23/2022 | 07/20/2022 | 7/20/2022 12:00:00 AM |
7/27/2022 | 07/27/2022 | 7/27/2022 12:00:00 AM |
8/2/2022 | 07/27/2022 | 7/27/2022 12:00:00 AM |
8/8/2022 | 08/03/2022 | 8/3/2022 12:00:00 AM |
8/19/2022 | 08/17/2022 | 8/17/2022 12:00:00 AM |
9/26/2022 | 09/21/2022 | 9/21/2022 12:00:00 AM |
10/14/2022 | 10/12/2022 | 10/12/2022 12:00:00 AM |
10/29/2022 | 10/26/2022 | 10/26/2022 12:00:00 AM |
在本例中,由于 lunarweekstart() 函数中使用了参数 first_week_date,因此它将年初从 1 月 1 日偏移到 1 月 5 日。
交易 8189 发生在 1 月 19 日。由于农历周从 1 月 5 日开始,lunarweekstart() 函数确定包含 1 月 19 日的农历周也从 1 月 19 号上午 12:00:00 开始。因此,这是 start_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。
添加以下度量:
=lunarweekstart(date)
=timestamp(lunarweekstart(date))
日期 | =lunarweekstart(date) | =timestamp(lunarweekstart(date)) |
---|---|---|
1/7/2022 | 01/01/2022 | 1/1/2022 12:00:00 AM |
1/19/2022 | 01/15/2022 | 1/15/2022 12:00:00 AM |
2/5/2022 | 02/05/2022 | 2/5/2022 12:00:00 AM |
2/28/2022 | 02/26/2022 | 2/26/2022 12:00:00 AM |
3/16/2022 | 03/12/2022 | 3/12/2022 12:00:00 AM |
4/1/2022 | 03/26/2022 | 3/26/2022 12:00:00 AM |
5/7/2022 | 05/07/2022 | 5/7/2022 12:00:00 AM |
5/16/2022 | 05/14/2022 | 5/14/2022 12:00:00 AM |
6/15/2022 | 06/11/2022 | 6/11/2022 12:00:00 AM |
6/26/2022 | 06/25/2022 | 6/25/2022 12:00:00 AM |
7/9/2022 | 07/09/2022 | 7/9/2022 12:00:00 AM |
7/22/2022 | 07/16/2022 | 7/16/2022 12:00:00 AM |
7/23/2022 | 07/23/2022 | 7/23/2022 12:00:00 AM |
7/27/2022 | 07/23/2022 | 7/23/2022 12:00:00 AM |
8/2/2022 | 07/30/2022 | 7/30/2022 12:00:00 AM |
8/8/2022 | 08/06/2022 | 8/6/2022 12:00:00 AM |
8/19/2022 | 08/13/2022 | 8/13/2022 12:00:00 AM |
9/26/2022 | 09/24/2022 | 9/24/2022 12:00:00 AM |
10/14/2022 | 10/08/2022 | 10/8/2022 12:00:00 AM |
10/29/2022 | 10/29/2022 | 10/29/2022 12:00:00 AM |
通过使用 lunarweekstart()函数并将日期字段作为函数的参数传递,在图表对象中创建了 start_of_week 度量。
lunarweekstart() 函数标识日期值属于哪个农历周,并返回该周最后一毫秒的时间戳。
交易 8189 发生在 1 月 19 日。lunarweekstart() 函数确定农历周从 1 月 15 日开始。因此,该交易的 start_of_week 值是当天的第一毫秒,即 1 月 15 日上午 12:00:00。
示例 5 – 场景
概述
打开数据加载编辑器,并将下面的加载脚本添加到新选项卡。
加载脚本包含:
-
包含一组贷款余额的数据集,该数据集加载到名为 Loans 的表中。
-
数据包括贷款 ID、本周初余额和每年每笔贷款收取的简单利率。
最终用户希望有一个图表对象,该对象按贷款 ID 显示周初至今每笔贷款的应计利息。
加载脚本
Loans:
Load
*
Inline
[
loan_id,start_balance,rate
8188,$10000.00,0.024
8189,$15000.00,0.057
8190,$17500.00,0.024
8191,$21000.00,0.034
8192,$90000.00,0.084
];
结果
执行以下操作:
-
加载数据并打开工作表。新建表格。
-
添加以下字段作为维度:
-
loan_id
-
start_balance
-
-
接下来,创建以下度量来计算累计利息:
=start_balance*(rate*(today(1)-lunarweekstart(today(1)))/365)
-
将度量的数字格式设置为金额。
loan_id | start_balance | =start_balance*(rate*(today(1)- lunarweekstart (today(1)))/365) |
---|---|---|
8188 | $10000.00 | $15.07 |
8189 | $15000.00 | $128.84 |
8190 | $17500.00 | $63.29 |
8191 | $21000.00 | $107.59 |
8192 | $90000.00 | $1139.18 |
lunarweekstart() 函数使用今天的日期作为唯一参数,返回当前年份的开始日期。通过从当前日期中减去该结果,表达式将返回本周迄今为止经过的天数。
然后将该值乘以利率并除以 365,以返回该期间产生的实际利率。然后将结果乘以贷款的起始余额,以返回本周迄今为止累计的利息。