monthsname - スクリプトおよびチャート関数
この関数は、期間の月の範囲 (MonthNames スクリプト変数に従った書式で表示) および年を表す表示値を返します。基底値は、ベース日付を含む月、2 か月、四半期、4 か月、半年のいずれかの期間の最初のミリ秒のタイムスタンプに相当する値です。
構文:
MonthsName(n_months, date[, period_no[, first_month_of_year]])
戻り値データ型: dual
monthsname() 関数は、指定された n_months 引数に基づいて年をセグメントに分割します。次に、提供された各 date が属するセグメントを評価し、そのセグメントの開始月名と終了月名、および年を返します。この関数には、前後のセグメントからこれらの境界を返したり、年の最初の月を再定義したりする機能もあります。
次の年のセグメントは、 n_month 引数として関数で使用できます。
考えられる n_month 引数
月 |
1 |
隔月 |
2 |
四半期 |
3 |
4 か月 |
4
|
半年 |
6 |
引数
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 の間の値を指定します。
|
使用に適しているケース
monthsname() 関数は、ユーザーが選択した期間で集計を比較する機能をユーザーに提供することを希望する場合に便利です。たとえば、入力変数を提供して、ユーザーが月、四半期、または半年ごとに製品の総売上を確認できるようにすることができます。
これらの軸は、マスター カレンダー テーブルの項目として関数を追加することによってロード スクリプトで作成するか、計算軸としてチャートに軸を直接作成することによって作成できます。
関数の例
monthsname(4, '10/19/2013')
|
「Sep-Dec 2013」を返します。この例と他の例では、 SET Monthnames ステートメントが Jan;Feb;Marのように設定されています。
|
monthsname(4, '10/19/2013', -1)
|
「May-Aug 2013」を返します |
monthsname(4, '10/19/2013', 0, 2)
|
年は月 2で始まるように指定されているため、「Oct-Jan 2014」を返します。そのため、この 4 か月の期間は次の年の最初の月に終了します。 |
地域の設定
特に指定のない限り、このトピックの例では次の日付書式を使用しています: MM/DD/YYYY。日付書式は、データ ロード スクリプトの SET DateFormat ステートメントで指定されています。既定の日付書式は、地域の設定やその他の要因により、システムによって異なる場合があります。以下の例の書式は、要件に合わせて変更できます。または、これらの例に一致するようにロード スクリプトの書式を変更できます。詳しくは「アプリとスクリプトの地域設定の変更」を参照してください。
アプリの既定地域設定は、ユーザー プロファイルに基づいています。これらの地域の書式設定は、Qlik Cloud ユーザー インターフェースに表示される言語とは関係ありません。Qlik Cloud は使用しているブラウザと同じ言語で表示されます。
アプリの作成者は、作成するアプリの既定の地域を設定できます。詳細については、「Qlik Cloud Analytics でアプリとスクリプトを作成するための優先地域設定の設定」を参照してください。
例 1 – 基本的な例
概要
データ ロード エディターを開き、以下のロード スクリプトを新しいタブに追加します。
ロード スクリプトには次が含まれています。
-
Transactions というテーブルにロードされる、2022 年の一連のトランザクションを含むデータセット。
-
DateFormat システム変数形式 (MM/DD/YYYY) で提供されている日付項目。
-
トランザクションを 2 か月のセグメントにグループ化し、トランザクションごとにそのセグメントの境界名を返す項目 [bi_monthly_range] の作成。
ロード スクリプト
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
monthsname(2,date) as bi_monthly_range
;
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
];
結果
データをロードしてシートを開きます。新しいテーブルを作成し、これらの項目を軸として追加します:
結果テーブル
2/19/2022 |
2022 年 1 月~2 月 |
3/7/2022 |
2022 年 3 月~4 月 |
3/30/2022 |
2022 年 3 月~4 月 |
4/5/2022 |
2022 年 3 月~4 月 |
4/16/2022 |
2022 年 3 月~4 月 |
5/1/2022 |
2022 年 5 月~6 月 |
5/7/2022 |
2022 年 5 月~6 月 |
5/22/2022 |
2022 年 5 月~6 月 |
6/15/2022 |
2022 年 5 月~6 月 |
6/26/2022 |
2022 年 5 月~6 月 |
7/9/2022 |
2022 年 7 月~8 月 |
7/22/2022 |
2022 年 7 月~8 月 |
7/23/2022 |
2022 年 7 月~8 月 |
7/27/2022 |
2022 年 7 月~8 月 |
8/2/2022 |
2022 年 7 月~8 月 |
8/8/2022 |
2022 年 7 月~8 月 |
8/19/2022 |
2022 年 7 月~8 月 |
9/26/2022 |
2022 年 9 月~10 月 |
10/14/2022 |
2022 年 9 月~10 月 |
10/29/2022 |
2022 年 9 月~10 月 |
bi_monthly_range 項目は、monthsname() 関数を使用して、先行する LOAD ステートメントで作成されます。提供される最初の引数は 2 で、年を 2 か月のセグメントに分割します。2 番目の引数は、評価される項目を識別します。
トランザクション 8195 は 5 月 22 日に発生します。 関数は、最初に年を 2 か月のセグメントに分割します。monthsname() トランザクション 8195 は、5 月 1 日~6 月 30 日のセグメントに分類されます。したがって、この関数はこれらの月を MonthNames システム変数形式で返し、2022 年 5 月~6 月の年も返します。
例 2 – period_no
概要
データ ロード エディターを開き、以下のロード スクリプトを新しいタブに追加します。
ロード スクリプトには次が含まれています。
必要に応じて、リストなどで他のテキストをここに追加します。
ロード スクリプト
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
MonthsName(2,date,-1) as prev_bi_monthly_range
;
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
-
prev_bi_monthly_range
結果テーブル
2/19/2022 |
2021 年 11 月~12 月 |
3/7/2022 |
2022 年 1 月~2 月 |
3/30/2022 |
2022 年 1 月~2 月 |
4/5/2022 |
2022 年 1 月~2 月 |
4/16/2022 |
2022 年 1 月~2 月 |
5/1/2022 |
2022 年 3 月~4 月 |
5/7/2022 |
2022 年 3 月~4 月 |
5/22/2022 |
2022 年 3 月~4 月 |
6/15/2022 |
2022 年 3 月~4 月 |
6/26/2022 |
2022 年 3 月~4 月 |
7/9/2022 |
2022 年 5 月~6 月 |
7/22/2022 |
2022 年 5 月~6 月 |
7/23/2022 |
2022 年 5 月~6 月 |
7/27/2022 |
2022 年 5 月~6 月 |
8/2/2022 |
2022 年 5 月~6 月 |
8/8/2022 |
2022 年 5 月~6 月 |
8/19/2022 |
2022 年 5 月~6 月 |
9/26/2022 |
2022 年 7 月~8 月 |
10/14/2022 |
2022 年 7 月~8 月 |
10/29/2022 |
2022 年 7 月~8 月 |
この例では、monthsname() 関数の period_no 引数として -1 が使用されています。最初に 1 年を 2 か月のセグメントに分割した後、この関数はトランザクションが発生したときの以前のセグメント境界を返します。
トランザクション 8195 は、5 月~6 月のセグメントに発生します。したがって、前の 2 か月のセグメントは 3 月 1 日から 4 月 30 日の間であったため、この関数は 2022 年 3 月から 4 月を返します。
例 3 – first_month_of_year
概要
データ ロード エディターを開き、以下のロード スクリプトを新しいタブに追加します。
ロード スクリプトには次が含まれています。
ただし、この例では、4 月を会計年度の最初の月として設定する必要もあります。
ロード スクリプト
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
MonthsName(2,date,0,4) as bi_monthly_range
;
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
];
結果
データをロードしてシートを開きます。新しいテーブルを作成し、これらの項目を軸として追加します:
結果テーブル
2/19/2022 |
2021 年 2 月~3 月 |
3/7/2022 |
2021 年 2 月~3 月 |
3/30/2022 |
2021 年 2 月~3 月 |
4/5/2022 |
2022 年 4 月~5 月 |
4/16/2022 |
2022 年 4 月~5 月 |
5/1/2022 |
2022 年 4 月~5 月 |
5/7/2022 |
2022 年 4 月~5 月 |
5/22/2022 |
2022 年 4 月~5 月 |
6/15/2022 |
2022 年 6 月~7 月 |
6/26/2022 |
2022 年 6 月~7 月 |
7/9/2022 |
2022 年 6 月~7 月 |
7/22/2022 |
2022 年 6 月~7 月 |
7/23/2022 |
2022 年 6 月~7 月 |
7/27/2022 |
2022 年 6 月~7 月 |
8/2/2022 |
2022 年 8 月~9 月 |
8/8/2022 |
2022 年 8 月~9 月 |
8/19/2022 |
2022 年 8 月~9 月 |
9/26/2022 |
2022 年 8 月~9 月 |
10/14/2022 |
2022 年 10 月~11 月 |
10/29/2022 |
2022 年 10 月~11 月 |
monthsname() 関数の 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 日のセグメントに分類されます。したがって、この関数は 2022 年 4 月~5 月を返します。
例 4 – チャート オブジェクトの例
概要
データ ロード エディターを開き、以下のロード スクリプトを新しいタブに追加します。
ロード スクリプトには、最初の例と同じ inline データセットとシナリオが含まれます。ただし、この例では、変更されていないデータセットがアプリケーションにロードされます。トランザクションを 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。
次のメジャーを作成します:
=monthsname(2,date)
結果テーブル
2/19/2022 |
2022 年 1 月~2 月 |
3/7/2022 |
2022 年 3 月~4 月 |
3/30/2022 |
2022 年 3 月~4 月 |
4/5/2022 |
2022 年 3 月~4 月 |
4/16/2022 |
2022 年 3 月~4 月 |
5/1/2022 |
2022 年 5 月~6 月 |
5/7/2022 |
2022 年 5 月~6 月 |
5/22/2022 |
2022 年 5 月~6 月 |
6/15/2022 |
2022 年 5 月~6 月 |
6/26/2022 |
2022 年 5 月~6 月 |
7/9/2022 |
2022 年 7 月~8 月 |
7/22/2022 |
2022 年 7 月~8 月 |
7/23/2022 |
2022 年 7 月~8 月 |
7/27/2022 |
2022 年 7 月~8 月 |
8/2/2022 |
2022 年 7 月~8 月 |
8/8/2022 |
2022 年 7 月~8 月 |
8/19/2022 |
2022 年 7 月~8 月 |
9/26/2022 |
2022 年 9 月~10 月 |
10/14/2022 |
2022 年 9 月~10 月 |
10/29/2022 |
2022 年 9 月~10 月 |
[bi_monthly_range] 項目は、 monthsname() 関数を使用することにより、チャート オブジェクトに作成されます。提供される最初の引数は 2 で、年を 2 か月のセグメントに分割します。2 番目の引数は、評価される項目を識別します。
トランザクション 8195 は 5 月 22 日に発生します。 関数は、最初に年を 2 か月のセグメントに分割します。monthsname() トランザクション 8195 は、5 月 1 日~6 月 30 日のセグメントに分類されます。したがって、この関数はこれらの月を MonthNames システム変数形式で返し、2022 年 5 月~6 月の年も返します。
例 5 – シナリオ
概要
データ ロード エディターを開き、以下のロード スクリプトを新しいタブに追加します。
ロード スクリプトには次が含まれています。
エンド ユーザーは、自分で選択した期間ごとの総売上高を表示するチャート オブジェクトを望んでいます。これは、変数入力コントロールによって動的に変更される計算軸として monthsname() 関数を使用して、この軸がデータ モデルで使用できない場合でも実現できます。
ロード スクリプト
SET vPeriod = 1;
SET DateFormat='MM/DD/YYYY';
Transactions:
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/16/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
];
結果
データをロードしてシートを開きます。
ロード スクリプトの開始時には、変数入力コントロールに関連付けられる変数 (vPeriod) が作成されています。次に、変数をシートのカスタム オブジェクトとして構成します。
次の手順を実行します。
-
アセット パネルで、[カスタム オブジェクト] をクリックします。
-
[Qlik ダッシュボード バンドル] を選択し、変数入力オブジェクトを作成します。
-
チャート オブジェクトのタイトルを入力します。
-
[変数] で、[名前] に [vPeriod] を選択し、オブジェクトを [ドロップ ダウン] として表示するように設定します。
-
[値] で、動的な値を使用するようにオブジェクトを構成します。以下を入力します。
='1~month|2~bi-month|3~quarter|4~tertial|6~half-year'
次に、結果テーブルを作成します。
次の手順を実行します。
-
新しいテーブルを作成し、次の計算軸を追加します。
=monthsname($(vPeriod),date)
-
このメジャーを追加して、総売上を計算します。
=sum(amount)
-
メジャーの [数値書式] を [通貨] に設定します。[ 編集の完了] をクリックします。変数オブジェクトの時間セグメントを調整することで、テーブルに表示されているデータを変更できるようになりました。
[tertial] オプションを選択した場合の結果テーブルは次のようになります。
結果テーブル
2022 年 1 月~4 月 |
253.89 |
2021 年 5 月~8 月 |
713.58 |
2022 年 9 月~12 月 |
248.12 |