inday - スクリプトおよびチャート関数
この関数は、base_timestamp を含む日に timestamp が含まれている場合、True を返します。
構文:
InDay (timestamp, base_timestamp, period_no[, day_start])
inday() 関数は、base_timestamp 引数を使用して、タイムスタンプが該当する日を識別します。1 日の開始時刻は、既定では深夜です。 ただし、inday() 関数の day_start 引数を使用して、1 日の開始時刻を変更できます。この日が定義されると、関数は指定されたタイムスタンプ値をその日と比較するときにブール値の結果を返します。
使用に適しているケース
inday() 関数はブール値の結果を返します。通常、このタイプの関数は if expression の条件として使用されます。これは、評価された日付が問題のタイムスタンプの日に発生したかどうかに応じて、集計または計算を返します。
例えば、inday() 関数を使用して、特定の日に製造されたすべての機器を識別することができます。
戻り値データ型: ブール値
Qlik Sense では、真のブール値は -1 で表現され、偽の値は 0 で表現されます。
引数
timestamp
|
base_timestamp と比較したい日付と時刻。 |
base_timestamp
|
タイムスタンプの評価に使用する日付と時刻。 |
period_no
|
日は period_no によって補正することができます。period_no は整数で、値 0 は base_timestamp を含む日を示します。period_no の値が負の場合は過去の日を、正の場合は将来の日を示します。 |
day_start
|
1 日の開始時刻を深夜 0 時以外に設定する場合は、day_start を使用して 1 日未満の長さを補正値として指定します。例えば、0.125 は午前 3 時を意味します。 |
地域の設定
特に指定のない限り、このトピックの例では次の日付書式を使用しています: MM/DD/YYYY。日付書式は、データ ロード スクリプトの SET DateFormat ステートメントで指定されています。既定の日付書式は、地域の設定やその他の要因により、システムによって異なる場合があります。以下の例の書式は、要件に合わせて変更できます。または、これらの例に一致するようにロード スクリプトの書式を変更できます。詳しくは「アプリとスクリプトの地域設定の変更」を参照してください。
アプリの既定地域設定は、ユーザー プロファイルに基づいています。これらの地域の書式設定は、Qlik Cloud ユーザー インターフェースに表示される言語とは関係ありません。Qlik Cloud は使用しているブラウザと同じ言語で表示されます。
アプリの作成者は、作成するアプリの既定の地域を設定できます。詳細については、「Qlik Cloud Analytics でアプリとスクリプトを作成するための優先地域設定の設定」を参照してください。
関数の例
例 |
結果 |
inday ('01/12/2006 12:23:00 PM', '01/12/2006 12:00:00 AM', 0) |
True を返す |
inday ('01/12/2006 12:23:00 PM', '01/13/2006 12:00:00 AM', 0) |
False を返す |
inday ('01/12/2006 12:23:00 PM', '01/12/2006 12:00:00 AM', -1) |
False を返す |
inday ('01/11/2006 12:23:00 PM', '01/12/2006 12:00:00 AM', -1) |
True を返す |
inday ('01/12/2006 12:23:00 PM', '01/12/2006 12:00:00 AM', 0, 0.5) |
False を返す |
inday ('01/12/2006 11:23:00 AM', '01/12/2006 12:00:00 AM', 0, 0.5) |
True を返す |
例 1 – Load ステートメント (スクリプト)
概要
データ ロード エディターを開き、以下のロード スクリプトを新しいタブに追加します。
ロード スクリプトには次が含まれています。
-
Transactions というテーブルにロードされるタイムスタンプによるトランザクションを含むデータセット。
-
TimeStamp システム変数 (M/D/YYYY h:mm:ss[.fff] TT) 形式で提供される日付項目。
-
in_day 項目として設定されている inday() 関数を含む先行する LOAD。
ロード スクリプト
SET TimestampFormat='M/D/YYYY h:mm:ss[.fff] TT';
Transactions:
Load
*,
inday(date,'01/05/2022 12:00:00 AM', 0) as in_day
;
Load
*
Inline
[
id,date,amount
9497,'01/01/2022 7:34:46 PM',13.24
9498,'01/01/2022 10:10:22 PM',31.43
9499,'01/02/2022 8:35:54 AM',36.34
9500,'01/03/2022 2:21:53 PM',51.75
9501,'01/04/2022 6:49:38 PM',15.35
9502,'01/04/2022 10:58:34 PM',74.34
9503,'01/05/2022 5:40:49 AM',73.53
9504,'01/05/2022 11:29:38 AM',50.00
9505,'01/05/2022 7:04:57 PM',47.25
9506,'01/06/2022 8:49:09 AM',74.23
];
結果
データをロードしてシートを開きます。新しいテーブルを作成し、これらの項目を軸として追加します。
結果テーブル
日付 |
in_day |
01/01/2022 7:34:46 PM |
0 |
01/01/2022 10:10:22 PM |
0 |
01/02/2022 8:35:54 AM |
0 |
01/03/2022 2:21:53 PM |
0 |
01/04/2022 6:49:38 PM |
0 |
01/04/2022 10:58:34 PM |
0 |
01/05/2022 5:40:49 AM |
-1 |
01/05/2022 11:29:38 AM |
-1 |
01/05/2022 7:04:57 PM |
-1 |
01/06/2022 8:49:09 AM |
0 |
項目は、 関数を使用し、日付項目、1 月 5 日のハードコードされたタイムスタンプ、関数の引数として 0 の を渡すことにより、前の load ステートメントで作成されます。in_dayinday()period_no0
例 2 – period_no
概要
ロード スクリプトは、最初の例で使用されたものと同じデータセットとシナリオを使用します。
ただし、この例では、トランザクションの日付が 1 月 5 日の 2 日前に発生したかどうかを計算することがタスクです。
ロード スクリプト
SET TimestampFormat='M/D/YYYY h:mm:ss[.fff] TT';
Transactions:
Load
*,
inday(date,'01/05/2022 12:00:00 AM', -2) as in_day
;
Load
*
Inline
[
id,date,amount
9497,'01/01/2022 7:34:46 PM',13.24
9498,'01/01/2022 10:10:22 PM',31.43
9499,'01/02/2022 8:35:54 AM',36.34
9500,'01/03/2022 2:21:53 PM',51.75
9501,'01/04/2022 6:49:38 PM',15.35
9502,'01/04/2022 10:58:34 PM',74.34
9503,'01/05/2022 5:40:49 AM',73.53
9504,'01/05/2022 11:29:38 AM',50.00
9505,'01/05/2022 7:04:57 PM',47.25
9506,'01/06/2022 8:49:09 AM',74.23
];
結果
データをロードしてシートを開きます。新しいテーブルを作成し、これらの項目を軸として追加します。
結果テーブル
日付 |
in_day |
01/01/2022 7:34:46 PM |
0 |
01/01/2022 10:10:22 PM |
0 |
01/02/2022 8:35:54 AM |
0 |
01/03/2022 2:21:53 PM |
-1 |
01/04/2022 6:49:38 PM |
0 |
01/04/2022 10:58:34 PM |
0 |
01/05/2022 5:40:49 AM |
0 |
01/05/2022 11:29:38 AM |
0 |
01/05/2022 7:04:57 PM |
0 |
01/06/2022 8:49:09 AM |
0 |
この場合、inday() 関数のオフセット引数として -2 の period_no が使用されたため、この関数は、各トランザクションの日付が 1 月 3 日に発生したかどうかを判別します。これは、1 つのトランザクションが TRUE のブール結果を返す出力テーブルで確認できます。
例 3 – day_start
概要
ロード スクリプトは、前の例で使用されたものと同じデータセットとシナリオを使用します。
ただし、この例では、会社のポリシーでは、就業日は 7 時 AM に開始および終了します。
ロード スクリプト
SET TimestampFormat='M/D/YYYY h:mm:ss[.fff] TT';
Transactions:
Load
*,
inday(date,'01/05/2022 12:00:00 AM', 0, 7/24) as in_day
;
Load
*
Inline
[
id,date,amount
9497,'01/01/2022 7:34:46 PM',13.24
9498,'01/01/2022 10:10:22 PM',31.43
9499,'01/02/2022 8:35:54 AM',36.34
9500,'01/03/2022 2:21:53 PM',51.75
9501,'01/04/2022 6:49:38 PM',15.35
9502,'01/04/2022 10:58:34 PM',74.34
9503,'01/05/2022 5:40:49 AM',73.53
9504,'01/05/2022 11:29:38 AM',50.00
9505,'01/05/2022 7:04:57 PM',47.25
9506,'01/06/2022 8:49:09 AM',74.23
];
結果
データをロードしてシートを開きます。新しいテーブルを作成し、これらの項目を軸として追加します。
結果テーブル
日付 |
in_day |
01/01/2022 7:34:46 PM |
0 |
01/01/2022 10:10:22 PM |
0 |
01/02/2022 8:35:54 AM |
0 |
01/03/2022 2:21:53 PM |
0 |
01/04/2022 6:49:38 PM |
-1 |
01/04/2022 10:58:34 PM |
-1 |
01/05/2022 5:40:49 AM |
-1 |
01/05/2022 11:29:38 AM |
0 |
01/05/2022 7:04:57 PM |
0 |
01/06/2022 8:49:09 AM |
0 |
7 時 AM である 7/24 の start_day 引数が inday() 関数で使用されているため、この関数は、各トランザクションの日付が 1 月 4 日の 7 時 AM から 1 月 5 日の 7 時 AM までに発生したかどうかを判別します。
これは、1 月 4 日の 7 時 AM 以降に発生したトランザクションが TRUE のブール結果を返し、1 月 5 日の 7 時 AM 以降に発生したトランザクションが FALSE のブール結果を返す出力テーブルで確認できます。
例 4 – チャート オブジェクト
概要
ロード スクリプトは、前の例で使用されたものと同じデータセットとシナリオを使用します。
ただし、この例ではデータセットは変更されず、アプリケーションにロードされます。チャート オブジェクトにメジャーを作成することにより、1 月 5 日にトランザクションが発生するかどうかを判断するために計算します。
ロード スクリプト
Transactions:
Load
*
Inline
[
id,date,amount
9497,'01/01/2022 7:34:46 PM',13.24
9498,'01/01/2022 10:10:22 PM',31.43
9499,'01/02/2022 8:35:54 AM',36.34
9500,'01/03/2022 2:21:53 PM',51.75
9501,'01/04/2022 6:49:38 PM',15.35
9502,'01/04/2022 10:58:34 PM',74.34
9503,'01/05/2022 5:40:49 AM',73.53
9504,'01/05/2022 11:29:38 AM',50.00
9505,'01/05/2022 7:04:57 PM',47.25
9506,'01/06/2022 8:49:09 AM',74.23
];
結果
データをロードしてシートを開きます。新しいテーブルを作成し、この項目を軸として追加します:
トランザクションが 1 月 5 日に行われるかどうかを計算するには、次のメジャーを作成します。
=inday(date,'01/05/2022 12:00:00 AM',0)
結果テーブル
日付 |
inday(date,'01/05/2022 12:00:00 AM',0) |
01/01/2022 7:34:46 PM |
0 |
01/01/2022 10:10:22 PM |
0 |
01/02/2022 8:35:54 AM |
0 |
01/03/2022 2:21:53 PM |
0 |
01/04/2022 6:49:38 PM |
0 |
01/04/2022 10:58:34 PM |
0 |
01/05/2022 5:40:49 AM |
-1 |
01/05/2022 11:29:38 AM |
-1 |
01/05/2022 7:04:57 PM |
-1 |
01/06/2022 8:49:09 AM |
0 |
例 5 – シナリオ
概要
この例では、機器のエラーにより、1 月 5 日に製造された製品に欠陥があることが確認されています。エンド ユーザーは、製造された製品のステータスが「不具合」または「不具合なし」であったこと、および 1 月 5 日に製造された製品のコストを日付別に表示するチャート オブジェクトを希望しています。
データ ロード エディターを開き、以下のロード スクリプトを新しいタブに追加します。
ロード スクリプトには次が含まれています。
ロード スクリプト
Products:
Load
*
Inline
[
product_id,manufacture_date,cost_price
9497,'01/01/2022 7:34:46 PM',13.24
9498,'01/01/2022 10:10:22 PM',31.43
9499,'01/02/2022 8:35:54 AM',36.34
9500,'01/03/2022 2:21:53 PM',51.75
9501,'01/04/2022 6:49:38 PM',15.35
9502,'01/04/2022 10:58:34 PM',74.34
9503,'01/05/2022 5:40:49 AM',73.53
9504,'01/05/2022 11:29:38 AM',50.00
9505,'01/05/2022 7:04:57 PM',47.25
9506,'01/06/2022 8:49:09 AM',74.23
];
結果
データをロードしてシートを開きます。新しいテーブルを作成し、この項目を軸として追加します:
=dayname(manufacture_date)
次のメジャーを作成します:
-
=if(only(InDay(manufacture_date,makedate(2022,01,05),0)),'Defective','Faultless')
-
=sum(cost_price)
メジャーの [数値書式] を [通貨] に設定します。
[スタイル] で [合計] をオフにします。
結果テーブル
dayname(manufacture_date) |
=if(only(InDay(manufacture_date,makedate(2022,01,05),0)),'Defective','Faultless') |
=sum(cost_price) |
01/01/2022
|
不具合なし
|
44.67
|
01/02/2022
|
不具合なし
|
36.34
|
01/03/2022
|
不具合なし
|
51.75
|
01/04/2022
|
不具合なし
|
89.69
|
01/05/2022
|
不具合
|
170.78
|
01/06/2022
|
不具合なし
|
74.23
|
inday() 関数は、各製品の製造日を評価するときにブール値を返します。1 月 5 日に製造された製品の場合、inday() 関数はブール値 TRUE を返し、製品を「不具合」としてマークします。FALSE の値を返し、その日に製造されなかった製品については、その製品に「不具合なし」のマークが付けられます。