dayend - スクリプトおよびチャート関数
この関数は、time を含む日の最後のミリ秒のタイムスタンプに相当する値を返します。デフォルトの出力形式は、スクリプトに設定されている TimestampFormat です。
構文:
DayEnd(time[, [period_no[, day_start]])
使用に適しているケース
dayend() 関数は、ユーザーがまだ発生していない日の端数を計算に使用する場合に、数式の一部として一般的に使用されます。例えば、日中にまだ発生する総費用を計算します。
戻り値データ型: dual
引数 | 説明 |
---|---|
time | 評価するタイムスタンプ。 |
period_no | period_no は整数または計算結果が整数になる数式で、値 0 は time を含む日を示します。period_no の値が負の場合は過去の日を、正の場合は将来の日を示します。 |
day_start | 1 日の開始時刻を深夜 0 時以外に設定する場合は、day_start に 1 日未満の長さを補正値として指定します。例えば、0.125 は午前 3 時を意味します。 つまり、オフセットを作るには、開始時刻を 24 時間で割り算してください。たとえば、1 日が午前 7:00 に始まる場合は、分数 7/24 を使用します。 |
地域の設定
特に指定のない限り、このトピックの例では次の日付書式を使用しています: MM/DD/YYYY。日付書式は、データ ロード スクリプトの SET DateFormat ステートメントで指定されています。既定の日付書式は、地域の設定やその他の要因により、システムによって異なる場合があります。以下の例の書式は、要件に合わせて変更できます。または、これらの例に一致するようにロード スクリプトの書式を変更できます。
App の既定の地域設定は、Qlik Sense がインストールされているコンピューターまたはサーバーの地域システム設定に基づいています。アクセスしている Qlik Sense サーバーがスウェーデンに設定されてい場合、データ ロード エディターは、日付、時間、および通貨にスウェーデンの地域設定を使用します。これらの地域の書式設定は、Qlik Sense ユーザー インターフェースに表示される言語とは関係ありません。Qlik Sense は使用しているブラウザと同じ言語で表示されます。
例 | 結果 |
---|---|
dayend('01/25/2013 16:45:00') | Returns 01/25/2013 23:59:59. PM |
dayend('01/25/2013 16:45:00', -1) | 01/24/2013 23:59:59 を返します。PM |
dayend('01/25/2013 16:45:00', 0, 0.5) | Returns 01/26/2013 11:59:59. PM |
例 1 - 基本的なスクリプト
概要
データ ロード エディター を開き、以下のロード スクリプトを新しいタブに追加します。
ロード スクリプトには次が含まれています:
-
日付のリストを含むデータセットは、「Calendar」という名前のテーブルにロードされます。
-
既定の DateFormat システム変数 (MM/DD/YYYY)。
-
dayend() 関数を使用して、追加の項目「EOD_timestamp」を作成するための先行ロード。
ロード スクリプト
SET TimestampFormat='M/D/YYYY h:mm:ss[.fff] TT';
Calendar:
Load
date,
dayend(date) as EOD_timestamp
;
Load
date
Inline
[
date
03/11/2022 1:47:15 AM
03/12/2022 4:34:58 AM
03/13/2022 5:15:55 AM
03/14/2022 9:25:14 AM
03/15/2022 10:06:54 AM
03/16/2022 10:44:42 AM
03/17/2022 11:33:30 AM
03/18/2022 12:58:14 PM
03/19/2022 4:23:12 PM
03/20/2022 6:42:15 PM
03/21/2022 7:41:16 PM
];
結果
データをロードしてシートを開きます。新しいテーブルを作成し、これらの項目を軸として追加します:
-
date
-
EOD_timestamp
日付 | EOD_timestamp |
---|---|
03/11/2022 1:47:15 AM | 3/11/2022 11:59:59 PM |
03/12/2022 4:34:58 AM | 3/12/2022 11:59:59 PM |
03/13/2022 5:15:55 AM | 3/13/2022 11:59:59 PM |
03/14/2022 9:25:14 AM | 3/14/2022 11:59:59 PM |
03/15/2022 10:06:54 AM | 3/15/2022 11:59:59 PM |
03/16/2022 10:44:42 AM | 3/16/2022 11:59:59 PM |
03/17/2022 11:33:30 AM | 3/17/2022 11:59:59 PM |
03/18/2022 12:58:14 PM | 3/18/2022 11:59:59 PM |
03/19/2022 4:23:12 PM | 3/19/2022 11:59:59 PM |
03/20/2022 6:42:15 PM | 3/20/2022 11:59:59 PM |
03/21/2022 7:41:16 PM | 3/21/2022 11:59:59 PM |
上のテーブルからわかるように、データセット内の日付ごとに 1 日の終わりのタイムスタンプが生成されます。タイムスタンプはシステム変数 TimestampFormat M/D/YYYY h:mm:ss[.fff] TT の形式です。
例 2 – period_no
概要
データ ロード エディター を開き、以下のロード スクリプトを新しいタブに追加します。
サービス予約を含むデータセットを「Services」という名前のテーブルにロードします。
データセットには次の項目が含まれています。
-
service_id
-
service_date
-
amount
テーブルに 2 つの新しい項目を作成します。
-
deposit_due_date: デポジットを受け取るべき日付。これは、service_date の 3 日前の 1 日の終わりです。
-
final_payment_due_date: 最終的な支払いを受け取るべき日付。これは、service_date の 7 日後の 1 日の終わりです。
上記の 2 つの項目は、dayend() 関数を使用して先行するロードで作成され、最初の2つのパラメータ time と period_no を提供します。
ロード スクリプト
SET TimestampFormat='M/D/YYYY h:mm:ss[.fff] TT';
Services:
Load
*,
dayend(service_date,-3) as deposit_due_date,
dayend(service_date,7) as final_payment_due_date
;
Load
service_id,
service_date,
amount
Inline
[
service_id, service_date,amount
1,03/11/2022 9:25:14 AM,231.24
2,03/12/2022 10:06:54 AM,567.28
3,03/13/2022 10:44:42 AM,364.28
4,03/14/2022 11:33:30 AM,575.76
5,03/15/2022 12:58:14 PM,638.68
6,03/16/2022 4:23:12 PM,785.38
7,03/17/2022 6:42:15 PM,967.46
8,03/18/2022 7:41:16 PM,287.67
9,03/19/2022 8:14:15 PM,764.45
10,03/20/2022 9:23:51 PM,875.43
11,03/21/2022 10:04:41 PM,957.35
];
結果
データをロードしてシートを開きます。新しいテーブルを作成し、これらの項目を軸として追加します:
-
service_date
-
deposit_due_date
-
final_payment_due_date
service_date | deposit_due_date | final_payment_due_date |
---|---|---|
03/11/2022 9:25:14 AM | 3/8/2022 11:59:59 PM | 3/18/2022 11:59:59 PM |
03/12/2022 10:06:54 AM | 3/9/2022 11:59:59 PM | 3/19/2022 11:59:59 PM |
03/13/2022 10:44:42 AM | 3/10/2022 11:59:59 PM | 3/20/2022 11:59:59 PM |
03/14/2022 11:33:30 AM | 3/11/2022 11:59:59 PM | 3/21/2022 11:59:59 PM |
03/15/2022 12:58:14 PM | 3/12/2022 11:59:59 PM | 3/22/2022 11:59:59 PM |
03/16/2022 4:23:12 PM | 3/13/2022 11:59:59 PM | 3/23/2022 11:59:59 PM |
03/17/2022 6:42:15 PM | 3/14/2022 11:59:59 PM | 3/24/2022 11:59:59 PM |
03/18/2022 7:41:16 PM | 3/15/2022 11:59:59 PM | 3/25/2022 11:59:59 PM |
03/19/2022 8:14:15 PM | 3/16/2022 11:59:59 PM | 3/26/2022 11:59:59 PM |
03/20/2022 9:23:51 PM | 3/17/2022 11:59:59 PM | 3/27/2022 11:59:59 PM |
03/21/2022 10:04:41 PM | 3/18/2022 11:59:59 PM | 3/28/2022 11:59:59 PM |
新しい項目の値は TimestampFormat M/D/YYYY h:mm:ss[.fff] TT にあります。関数 dayend() が使用されたため、タイムスタンプ値はすべてその日の最後のミリ秒です。
dayend() 関数で渡された 2 番目の引数が負であるため、デポジットの期日の値はサービス日の 3 日前です。
dayend() 関数で渡された 2 番目の引数が正であるため、最終的な支払期日の値はサービス日の 7 日後です。
例 3 – day_start script
概要
データ ロード エディター を開き、以下のロード スクリプトを新しいタブに追加します。
この例で使用されているデータセットとシナリオは、前の例と同じです。
前の例のように、2つの新しい項目を作成します。
-
deposit_due_date: デポジットを受け取るべき日付。これは、service_date の 3 日前の 1 日の終わりです。
-
final_payment_due_date: 最終的な支払いを受け取るべき日付。これは、service_date の 7 日後の 1 日の終わりです。
ただし、あなたの会社は、営業日が 5 PM に始まり、翌日の 5 PM に終わるというポリシーの下で運営したいと考えています。これで、会社はそれらの営業時間内に発生するトランザクションを監視できます。
これらの要件を達成するために、dayend() 関数を使用して先行するロードで作成され、3 つの引数 time、period_no、day_start をすべて使用します。
ロード スクリプト
SET TimestampFormat='M/D/YYYY h:mm:ss[.fff] TT';
Services:
Load
*,
dayend(service_date,-3,17/24) as deposit_due_date,
dayend(service_date,7,17/24) as final_payment_due_date
;
Load
service_id,
service_date,
amount
Inline
[
service_id, service_date,amount
1,03/11/2022 9:25:14 AM,231.24
2,03/12/2022 10:06:54 AM,567.28
3,03/13/2022 10:44:42 AM,364.28
4,03/14/2022 11:33:30 AM,575.76
5,03/15/2022 12:58:14 PM,638.68
6,03/16/2022 4:23:12 PM,785.38
7,03/17/2022 6:42:15 PM,967.46
8,03/18/2022 7:41:16 PM,287.67
9,03/19/2022 8:14:15 PM,764.45
10,03/20/2022 9:23:51 PM,875.43
11,03/21/2022 10:04:41 PM,957.35
];
結果
データをロードしてシートを開きます。新しいテーブルを作成し、これらの項目を軸として追加します:
-
service_date
-
deposit_due_date
-
final_payment_due_date
service_date | deposit_due_date | final_payment_due_date |
---|---|---|
03/11/2022 9:25:14 AM | 3/8/2022 4:59:59 PM | 3/18/2022 4:59:59 PM |
03/12/2022 10:06:54 AM | 3/9/2022 4:59:59 PM | 3/19/2022 4:59:59 PM |
03/13/2022 10:44:42 AM | 3/10/2022 4:59:59 PM | 3/20/2022 4:59:59 PM |
03/14/2022 11:33:30 AM | 3/11/2022 4:59:59 PM | 3/21/2022 4:59:59 PM |
03/15/2022 12:58:14 PM | 3/12/2022 4:59:59 PM | 3/22/2022 4:59:59 PM |
03/16/2022 4:23:12 PM | 3/13/2022 4:59:59 PM | 3/23/2022 4:59:59 PM |
03/17/2022 6:42:15 PM | 3/14/2022 4:59:59 PM | 3/24/2022 4:59:59 PM |
03/18/2022 7:41:16 PM | 3/15/2022 4:59:59 PM | 3/25/2022 4:59:59 PM |
03/19/2022 8:14:15 PM | 3/16/2022 4:59:59 PM | 3/26/2022 4:59:59 PM |
03/20/2022 9:23:51 PM | 3/17/2022 4:59:59 PM | 3/27/2022 4:59:59 PM |
03/21/2022 10:04:41 PM | 3/18/2022 4:59:59 PM | 3/28/2022 4:59:59 PM |
日付は例 2 と同じままですが、dayend() 関数に渡された 3 番目の引数 day_start の値が 17/24 であるため、日付のタイムスタンプは 5:00 PM より前の最後のミリ秒になりました。
例 4 – チャートの例
概要
データ ロード エディター を開き、以下のロード スクリプトを新しいタブに追加します。
この例で使用されているデータセットとシナリオは、前の 2 つの例と同じです。あなたの会社は、営業日が 5:00 PM に始まり、翌日の 5:00 PM に終わるというポリシーの下で運営したいと考えています。
前の例のように、2つの新しい項目を作成します。
-
deposit_due_date: デポジットを受け取るべき日付。これは、service_date の 3 日前の 1 日の終わりです。
-
final_payment_due_date: 最終的な支払いを受け取るべき日付。これは、service_date の 7 日後の 1 日の終わりです。
ロード スクリプト
SET TimestampFormat='M/D/YYYY h:mm:ss[.fff] TT';
Services:
Load
service_id,
service_date,
amount
Inline
[
service_id, service_date,amount
1,03/11/2022 9:25:14 AM,231.24
2,03/12/2022 10:06:54 AM,567.28
3,03/13/2022 10:44:42 AM,364.28
4,03/14/2022 11:33:30 AM,575.76
5,03/15/2022 12:58:14 PM,638.68
6,03/16/2022 4:23:12 PM,785.38
7,03/17/2022 6:42:15 PM,967.46
8,03/18/2022 7:41:16 PM,287.67
9,03/19/2022 8:14:15 PM,764.45
10,03/20/2022 9:23:51 PM,875.43
11,03/21/2022 10:04:41 PM,957.35
];
結果
データをロードしてシートを開きます。新しいテーブルを作成し、この項目を軸として追加します:
service_date。
deposit_due_date 項目を作成するには、次のメジャーを作成します: =。
=dayend(service_date,-3,17/24).
次に、final_payment_due_date 項目を作成するには、次のメジャーを作成します:
=dayend(service_date,7,17/24).
service_date | =dayend(service_date,-3,17/24) | =dayend(service_date,7,17/24 |
---|---|---|
03/11/2022 | 3/8/2022 16:59:59 PM | 3/18/2022 16:59:59 PM |
03/12/2022 | 3/9/2022 16:59:59 PM | 3/19/2022 16:59:59 PM |
03/13/2022 | 3/10/2022 16:59:59 PM | 3/20/2022 16:59:59 PM |
03/14/2022 | 3/11/2022 16:59:59 PM | 3/21/2022 16:59:59 PM |
03/15/2022 | 3/12/2022 16:59:59 PM | 3/22/2022 16:59:59 PM |
03/16/2022 | 3/13/2022 16:59:59 PM | 3/23/2022 16:59:59 PM |
03/17/2022 | 3/14/2022 16:59:59 PM | 3/24/2022 16:59:59 PM |
03/18/2022 | 3/15/2022 16:59:59 PM | 3/25/2022 16:59:59 PM |
03/19/2022 | 3/16/2022 16:59:59 PM | 3/26/2022 16:59:59 PM |
03/20/2022 | 3/17/2022 16:59:59 PM | 3/27/2022 16:59:59 PM |
03/21/2022 | 3/18/2022 16:59:59 PM | 3/28/2022 16:59:59 PM |
新しい項目の値は TimestampFormat M/D/YYYY h:mm:ss[.fff] TT にあります。関数 dayend() が使用されたため、タイムスタンプ値はすべてその日の最後のミリ秒です。
dayend() 関数で渡された 2 番目の引数が負であるため、支払期日の値はサービス日の 3 日前です。
dayend() 関数で渡された 2 番目の引数が正であるため、最終的な支払期日の値はサービス日の 7 日後です。
dayend() 関数に渡された 3 番目の引数 day_start の値が 17/24 であるため、日付のタイムスタンプは 5:00 PM より前の最後のミリ秒です。