monthsend - スクリプトおよびチャート関数
この関数は、ベース日付を含む月、2 か月、四半期、4 か月、半年のいずれかの期間の最後のミリ秒のタイムスタンプに相当する値を返します。その前後の期間の終わりのタイムスタンプを取得することもできます。デフォルトの出力形式は、スクリプトに設定されている DateFormat です。
構文:
MonthsEnd(n_months, date[, period_no [, first_month_of_year]])
戻り値データ型: dual
引数 | 説明 |
---|---|
n_months | 期間を定義する月数。整数、または計算結果が整数になる数式で次のうちのいずれかでなければならない。1 (inmonth() 関数と同機能)、2 (2 か月)、3 (inquarter() 関数と同機能)、4 (4 か月)、6 (半年)。 |
date | 評価する日付またはタイムスタンプ。 |
period_no | 期間は、period_no、整数、計算結果が整数になる数式を使用して補正できます。値 0 は base_date を含む期間を示します。period_no の値が負の場合は過去の期間を、正の場合は将来の期間を示します。 |
first_month_of_year |
事業年度が 1 月以外の月に始まる場合は、first_month_of_year で 2 から 12 の間の値を指定します。 |
monthsend() 関数は、指定された n_months 引数に基づいて年をセグメントに分割します。次に、提供された各日付がどのセグメントに該当するかを評価し、そのセグメントの最後のミリ秒を日付形式で返します。関数は、前後のセグメントから終了タイムスタンプを返すことも、年の最初の月を最適することもできます。
次の年のセグメントは、 n_month 引数として関数で使用できます。
期間 | 月数 |
---|---|
月 | 1 |
隔月 | 2 |
四半期 | 3 |
4 か月 | 4 |
半年 | 6 |
使用に適しているケース
monthsend() 関数は、ユーザーがこれまで経過した月の端数を計算に使用する場合に、数式の一部として使用されます。ユーザーには変数を使用して、選択した項目の期間を選ぶ機会があります。例えば、monthsend() が入力変数を提供すると、ユーザーが月、四半期、半年にまだ未発生の合計利息を計算することができます。
地域の設定
特に指定のない限り、このトピックの例では次の日付書式を使用しています: MM/DD/YYYY。日付書式は、データ ロード スクリプトの SET DateFormat ステートメントで指定されています。既定の日付書式は、地域の設定やその他の要因により、システムによって異なる場合があります。以下の例の書式は、要件に合わせて変更できます。または、これらの例に一致するようにロード スクリプトの書式を変更できます。
App の既定の地域設定は、Qlik Sense がインストールされているコンピューターまたはサーバーの地域システム設定に基づいています。アクセスしている Qlik Sense サーバーがスウェーデンに設定されてい場合、データ ロード エディターは、日付、時間、および通貨にスウェーデンの地域設定を使用します。これらの地域の書式設定は、Qlik Sense ユーザー インターフェースに表示される言語とは関係ありません。Qlik Sense は使用しているブラウザと同じ言語で表示されます。
例 | 結果 |
---|---|
monthsend(4, '07/19/2013') | 08/31/2013 を返します。 |
monthsend(4, '10/19/2013', -1) | 08/31/2013 を返します。 |
monthsend(4, '10/19/2013', 0, 2) |
01/31/2014 を返します。 年の開始は、2 月からです。 |
例 1 – 基本的な例
概要
データ ロード エディターを開き、以下のロード スクリプトを新しいタブに追加します。
ロード スクリプトには次が含まれています。
-
Transactions というテーブルにロードされる、2022 年の一連のトランザクションを含むデータセット。
-
DateFormat システム変数 (MM/DD/YYYY) 形式で提供される日付項目。
-
以下を含む先行 Load ステートメント:
-
項目 [bi_monthly_end] として設定されている monthsend 関数。これにより、トランザクションが隔月セグメントにグループ化されます。
-
各トランザクションに対してセグメントの開始タイムスタンプを返す timestamp 関数。
-
ロード スクリプト
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
monthsend(2,date) as bi_monthly_end,
timestamp(monthsend(2,date)) as bi_monthly_end_timestamp
;
Load
*
Inline
[
id,date,amount
8188,1/7/2022,17.17
8189,1/19/2022,37.23
8190,2/28/2022,88.27
8191,2/5/2022,57.42
8192,3/16/2022,53.80
8193,4/1/2022,82.06
8194,5/7/2022,40.39
8195,5/22/2022,87.21
8196,6/15/2022,95.93
8197,6/26/2022,45.89
8198,7/9/2022,36.23
8199,7/22/2022,25.66
8200,7/23/2022,82.77
8201,7/27/2022,69.98
8202,8/2/2022,76.11
8203,8/8/2022,25.12
8204,8/19/2022,46.23
8205,9/26/2022,84.21
8206,10/14/2022,96.24
8207,10/29/2022,67.67
];
結果
データをロードしてシートを開きます。新しいテーブルを作成し、これらの項目を軸として追加します:
-
id
-
date
-
bi_monthly_end
-
bi_monthly_end_timestamp
ID | 日付 | bi_monthly_end | bi_monthly_end_timestamp |
---|---|---|---|
8188 | 1/7/2022 | 02/28/2022 | 2/28/2022 11:59:59 PM |
8189 | 1/19/2022 | 02/28/2022 | 2/28/2022 11:59:59 PM |
8190 | 2/5/2022 | 02/28/2022 | 2/28/2022 11:59:59 PM |
8191 | 2/28/2022 | 02/28/2022 | 2/28/2022 11:59:59 PM |
8192 | 3/16/2022 | 04/30/2022 | 4/30/2022 11:59:59 PM |
8193 | 4/1/2022 | 04/30/2022 | 4/30/2022 11:59:59 PM |
8194 | 5/7/2022 | 06/30/2022 | 6/30/2022 11:59:59 PM |
8195 | 5/22/2022 | 06/30/2022 | 6/30/2022 11:59:59 PM |
8196 | 6/15/2022 | 06/30/2022 | 6/30/2022 11:59:59 PM |
8197 | 6/26/2022 | 06/30/2022 | 6/30/2022 11:59:59 PM |
8198 | 7/9/2022 | 08/31/2022 | 8/31/2022 11:59:59 PM |
8199 | 7/22/2022 | 08/31/2022 | 8/31/2022 11:59:59 PM |
8200 | 7/23/2022 | 08/31/2022 | 8/31/2022 11:59:59 PM |
8201 | 7/27/2022 | 08/31/2022 | 8/31/2022 11:59:59 PM |
8202 | 8/2/2022 | 08/31/2022 | 8/31/2022 11:59:59 PM |
8203 | 8/8/2022 | 08/31/2022 | 8/31/2022 11:59:59 PM |
8204 | 8/19/2022 | 08/31/2022 | 8/31/2022 11:59:59 PM |
8205 | 9/26/2022 | 10/31/2022 | 10/31/2022 11:59:59 PM |
8206 | 10/14/2022 | 10/31/2022 | 10/31/2022 11:59:59 PM |
8207 | 10/29/2022 | 10/31/2022 | 10/31/2022 11:59:59 PM |
[bi_monthly_end] 項目は、monthsend() 関数を使用して、前の Load ステートメントで作成されます。提供される最初の引数は 2 で、年を 2 か月のセグメントに分割します。2 番目の引数は、評価される項目を識別します。
トランザクション 8195 は 5 月 22 日に発生します。 関数は、最初に年を 2 か月のセグメントに分割します。monthsend() トランザクション 8195 は、5 月 1 日~6 月 30 日のセグメントに分類されます。結果として、関数はこのセグメントの最後のミリ秒 06/30/2022 11:59:59 PM を返します。
例 2 – period_no
概要
最初の例と同じデータセットとシナリオが使用されます。
この例では、タスクはトランザクションが発生する前の 2 か月セグメントの最初のタイムスタンプを返す項目 [prev_bi_monthly_end] の作成です。
ロード スクリプト
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
monthsend(2,date,-1) as prev_bi_monthly_end,
timestamp(monthsend(2,date,-1)) as prev_bi_monthly_end_timestamp
;
Load
*
Inline
[
id,date,amount
8188,1/7/2022,17.17
8189,1/19/2022,37.23
8190,2/28/2022,88.27
8191,2/5/2022,57.42
8192,3/16/2022,53.80
8193,4/1/2022,82.06
8194,5/7/2022,40.39
8195,5/22/2022,87.21
8196,6/15/2022,95.93
8197,6/26/2022,45.89
8198,7/9/2022,36.23
8199,7/22/2022,25.66
8200,7/23/2022,82.77
8201,7/27/2022,69.98
8202,8/2/2022,76.11
8203,8/8/2022,25.12
8204,8/19/2022,46.23
8205,9/26/2022,84.21
8206,10/14/2022,96.24
8207,10/29/2022,67.67
];
結果
データをロードしてシートを開きます。新しいテーブルを作成し、これらの項目を軸として追加します:
-
id
-
date
-
prev_bi_monthly_end
-
prev_bi_monthly_end_timestamp
ID | 日付 | prev_bi_monthly_end | prev_bi_monthly_end_timestamp |
---|---|---|---|
8188 | 1/7/2022 | 12/31/2021 | 12/31/2021 11:59:59 PM |
8189 | 1/19/2022 | 12/31/2021 | 12/31/2021 11:59:59 PM |
8190 | 2/5/2022 | 12/31/2021 | 12/31/2021 11:59:59 PM |
8191 | 2/28/2022 | 12/31/2021 | 12/31/2021 11:59:59 PM |
8192 | 3/16/2022 | 02/28/2022 | 2/28/2022 11:59:59 PM |
8193 | 4/1/2022 | 02/28/2022 | 2/28/2022 11:59:59 PM |
8194 | 5/7/2022 | 04/30/2022 | 4/30/2022 11:59:59 PM |
8195 | 5/22/2022 | 04/30/2022 | 4/30/2022 11:59:59 PM |
8196 | 6/15/2022 | 04/30/2022 | 4/30/2022 11:59:59 PM |
8197 | 6/26/2022 | 04/30/2022 | 4/30/2022 11:59:59 PM |
8198 | 7/9/2022 | 06/30/2022 | 6/30/2022 11:59:59 PM |
8199 | 7/22/2022 | 06/30/2022 | 6/30/2022 11:59:59 PM |
8200 | 7/23/2022 | 06/30/2022 | 6/30/2022 11:59:59 PM |
8201 | 7/27/2022 | 06/30/2022 | 6/30/2022 11:59:59 PM |
8202 | 8/2/2022 | 06/30/2022 | 6/30/2022 11:59:59 PM |
8203 | 8/8/2022 | 06/30/2022 | 6/30/2022 11:59:59 PM |
8204 | 8/19/2022 | 06/30/2022 | 6/30/2022 11:59:59 PM |
8205 | 9/26/2022 | 08/31/2022 | 8/31/2022 11:59:59 PM |
8206 | 10/14/2022 | 08/31/2022 | 8/31/2022 11:59:59 PM |
8207 | 10/29/2022 | 08/31/2022 | 8/31/2022 11:59:59 PM |
-1 を monthsend() 関数の period_no 引数として使用することにより、最初に 1 年を 2 か月のセグメントに分割した後、関数はトランザクションが発生したときの以前の 2 か月セグメントの最後のミリ秒を返します。
トランザクション 8195 は、5 月~6 月のセグメントに発生します。その結果、前の 2 か月セグメントは 3 月 1~4 月 30 日だったので、関数はこのセグメントの最後のミリ秒 04/30/2022 11:59:59 PM を返します。
例 3 – first_month_of_year
概要
最初の例と同じデータセットとシナリオが使用されます。
この例では、組織ポリシーでは 4 月が会計期間の開始月に定められています。
トランザクションを 2 か月のセグメントにグループ化し、トランザクションごとにそのセグメントの最後のミリ秒タイムスタンプを返す項目 [bi_monthly_end] を作成します。
ロード スクリプト
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
monthsend(2,date,0,4) as bi_monthly_end,
timestamp(monthsend(2,date,0,4)) as bi_monthly_end_timestamp
;
Load
*
Inline
[
id,date,amount
8188,1/7/2022,17.17
8189,1/19/2022,37.23
8190,2/28/2022,88.27
8191,2/5/2022,57.42
8192,3/16/2022,53.80
8193,4/1/2022,82.06
8194,5/7/2022,40.39
8195,5/22/2022,87.21
8196,6/15/2022,95.93
8197,6/26/2022,45.89
8198,7/9/2022,36.23
8199,7/22/2022,25.66
8200,7/23/2022,82.77
8201,7/27/2022,69.98
8202,8/2/2022,76.11
8203,8/8/2022,25.12
8204,8/19/2022,46.23
8205,9/26/2022,84.21
8206,10/14/2022,96.24
8207,10/29/2022,67.67
];
結果
データをロードしてシートを開きます。新しいテーブルを作成し、これらの項目を軸として追加します:
-
id
-
date
-
bi_monthly_end
-
bi_monthly_end_timestamp
ID | 日付 | bi_monthly_end | bi_monthly_end_timestamp |
---|---|---|---|
8188 | 1/7/2022 | 01/31/2022 | 1/31/2022 11:59:59 PM |
8189 | 1/19/2022 | 01/31/2022 | 1/31/2022 11:59:59 PM |
8190 | 2/5/2022 | 03/31/2022 | 3/31/2022 11:59:59 PM |
8191 | 2/28/2022 | 03/31/2022 | 3/31/2022 11:59:59 PM |
8192 | 3/16/2022 | 03/31/2022 | 3/31/2022 11:59:59 PM |
8193 | 4/1/2022 | 05/31/2022 | 5/31/2022 11:59:59 PM |
8194 | 5/7/2022 | 05/31/2022 | 5/31/2022 11:59:59 PM |
8195 | 5/22/2022 | 05/31/2022 | 5/31/2022 11:59:59 PM |
8196 | 6/15/2022 | 07/31/2022 | 7/31/2022 11:59:59 PM |
8197 | 6/26/2022 | 07/31/2022 | 7/31/2022 11:59:59 PM |
8198 | 7/9/2022 | 07/31/2022 | 7/31/2022 11:59:59 PM |
8199 | 7/22/2022 | 07/31/2022 | 7/31/2022 11:59:59 PM |
8200 | 7/23/2022 | 07/31/2022 | 7/31/2022 11:59:59 PM |
8201 | 7/27/2022 | 07/31/2022 | 7/31/2022 11:59:59 PM |
8202 | 8/2/2022 | 09/30/2022 | 9/30/2022 11:59:59 PM |
8203 | 8/8/2022 | 09/30/2022 | 9/30/2022 11:59:59 PM |
8204 | 8/19/2022 | 09/30/2022 | 9/30/2022 11:59:59 PM |
8205 | 9/26/2022 | 09/30/2022 | 9/30/2022 11:59:59 PM |
8206 | 10/14/2022 | 11/30/2022 | 11/30/2022 11:59:59 PM |
8207 | 10/29/2022 | 11/30/2022 | 11/30/2022 11:59:59 PM |
monthsend() 関数の first_month_of_year 引数に 4 を使用することにより、関数は 4 月 1 日に年度を開始します。その後その年度を 2 か月単位のセグメントに分割します。4 月~5 月、6 月~7 月、8 月~9 月、10 月~11 月、12 月~1 月、2 月~3 月。
トランザクション 8195 は 5 月 22 日に発生し、4 月 1 日~5 月 31 日のセグメントに分類されます。結果として、関数はこのセグメントの最後のミリ秒 05/31/2022 11:59:59 PM を返します。
例 4 – チャート オブジェクトの例
概要
最初の例と同じデータセットとシナリオが使用されます。ただし、この例では、データセットは変更されず、アプリにロードされます。
この例で、タスクはトランザクションを 2 か月のセグメントにグループ化し、トランザクションごとにそのセグメントの最後のミリ秒タイムスタンプを、アプリのチャート オブジェクトでメジャーとして返す計算を作成することです。
ロード スクリプト
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*
Inline
[
id,date,amount
8188,2/19/2022,37.23
8189,3/7/2022,17.17
8190,3/30/2022,88.27
8191,4/5/2022,57.42
8192,4/16/2022,53.80
8193,5/1/2022,82.06
8194,5/7/2022,40.39
8195,5/22/2022,87.21
8196,6/15/2022,95.93
8197,6/26/2022,45.89
8198,7/9/2022,36.23
8199,7/22/2022,25.66
8200,7/23/2022,82.77
8201,7/27/2022,69.98
8202,8/2/2022,76.11
8203,8/8/2022,25.12
8204,8/19/2022,46.23
8205,9/26/2022,84.21
8206,10/14/2022,96.24
8207,10/29/2022,67.67
];
結果
データをロードしてシートを開きます。新しいテーブルを作成し、この項目を軸として追加します:
date
トランザクションが発生した 2 か月セグメントの最後のミリ秒タイムスタンプをフェッチするには、次のメジャーを作成します。
-
=monthsEnd(2,date)
-
=timestamp(monthsend(2,date))
ID | 日付 | =monthsend(2,date) | =timestamp(monthsend(2,date)) |
---|---|---|---|
8188 | 1/7/2022 | 02/28/2022 | 2/28/2022 11:59:59 PM |
8189 | 1/19/2022 | 02/28/2022 | 2/28/2022 11:59:59 PM |
8190 | 2/5/2022 | 02/28/2022 | 2/28/2022 11:59:59 PM |
8191 | 2/28/2022 | 02/28/2022 | 2/28/2022 11:59:59 PM |
8192 | 3/16/2022 | 04/30/2022 | 4/30/2022 11:59:59 PM |
8193 | 4/1/2022 | 04/30/2022 | 4/30/2022 11:59:59 PM |
8194 | 5/7/2022 | 06/30/2022 | 6/30/2022 11:59:59 PM |
8195 | 5/22/2022 | 06/30/2022 | 6/30/2022 11:59:59 PM |
8196 | 6/15/2022 | 06/30/2022 | 6/30/2022 11:59:59 PM |
8197 | 6/26/2022 | 06/30/2022 | 6/30/2022 11:59:59 PM |
8198 | 7/9/2022 | 08/31/2022 | 8/31/2022 11:59:59 PM |
8199 | 7/22/2022 | 08/31/2022 | 8/31/2022 11:59:59 PM |
8200 | 7/23/2022 | 08/31/2022 | 8/31/2022 11:59:59 PM |
8201 | 7/27/2022 | 08/31/2022 | 8/31/2022 11:59:59 PM |
8202 | 8/2/2022 | 08/31/2022 | 8/31/2022 11:59:59 PM |
8203 | 8/8/2022 | 08/31/2022 | 8/31/2022 11:59:59 PM |
8204 | 8/19/2022 | 08/31/2022 | 8/31/2022 11:59:59 PM |
8205 | 9/26/2022 | 10/31/2022 | 10/31/2022 11:59:59 PM |
8206 | 10/14/2022 | 10/31/2022 | 10/31/2022 11:59:59 PM |
8207 | 10/29/2022 | 10/31/2022 | 10/31/2022 11:59:59 PM |
[bi_monthly_end] 項目は、 monthsend() 関数を使用することにより、チャート オブジェクトに作成されます。提供される最初の引数は 2 で、これは年を 2 か月のセグメントに分割します。2 番目の引数は、評価される項目を識別します。
トランザクション 8195 は 5 月 22 日に発生します。 関数は、最初に年を 2 か月のセグメントに分割します。monthsend() トランザクション 8195 は、5 月 1 日~6 月 30 日のセグメントに分類されます。結果として、関数はこのセグメントの最初のミリ秒 06/30/2022 11:59:59 PM を返します。
例 5 – シナリオ
概要
データ ロード エディタを開き、以下のロード スクリプトを新しいタブに追加します。
この例では、「Employee_Expenses」という名前のテーブルにデータセットがロードされます。テーブルには次の項目が含まれています。
-
従業員 ID
-
従業員名
-
各従業員の平均日次経費請求。
エンド ユーザーは、従業員 ID と従業員名別に、自分で選択した期間の残りの期間にまだ発生する推定経費請求を表示するチャートを求めています。会計年度は 1 月に始まります。
ロード スクリプト
SET vPeriod = 1;
Employee_Expenses:
Load
*
Inline
[
employee_id,employee_name,avg_daily_claim
182,Mark, $15
183,Deryck, $12.5
184,Dexter, $12.5
185,Sydney,$27
186,Agatha,$18
];
結果
データをロードして新しいシートを開きます。
ロード スクリプトの開始時には、変数入力コントロールに関連付けられる変数 (vPeriod) が作成されます。
以下を実行します。
-
アセット パネルで、[カスタム オブジェクト] をクリックします。
-
[Qlik ダッシュボード バンドル] を選択し、変数入力オブジェクトを作成します。
-
チャート オブジェクトのタイトルを入力します。
-
[変数] で、[名前] に [vPeriod] を選択し、オブジェクトを [ドロップ ダウン] として表示するように設定します。
-
[値] で、[ダイナミック] 値をクリックします。以下を入力します。
='1~month|2~bi-month|3~quarter|4~tertial|6~half-year'.
新しいテーブルと、これらの項目を軸として作成します。
-
employee_id
-
employee_name
累積利息を計算するには、このメジャーを作成します。
=floor(monthsend($(vPeriod),today(1))-today(1))*avg_daily_claim
メジャーの [数値書式] を [通貨] に設定します。
employee_id | employee_name | =floor(monthsend($(vPeriod),today(1))-today(1))*avg_daily_claim |
---|---|---|
182 | Mark | $1410.00 |
183 | Deryck | $1175.00 |
184 | Dexter | $1175.00 |
185 | Sydney | $2538.00 |
186 | Agatha | $1692.00 |
monthsend() 関数は、最初の引数としてユーザー入力を、2 番目の因数として今日の日付を使用します。これは、ユーザーが選択した期間の最終日付を返します。次に、式は、この終了日から今日の日付を引くことによって、選択した期間の残りの日数を返します。
次に、この値に各従業員による 1 日あたりの平均経費請求額を乗算して、この期間の残り日数に各従業員が行うと予想される請求の推定額を計算します。