inlunarweek - スクリプトおよびチャート関数
この関数は、timestamp が base_date を含む週周期の範囲内かどうかを判断します。Qlik Sense の旧暦の週は、1 月 1 日を週の初日として数えるよう定義され、1 年の最終週を除いて、各週は正確に 7 日構成となります。
構文:
InLunarWeek
(timestamp, base_date, period_no[, first_week_day])
戻り値データ型: ブール値
情報メモ
Qlik Sense では、真のブール値は -1 で表現され、偽の値は 0 で表現されます。
inlunarweek() 関数は、base_date がどの旧暦の週に当たるかを決定します。次に、base_date と同じ旧暦の週の間に各タイムスタンプ値が発生することが決定したら、ブール値を返します。
使用に適しているケース
inlunarweek() 関数はブール値の結果を返します。通常、このタイプの関数は IF 式の条件として使用されます。これにより、評価される日付が問題の旧暦の週に発生したかどうかに応じて、集計または計算を返します。
例えば、inlunarweek() 関数を使用して、特定の旧暦の週に製造されたすべての機器を識別することができます。
引数
timestamp
|
base_date と比較する日付。 |
base_date
|
週周期の評価に使用する日付。 |
period_no
|
週周期は period_no によって補正することができます。period_no は整数で、値 0 は base_date を含む週周期を示します。period_no の値が負の場合は過去の週周期を、正の場合は将来の週周期を示します。 |
first_week_day
|
0 未満または 0 よりも大きい補正値。日数または 1 日未満の長さ、またはその両方を指定して、年の開始時点を変更できます。 |
関数の例
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 Cloud ユーザー インターフェースに表示される言語とは関係ありません。Qlik Cloud は使用しているブラウザと同じ言語で表示されます。
アプリの作成者は、作成するアプリの既定の地域を設定できます。詳細については、「Qlik Cloud Analytics でアプリとスクリプトを作成するための優先地域設定の設定」を参照してください。
例 1 – 追加の引数なし
概要
データ ロード エディターを開き、以下のロード スクリプトを新しいタブに追加します。
ロード スクリプトには次が含まれています。
トランザクションが 1 月 10 日と同じ旧暦の週に発生するかどうかを決定する項目 in_lunar_week を作成します。
ロード スクリプト
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 |
in_lunar_week 項目は、inlunarweek() 関数を使用し、関数の引数として次の項目を渡すことにより、先行する LOAD ステートメントで作成されます。
旧暦の週は 1 月 1 日から始まるため、1 月 10 日は 1 月 8 日に始まり 1 月 14 日に終わる旧暦の週に当たります。そのため、それら 2 つの日付の間に発生するトランザクションはブール値 TRUE を返します。これは、結果テーブルで検証されます。
例 2 – period_no
概要
データ ロード エディターを開き、以下のロード スクリプトを新しいタブに追加します。
ロード スクリプトには次が含まれています。
ただし、この例では、トランザクションが 1 月 10 日より旧暦 2 週間後に発生するかどうかを決定する項目 2_lunar_weeks_later を作成します。
ロード スクリプト
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 |
この例では、period_no の 2 が inlunarweek() 関数のオフセット引数として使用されるため、関数がトランザクションを突き合わせる旧暦の週として 1 月 22 日で始まる週を定義しします。したがって、1 月 22 日~1 月 28 日に発生したトランザクションは、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 |
この例では、first_week_date 引数の 5 が inlunarweek() 関数で使用されているため、旧暦の週の始めが 1 月 6 日にオフセットされます。そのため 1 月 10 日は 1 月 6 日に始まり 12 日に終わる旧暦の週に当たります。これら 2 つの日付の間に発生するトランザクションは、ブール値 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 – シナリオ
概要
データ ロード エディターを開き、以下のロード スクリプトを新しいタブに追加します。
ロード スクリプトには次が含まれています。
機器のエラーにより、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 |
不具合なし |
$125.79 |
2022/02 |
不具合 |
$316.38 |
2022/03 |
不具合なし |
$455.75 |
2022/04 |
不具合なし |
$146.09 |
inlunarweek() 関数は、各製品の製造日を評価するときにブール値を返します。1 月 10 日を含む旧暦の週に製造された製品の場合、inlunarweek() 関数はブール値 TRUE を返し、製品を「不具合」としてマークします。FALSE の値を返し、その週に製造されなかった製品については、その製品に「不具合なし」のマークが付けられます。