inweektodate - スクリプトおよびチャート関数
この関数は、timestamp が base_date のミリ秒単位まで正確に base_date を含む週の範囲内にある場合、True を返します。
構文:
InWeekToDate (timestamp, base_date, period_no [, first_week_day])
戻り値データ型: ブール値
Qlik Sense では、真のブール値は -1 で表現され、偽の値は 0 で表現されます。
inweektodate() 関数は、 base_date パラメータを使用して、 FirstWeekDay システム変数 (またはユーザー定義の first_week_day パラメータ) に基づいて、週セグメントの最大境界日と、それに対応する週の開始日を識別します。この週セグメントが定義されると、指定された日付値をそのセグメントと比較する際、関数はブール値の結果を返します。
使用に適しているケース
inweektodate() 関数はブール値の結果を返します。通常、このタイプの関数は if 式の条件として使用されます。これにより、評価された日付が特定の日付を含む問題の週に発生したかどうかに応じて、集計または計算を返します。
たとえば、 inweektodate() 関数を使用して、指定された週の特定の日付までのすべての売上を計算できます。
引数 | 説明 |
---|---|
timestamp | base_date と比較する日付。 |
base_date | 週の評価に使用する日付。 |
period_no | 週は period_no によって補正することができます。period_no は整数で、値 0 は base_date を含む週を示します。period_no の値が負の場合は過去の週を、正の場合は将来の週を示します。 |
first_week_day |
既定では、週の最初の曜日は日曜日 (FirstWeekDay システム変数で決定) で、土曜日と日曜日の間の午前 0 時に始まります。 first_week_day パラメータは FirstWeekDay 変数に取って代わります。別の曜日から始まる週を指定するには、0~6 でフラグを指定します。 月曜日で始まり日曜日で終わる週の場合、月曜日は 0、火曜日は 1、水曜日は 2、木曜日は 3、金曜日は 4、土曜日は 5、日曜日は 6 のフラグを使用します。
|
例 | 相互作用 |
---|---|
inweektodate('01/12/2006', '01/12/2006', 0) | TRUE を返します。 |
inweektodate('01/12/2006', '01/11/2006', 0) | FALSE を返します。 |
inweektodate('01/12/2006', '01/18/2006', -1) |
FALSE を返します。 period_noに -1 が指定されているため、timestampと比較する日付は 01/11/2006 になります。 |
inweektodate('01/11/2006', '01/12/2006', 0, 3 ) | FALSE を返します。first_week_day に 3 (木曜日) が指定されているので、01/12/2006 は 01/12/2006 を含む週の次の週の初日になります。 |
この関数を使用する際に便利なトピックには次のようなものがあります。
トピック | 既定 フラグ / 値 | 説明 |
---|---|---|
FirstWeekDay | 6 / 日曜日 | 各週の開始日を定義します。 |
地域の設定
特に指定のない限り、このトピックの例では次の日付書式を使用しています: MM/DD/YYYY。日付書式は、データ ロード スクリプトの SET DateFormat ステートメントで指定されています。既定の日付書式は、地域の設定やその他の要因により、システムによって異なる場合があります。以下の例の書式は、要件に合わせて変更できます。または、これらの例に一致するようにロード スクリプトの書式を変更できます。
App の既定の地域設定は、Qlik Sense がインストールされているコンピューターまたはサーバーの地域システム設定に基づいています。アクセスしている Qlik Sense サーバーがスウェーデンに設定されてい場合、データ ロード エディターは、日付、時間、および通貨にスウェーデンの地域設定を使用します。これらの地域の書式設定は、Qlik Sense ユーザー インターフェースに表示される言語とは関係ありません。Qlik Sense は使用しているブラウザと同じ言語で表示されます。
例 1 – 追加の引数なし
概要
データ ロード エディターを開き、以下のロード スクリプトを新しいタブに追加します。
ロード スクリプトには次が含まれています。
-
Transactions というテーブルにロードされる、2022 年 1 月の一連のトランザクションを含むデータセット。
-
TimestampFormat='M/D/YYYY h:mm:ss[.fff]' 形式で提供されるデータ項目。
-
2022 年 1 月 14 日までの週に発生したトランザクションを決定する項目 [in_week_to_date] の作成。
-
weekday() 関数を使用した、weekday という名前の追加項目の作成。この新しい項目は、各日付に対応する曜日を示すために作成されます。
ロード スクリプト
SET TimestampFormat='M/D/YYYY h:mm:ss[.fff]';
SET FirstWeekDay=6;
Transactions:
Load
*,
weekday(date) as week_day,
inweektodate(date,'01/14/2022', 0) as in_week_to_date
;
Load
*
Inline
[
id,date,amount
8188,'2022-01-02 12:22:06',37.23
8189,'2022-01-05 01:02:30',17.17
8190,'2022-01-06 15:36:20',88.27
8191,'2022-01-08 10:58:35',57.42
8192,'2022-01-09 08:53:32',53.80
8193,'2022-01-10 21:13:01',82.06
8194,'2022-01-11 00:57:13',40.39
8195,'2022-01-12 09:26:02',87.21
8196,'2022-01-13 15:05:09',95.93
8197,'2022-01-14 18:44:57',45.89
8198,'2022-01-15 06:10:46',36.23
8199,'2022-01-16 06:39:27',25.66
8200,'2022-01-17 10:44:16',82.77
8201,'2022-01-18 18:48:17',69.98
8202,'2022-01-26 04:36:03',76.11
8203,'2022-01-27 08:07:49',25.12
8204,'2022-01-28 12:24:29',46.23
8205,'2022-01-30 11:56:56',84.21
8206,'2022-01-30 14:40:19',96.24
8207,'2022-01-31 05:28:21',67.67
];
結果
データをロードしてシートを開きます。新しいテーブルを作成し、これらの項目を軸として追加します:
-
date
-
week_day
-
in_week_to_date
日付 | week_day | in_week_to_date |
---|---|---|
2022-01-02 12:22:06 | 日 | 0 |
2022-01-05 01:02:30 | 水 | 0 |
2022-01-06 15:36:20 | Thu | 0 |
2022-01-08 10:58:35 | Sat | 0 |
2022-01-09 08:53:32 | 日 | -1 |
2022-01-10 21:13:01 | 月 | -1 |
2022-01-11 00:57:13 | 火 | -1 |
2022-01-12 09:26:02 | 水 | -1 |
2022-01-13 15:05:09 |
Thu |
-1 |
2022-01-14 18:44:57 | Fri | -1 |
2022-01-15 06:10:46 | Sat | 0 |
2022-01-16 06:39:27 | 日 | 0 |
2022-01-17 10:44:16 | 月 | 0 |
2022-01-18 18:48:17 | 火 | 0 |
2022-01-26 04:36:03 | 水 | 0 |
2022-01-27 08:07:49 | Thu | 0 |
2022-01-28 12:24:29 | Fri | 0 |
2022-01-30 11:56:56 | 日 | 0 |
2022-01-30 14:40:19 | 日 | 0 |
2022-01-31 05:28:21 | 月 | 0 |
[in_week_to_date] 項目は、inweektodate() 関数を使用して、前の Load ステートメントで作成されます。提供される最初の引数は、評価される項目を識別します。2 番目の引数は、1月 14 日のハードコードされた日付です。これは base_date で、セグメント化する週を識別し、そのセグメントの終了境界を定義します。period_no の 0 は最後の引数です。これは、関数がセグメント化された週の前後の週を比較していないことを意味します。
FirstWeekDay システム変数は、週が日曜日に始まり、土曜日に終わることを決定します。したがって、1 月は下図のように週に分割され、1 月 9 日~14 日の日付が inweekdodate() 計算の有効期間となります。
1 月 9 日~14 日に発生したトランザクションは、TRUE のブール値の結果を返します。日付の前後のトランザクションはブール値の結果 FALSE を返します。
例 2 – period_no
概要
データ ロード エディターを開き、以下のロード スクリプトを新しいタブに追加します。
ロード スクリプトには次が含まれています。
-
最初の例と同じデータセットとシナリオ。
-
2022 年 1 月 14 日に終了する週セグメント前の週全体で発生したトランザクションを決定する項目 [prev_week_to_date] の作成。
-
weekday() 関数を使用した、weekday という名前の追加項目の作成。これは、各日付に対応する曜日を示すためものです。
ロード スクリプト
SET FirstWeekDay=6;
SET TimestampFormat='M/D/YYYY h:mm:ss[.fff]';
Transactions:
Load
*,
weekday(date) as week_day,
inweektodate(date,'01/14/2022', -1) as prev_week_to_date
;
Load
*
Inline
[
id,date,amount
8188,'2022-01-02 12:22:06',37.23
8189,'2022-01-05 01:02:30',17.17
8190,'2022-01-06 15:36:20',88.27
8191,'2022-01-08 10:58:35',57.42
8192,'2022-01-09 08:53:32',53.80
8193,'2022-01-10 21:13:01',82.06
8194,'2022-01-11 00:57:13',40.39
8195,'2022-01-12 09:26:02',87.21
8196,'2022-01-13 15:05:09',95.93
8197,'2022-01-14 18:44:57',45.89
8198,'2022-01-15 06:10:46',36.23
8199,'2022-01-16 06:39:27',25.66
8200,'2022-01-17 10:44:16',82.77
8201,'2022-01-18 18:48:17',69.98
8202,'2022-01-26 04:36:03',76.11
8203,'2022-01-27 08:07:49',25.12
8204,'2022-01-28 12:24:29',46.23
8205,'2022-01-30 11:56:56',84.21
8206,'2022-01-30 14:40:19',96.24
8207,'2022-01-31 05:28:21',67.67
];
結果
データをロードしてシートを開きます。新しいテーブルを作成し、これらの項目を軸として追加します:
-
date
-
week_day
-
prev_week_to_date
日付 | week_day | prev_week_to_date |
---|---|---|
2022-01-02 12:22:06 | 日 | -1 |
2022-01-05 01:02:30 | 水 | -1 |
2022-01-06 15:36:20 | Thu | -1 |
2022-01-08 10:58:35 | Sat | 0 |
2022-01-09 08:53:32 | 日 | 0 |
2022-01-10 21:13:01 | 月 | 0 |
2022-01-11 00:57:13 | 火 | 0 |
2022-01-12 09:26:02 | 水 | 0 |
2022-01-13 15:05:09 |
Thu |
0 |
2022-01-14 18:44:57 | Fri | 0 |
2022-01-15 06:10:46 | Sat | 0 |
2022-01-16 06:39:27 | 日 | 0 |
2022-01-17 10:44:16 | 月 | 0 |
2022-01-18 18:48:17 | 火 | 0 |
2022-01-26 04:36:03 | 水 | 0 |
2022-01-27 08:07:49 | Thu | 0 |
2022-01-28 12:24:29 | Fri | 0 |
2022-01-30 11:56:56 | 日 | 0 |
2022-01-30 14:40:19 | 日 | 0 |
2022-01-31 05:28:21 | 月 | 0 |
period_no 値 -1 は、inweektodate () 関数が入力週セグメントを前の週と比較することを示します。週セグメントは、最初は 1 月 9 日~1 月 14 日に相当します。period_no は、このセグメントの開始境界と終了境界の両方を 1 週間前にオフセットし、日付境界を 1 月 2 日~1 月 7 日にします。
したがって、1 月 2 日~8 日 (1 月 8 日自体は含まれない) に発生したトランザクションは、TRUEのブール値の結果を返します。
例 3 – first_week_day
概要
データ ロード エディターを開き、以下のロード スクリプトを新しいタブに追加します。
ロード スクリプトには次が含まれています。
-
最初の例と同じデータセットとシナリオ。
-
2022 年 1 月 14 日までの週に発生したトランザクションを決定する項目 [in_week_to_date] の作成。
-
weekday() 関数を使用した、weekday という名前の追加項目の作成。これは、各日付に対応する曜日を示すためものです。
この例では、週の初日として月曜日を使用しています。
ロード スクリプト
SET FirstWeekDay=6;
SET TimestampFormat='M/D/YYYY h:mm:ss[.fff]';
Transactions:
Load
*,
weekday(date) as week_day,
inweektodate(date,'01/14/2022', 0, 0) as in_week_to_date
;
Load
*
Inline
[
id,date,amount
8188,'2022-01-02 12:22:06',37.23
8189,'2022-01-05 01:02:30',17.17
8190,'2022-01-06 15:36:20',88.27
8191,'2022-01-08 10:58:35',57.42
8192,'2022-01-09 08:53:32',53.80
8193,'2022-01-10 21:13:01',82.06
8194,'2022-01-11 00:57:13',40.39
8195,'2022-01-12 09:26:02',87.21
8196,'2022-01-13 15:05:09',95.93
8197,'2022-01-14 18:44:57',45.89
8198,'2022-01-15 06:10:46',36.23
8199,'2022-01-16 06:39:27',25.66
8200,'2022-01-17 10:44:16',82.77
8201,'2022-01-18 18:48:17',69.98
8202,'2022-01-26 04:36:03',76.11
8203,'2022-01-27 08:07:49',25.12
8204,'2022-01-28 12:24:29',46.23
8205,'2022-01-30 11:56:56',84.21
8206,'2022-01-30 14:40:19',96.24
8207,'2022-01-31 05:28:21',67.67
];
結果
データをロードしてシートを開きます。新しいテーブルを作成し、これらの項目を軸として追加します:
-
date
-
week_day
-
in_week_to_date
日付 | week_day | in_week_to_date |
---|---|---|
2022-01-02 12:22:06 | 日 | 0 |
2022-01-05 01:02:30 | 水 | 0 |
2022-01-06 15:36:20 | Thu | 0 |
2022-01-08 10:58:35 | Sat | 0 |
2022-01-09 08:53:32 | 日 | 0 |
2022-01-10 21:13:01 | 月 | -1 |
2022-01-11 00:57:13 | 火 | -1 |
2022-01-12 09:26:02 | 水 | -1 |
2022-01-13 15:05:09 |
Thu |
-1 |
2022-01-14 18:44:57 | Fri | -1 |
2022-01-15 06:10:46 | Sat | 0 |
2022-01-16 06:39:27 | 日 | 0 |
2022-01-17 10:44:16 | 月 | 0 |
2022-01-18 18:48:17 | 火 | 0 |
2022-01-26 04:36:03 | 水 | 0 |
2022-01-27 08:07:49 | Thu | 0 |
2022-01-28 12:24:29 | Fri | 0 |
2022-01-30 11:56:56 | 日 | 0 |
2022-01-30 14:40:19 | 日 | 0 |
2022-01-31 05:28:21 | 月 | 0 |
inweektodate() 関数の first_week_day 引数として 0 を使用することにより、関数引数が FirstWeekDay システム変数に取って代わり、月曜日を週の初日に設定します。
したがって、1 月 10 日~14 日に発生したトランザクションは TRUE のブール値の結果を返しますが、これらの境界外の日付のトランザクションは FALSE の値を返します。
例 4 – チャート オブジェクトの例
概要
データ ロード エディタを開き、以下のロード スクリプトを新しいタブに追加します。
ロード スクリプトには、最初の例と同じデータセットとシナリオが含まれます。ただし、この例では、変更されていないデータセットがアプリケーションにロードされます。1 月 14 日までの週に四半期に発生したトランザクションを決定する計算は、チャート オブジェクトのメジャーとして作成されます。
ロード スクリプト
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*
Inline
[
id,date,amount
8188,'2022-01-02 12:22:06',37.23
8189,'2022-01-05 01:02:30',17.17
8190,'2022-01-06 15:36:20',88.27
8191,'2022-01-08 10:58:35',57.42
8192,'2022-01-09 08:53:32',53.80
8193,'2022-01-10 21:13:01',82.06
8194,'2022-01-11 00:57:13',40.39
8195,'2022-01-12 09:26:02',87.21
8196,'2022-01-13 15:05:09',95.93
8197,'2022-01-14 18:44:57',45.89
8198,'2022-01-15 06:10:46',36.23
8199,'2022-01-16 06:39:27',25.66
8200,'2022-01-17 10:44:16',82.77
8201,'2022-01-18 18:48:17',69.98
8202,'2022-01-26 04:36:03',76.11
8203,'2022-01-27 08:07:49',25.12
8204,'2022-01-28 12:24:29',46.23
8205,'2022-01-30 11:56:56',84.21
8206,'2022-01-30 14:40:19',96.24
8207,'2022-01-31 05:28:21',67.67
];
結果
次の手順を実行します。
-
データをロードしてシートを開きます。新しいテーブルを作成し、この項目を軸として追加します: date。
-
1 月 14 日までの同週にトランザクションが発生したかどうかを計算するには、次のメジャーを作成します。
=inweektodate(date,'01/14/2022',0)
-
どの曜日がどの日付に対応するかを表示するには、追加のメジャーを作成します。
=weekday(date)
日付 | week_day | in_week_to_date |
---|---|---|
2022-01-02 12:22:06 | 日 | 0 |
2022-01-05 01:02:30 | 水 | 0 |
2022-01-06 15:36:20 | Thu | 0 |
2022-01-08 10:58:35 | Sat | 0 |
2022-01-09 08:53:32 | 日 | -1 |
2022-01-10 21:13:01 | 月 | -1 |
2022-01-11 00:57:13 | 火 | -1 |
2022-01-12 09:26:02 | 水 | -1 |
2022-01-13 15:05:09 |
Thu |
-1 |
2022-01-14 18:44:57 | Fri | -1 |
2022-01-15 06:10:46 | Sat | 0 |
2022-01-16 06:39:27 | 日 | 0 |
2022-01-17 10:44:16 | 月 | 0 |
2022-01-18 18:48:17 | 火 | 0 |
2022-01-26 04:36:03 | 水 | 0 |
2022-01-27 08:07:49 | Thu | 0 |
2022-01-28 12:24:29 | Fri | 0 |
2022-01-30 11:56:56 | 日 | 0 |
2022-01-30 14:40:19 | 日 | 0 |
2022-01-31 05:28:21 | 月 | 0 |
[in_week_to_date] 項目は、 inweektodate() 関数を使用してチャート オブジェクトに作成されます。提供される最初の引数は、評価される項目を識別します。2 番目の引数は、1月 14 日のハードコード化された日付です。これは base_date で、セグメント化する週を識別し、そのセグメントの終了境界を定義します。period_no の 0 は最後の引数です。これは、関数がセグメント化された週の前後の週を比較していないことを意味します。
システム変数は、週が日曜日に始まり、土曜日に終わることを決定します。FirstWeekDay したがって、1 月は下図のように週に分割され、1 月 9 日~14 日の日付が inweekdodate() 計算の有効期間となります。
1 月 9 日~14 日に発生したトランザクションは、TRUE のブール値の結果を返します。日付の前後のトランザクションはブール値の結果 FALSE を返します。
例 5 – シナリオ
概要
データ ロード エディターを開き、以下のロード スクリプトを新しいタブに追加します。
ロード スクリプトには次が含まれています。
-
「Products」というテーブルにロードされるデータセット。
-
製品 ID、製造年月日、原価に関する情報。
機器のエラーにより、1 月 12 日の週に製造された製品に欠陥があることが確認されています。この問題は 1 月 13 日に解決されました。エンド ユーザーは、製造された製品のステータスが「不具合」または「不具合なし」であったこと、およびその週に製造された製品のコストを週別に表示するチャート オブジェクトを希望しています。
ロード スクリプト
Products:
Load
*
Inline
[
product_id,manufacture_date,cost_price
8188,'2022-01-02 12:22:06',37.23
8189,'2022-01-05 01:02:30',17.17
8190,'2022-01-06 15:36:20',88.27
8191,'2022-01-08 10:58:35',57.42
8192,'2022-01-09 08:53:32',53.80
8193,'2022-01-10 21:13:01',82.06
8194,'2022-01-11 00:57:13',40.39
8195,'2022-01-12 09:26:02',87.21
8196,'2022-01-13 15:05:09',95.93
8197,'2022-01-14 18:44:57',45.89
8198,'2022-01-15 06:10:46',36.23
8199,'2022-01-16 06:39:27',25.66
8200,'2022-01-17 10:44:16',82.77
8201,'2022-01-18 18:48:17',69.98
8202,'2022-01-26 04:36:03',76.11
8203,'2022-01-27 08:07:49',25.12
8204,'2022-01-28 12:24:29',46.23
8205,'2022-01-30 11:56:56',84.21
8206,'2022-01-30 14:40:19',96.24
8207,'2022-01-31 05:28:21',67.67
];
結果
次の手順を実行します。
-
データをロードしてシートを開きます。新しいテーブルを作成します。週名を表示する軸を作成します。
=weekname(manufacture_date)
-
次に、不具合のある製品とない製品を特定する軸を作成します。
=if(inWeektodate(manufacture_date,makedate(2022,01,12),0),'Defective','Faultless')
-
製品の cost_price を合計するメジャーを作成します。
=sum(cost_price)
-
メジャーの [数値書式] を [通貨] に設定します。
weekname(manufacture_date) | if(inweektodate(manufacture_date,makedate(2022,01,12),0),'Defective','Faultless') | Sum(cost_price) |
---|---|---|
2022/02 | 不具合なし | $200.09 |
2022/03 | 不具合 | $263.46 |
2022/03 | 不具合なし | $178.05 |
2022/04 | 不具合なし | $178.41 |
2022/05 | 不具合なし | $147.46 |
2022/06 | 不具合なし | $248.12 |
inweektodate() 関数は、各製品の製造日を評価するときにブール値を返します。TRUE のブール値を返すものについては、製品を 'Defective'とマークします。FALSE の値を返し、1 月 12 日までの週に製造されていない製品については、製品を ‘Faultless’ とマークします。