inlunarweek - 脚本和图表函数在该页面上
此函数用于判断 timestamp 是否位于包含 base_date 的阴历周以内。Qlik Sense 中的农历周定义为将 1 月 1 日计算为一周的第一天。除了一年中的最后一周外,每周都会有七天。
语法:
InLunarWeek
( timestamp, base_date, period_no[, first_week_day] )
返回数据类型: 布尔值
信息注释
在 Qlik Sense 中,布尔 true 值由 -1 表示,false 值由 0 表示。
inlunarweek() 函数决定 base_date 属于哪个农历周。一旦确定每个时间戳值是否与 base_date 发生在同一个农历周内,它就会返回布尔值结果。
inlunarweek() 函数的图表
适用场景
inlunarweek() 函数返回布尔值结果。通常,这种类型的函数将用作 IF 表达式中的条件。这将返回聚合或计算结果,具体取决于评估的日期是否发生在所讨论的农历周。
例如,inlunarweek() 函数可用于识别特定农历周内制造的所有设备。
参数
timestamp
想要用来与 base_date 进行比较的日期。
base_date
日期用于计算阴历周的值。
period_no
阴历周可通过 period_no 偏移。period_no 为整数,其中值 0 表示该阴历周包含 base_date 。period_no 为负数表示前几个阴历星期,为正数表示随后的几个阴历星期。
first_week_day
偏移可以大小或小于零。这可以按指定的天数和/或某日内时间的小数对更改一年的开始。
函数示例
inlunarweek('01/12/2013', '01/14/2013',
0)
由于 timestamp 、01/12/2013 的值, 属于 01/08/2013 至 01/14/2013 的周之内,返回 TRUE 。
inlunarweek('01/12/2013', '01/07/2013',
0)
由于 base_date 01/07/2013 处于定义为 01/01/2013 至 01/07/2013 的农历周,返回 FALSE 。
inlunarweek('01/12/2013', '01/14/2013',
-1)
返回 FALSE 。将 period_no 的值指定为 -1,表示将周移动到前一周,即 01/01/2013 到 01/07/2013 。
inlunarweek('01/07/2013', 01/14/2013',
-1)
返回 TRUE 。与前面的示例相比,timestamp 是在考虑到向后移动后的后续周内。
inlunarweek('01/11/2006', '01/08/2006',
0, 3)
返回 FALSE 。为 first_week_day 指定值 3 表示从 01/04/2013 开始计算年初。因此,base _date 的值在第一周下降,而 timestamp 的值在周 01/11/2013 内下降到 01/17/2013 。
inlunarweek() 函数通常与以下功能结合使用:
区域设置
除非另有规定,本主题中的示例使用以下日期格式:MM/DD/YYYY。日期格式已经在数据加载脚本中的 SET DateFormat 语句中指定。由于区域设置和其他因素,系统中的默认日期格式可能有所不同。您可以更改以下示例中的格式以满足您的要求。或者,您可以更改加载脚本中的格式以匹配这些示例。
应用程序中的默认区域设置基于安装 Qlik Sense 的计算机或服务器的区域系统设置。如果您访问的 Qlik Sense 服务器设置为瑞典,则数据加载编辑器将使用瑞典地区设置的日期、时间和货币。这些区域格式设置与 Qlik Sense 用户界面中显示的语言无关。Qlik Sense 将以与您使用的浏览器相同的语言显示。
示例 1 – 没有其他参数
加载脚本和结果
概述
打开数据加载编辑器,并将下面的加载脚本添加到新选项卡。
加载脚本包含:
创建一个字段 in_lunar_week ,确定交易是否发生在 1 月 10 日的同一个农历周。
加载脚本
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
inlunarweek(date,'01/10/2022', 0) as in_lunar_week
;
Load
*
Inline
[
id,date,amount
8183,'1/5/2022',42.32
8184,'1/6/2022',68.22
8185,'1/7/2022',15.25
8186,'1/8/2022',25.26
8187,'1/9/2022',37.23
8188,'1/10/2022',37.23
8189,'1/11/2022',17.17
8190,'1/12/2022',88.27
8191,'1/13/2022',57.42
8192,'1/14/2022',53.80
8193,'1/15/2022',82.06
8194,'1/16/2022',87.21
8195,'1/17/2022',95.93
8196,'1/18/2022',45.89
8197,'1/19/2022',36.23
8198,'1/20/2022',25.66
8199,'1/21/2022',82.77
8200,'1/22/2022',69.98
8201,'1/23/2022',76.11
];
结果
加载数据并打开工作表。创建新表并将这些字段添加为维度:
结果表
1/5/2022
0
1/6/2022
0
1/7/2022
0
1/8/2022
-1
1/9/2022
-1
1/10/2022
-1
1/11/2022
-1
1/12/2022
-1
1/13/2022
-1
1/14/2022
-1
1/15/2022
0
1/16/2022
0
1/17/2022
0
1/18/2022
0
1/19/2022
0
1/20/2022
0
1/21/2022
0
1/22/2022
0
1/23/2022
0
inlunarweek() 函数,基本示例
in_lunar_week 字段是在前面的 LOAD 语句中创建的,方法是使用 inlunarweek() 函数,然后将以下内容作为函数的参数传递:
因为农历周从 1 月 1 日开始,所以 1 月 10 日会在 1 月 8日开始、1 月 14 日结束的农历周中。因此,在 1 月份这两个日期之间发生的任何交易都将返回布尔值 TRUE 。这在结果表中得到验证。
示例 2 – period_no
和结果:
概述
打开数据加载编辑器,并将下面的加载脚本添加到新选项卡。
加载脚本包含:
然而,在本例中,任务是创建一个字段 2_lunar_weeks_later ,用于确定交易是否发生在 1 月 10 日之后的两个农历周。
加载脚本
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
inlunarweek(date,'01/10/2022', 2) as [2_lunar_weeks_later]
;
Load
*
Inline
[
id,date,amount
8183,'1/5/2022',42.32
8184,'1/6/2022',68.22
8185,'1/7/2022',15.25
8186,'1/8/2022',25.26
8187,'1/9/2022',37.23
8188,'1/10/2022',37.23
8189,'1/11/2022',17.17
8190,'1/12/2022',88.27
8191,'1/13/2022',57.42
8192,'1/14/2022',53.80
8193,'1/15/2022',82.06
8194,'1/16/2022',87.21
8195,'1/17/2022',95.93
8196,'1/18/2022',45.89
8197,'1/19/2022',36.23
8198,'1/20/2022',25.66
8199,'1/21/2022',82.77
8200,'1/22/2022',69.98
8201,'1/23/2022',76.11
];
结果
加载数据并打开工作表。创建新表并将这些字段添加为维度:
结果表
1/5/2022
0
1/6/2022
0
1/7/2022
0
1/8/2022
0
1/9/2022
0
1/10/2022
0
1/11/2022
0
1/12/2022
0
1/13/2022
0
1/14/2022
0
1/15/2022
0
1/16/2022
0
1/17/2022
0
1/18/2022
0
1/19/2022
0
1/20/2022
0
1/21/2022
0
1/22/2022
-1
1/23/2022
-1
inlunarweek() 函数,period_no 示例
在本例中,由于 inlunarweek() 函数中使用了 2 的 period_no 作为偏移参数,因此该函数将从1月22日开始的一周定义为用于验证事务的农历周。因此,2020 年 1 月 1 日至 7 月 26 日之间发生的任何交易都将返回布尔值结果 TRUE 。
示例 3 – first_week_day
加载脚本和结果
概述
打开数据加载编辑器,并将下面的加载脚本添加到新选项卡。
加载脚本使用与第一个示例相同的数据集和场景。然而,在这个例子中,我们将农历周设置为 1 月 6 日开始。
加载脚本
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
inlunarweek(date,'01/10/2022', 0,5) as in_lunar_week
;
Load
*
Inline
[
id,date,amount
8183,'1/5/2022',42.32
8184,'1/6/2022',68.22
8185,'1/7/2022',15.25
8186,'1/8/2022',25.26
8187,'1/9/2022',37.23
8188,'1/10/2022',37.23
8189,'1/11/2022',17.17
8190,'1/12/2022',88.27
8191,'1/13/2022',57.42
8192,'1/14/2022',53.80
8193,'1/15/2022',82.06
8194,'1/16/2022',87.21
8195,'1/17/2022',95.93
8196,'1/18/2022',45.89
8197,'1/19/2022',36.23
8198,'1/20/2022',25.66
8199,'1/21/2022',82.77
8200,'1/22/2022',69.98
8201,'1/23/2022',76.11
];
结果
加载数据并打开工作表。创建新表并将这些字段添加为维度:
结果表
1/5/2022
0
1/6/2022
-1
1/7/2022
-1
1/8/2022
-1
1/9/2022
-1
1/10/2022
-1
1/11/2022
-1
1/12/2022
-1
1/13/2022
0
1/14/2022
0
1/15/2022
0
1/16/2022
0
1/17/2022
0
1/18/2022
0
1/19/2022
0
1/20/2022
0
1/21/2022
0
1/22/2022
0
1/23/2022
0
inlunarweek() 函数,first_week_day 示例
在本例中,由于 inlunarweek() 函数中使用了 first_week_date 参数,因此它将农历周的开始日期偏移到 1 月 6 日。因此,1 月 10 日属于从 1 月6 日开始到 1 月 12 日结束的农历周。这两个日期之间的任何事务都将返回布尔值 TRUE 。
示例 4 – 图表对象
加载脚本和图表表达式:
概述
打开数据加载编辑器,并将下面的加载脚本添加到新选项卡。
加载脚本包含:
然而,在本例中,未更改的数据集被加载到应用程序中。确定交易是否与 1 月 10 日发生在同一个农历周的计算被创建为应用程序图表对象中的度量。
加载脚本
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*
Inline
[
id,date,amount
8183,'1/5/2022',42.32
8184,'1/6/2022',68.22
8185,'1/7/2022',15.25
8186,'1/8/2022',25.26
8187,'1/9/2022',37.23
8188,'1/10/2022',37.23
8189,'1/11/2022',17.17
8190,'1/12/2022',88.27
8191,'1/13/2022',57.42
8192,'1/14/2022',53.80
8193,'1/15/2022',82.06
8194,'1/16/2022',87.21
8195,'1/17/2022',95.93
8196,'1/18/2022',45.89
8197,'1/19/2022',36.23
8198,'1/20/2022',25.66
8199,'1/21/2022',82.77
8200,'1/22/2022',69.98
8201,'1/23/2022',76.11
];
结果
加载数据并打开工作表。创建新表并将该字段添加为维度: date 。
要计算交易是否发生在包含 1 月 10 日的农历周,请创建以下度量:
= inlunarweek(date,'01/10/2022', 0)
结果表 1/5/2022 0 1/6/2022 0 1/7/2022 0 1/8/2022 -1 1/9/2022 -1 1/10/2022 -1 1/11/2022 -1 1/12/2022 -1 1/13/2022 -1 1/14/2022 -1 1/15/2022 0 1/16/2022 0 1/17/2022 0 1/18/2022 0 1/19/2022 0 1/20/2022 0 1/21/2022 0 1/22/2022 0 1/23/2022 0
示例 5 – 场景
加载脚本和图表表达式:
概述
打开数据加载编辑器,并将下面的加载脚本添加到新选项卡。
加载脚本包含:
加载到名为 Products 的表中的数据集。
包含产品 ID、制造日期和成本价格的信息。
现已查明,由于设备错误,包括 1 月 12 日在内的农历周制造的产品存在缺陷。最终用户希望使用一个图表对象,通过农历周名称显示所生产产品的“缺陷”或“无缺陷”状态以及当月生产的产品的成本。
加载脚本
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*
Inline
[
product_id,manufacture_date,cost_price
8183,'1/5/2022',42.32
8184,'1/6/2022',68.22
8185,'1/7/2022',15.25
8186,'1/8/2022',25.26
8187,'1/9/2022',37.23
8188,'1/10/2022',37.23
8189,'1/11/2022',17.17
8190,'1/12/2022',88.27
8191,'1/13/2022',57.42
8192,'1/14/2022',53.80
8193,'1/15/2022',82.06
8194,'1/16/2022',87.21
8195,'1/17/2022',95.93
8196,'1/18/2022',45.89
8197,'1/19/2022',36.23
8198,'1/20/2022',25.66
8199,'1/21/2022',82.77
8200,'1/22/2022',69.98
8201,'1/23/2022',76.11
];
结果
执行以下操作:
加载数据并打开工作表。新建表格。
创建维度以显示月名称:
=lunarweekname(manufacture_date)
使用 inlunarweek() 函数创建一个度量,以识别哪些产品有缺陷,哪些无缺陷:
=if(only(inlunarweek(manufacture_date,makedate(2022,01,12),0)), 'Defective','Faultless')
创建一个度量来求对产品的 cost_price 求和:
=sum(cost_price)
将度量的数字格式 设置为金额 。
在外观 下,关闭总计 。
结果表 2022/01 Faultless $125.79 2022/02 Defective $316.38 2022/03 Faultless $455.75 2022/04 Faultless $146.09
inlunarweek() 函数在评估每个产品的制造日期时返回布尔值。对于在农历周生产的包含 1 月 10 日的任何产品,inlunarweek() 函数返回布尔值 TRUE ,并将产品标记为“缺陷”。对于任何返回 FALSE 值的产品,由于不是在该周制造的,它将产品标记为 ‘Faultless’。