Qlik Senseで日付関数を便利に使う!
更新日:2023年9月26日
「年度」「四半期」「年月」「曜日」などをまとめて作る
日付項目の基本セットを作るためのサンプルスクリプトをご紹介
データ分析においては最重要ともいえる「時間軸」のデータ。
前回はExcelの日付を取り込んだら5桁の数値が表示されてしまう 件について書きましたが、今回は日付データを加工して「年度」や「四半期」など様々な日付項目を作成するパターンをメモしておきます。(※サンプルのロードスクリプト付き)
まずは、Excelから日付データを取り込み、ここから時系列分析の基本セットを作りました。
(※ 日本の標準書式が適用された環境でやりました)
【時系列の基本セット】
▼年:Year関数
これは簡単です。Year関数を使います。
例)Year( '2021/1/1' ) は、2021 を返します
Year(日付)
▼月:Month関数
これも簡単です。Month関数を使います。
例)Month( '2021/1/1' ) は、1月 を返します
Month(日付)
▼年月:Year関数とMonth関数
上記2つを連結して作成しました。連結には「&」を使います。
Year(日付) &'年'& Month(日付)
▼週:Week関数
これも簡単です。Week関数を使います。
(※週のカウントはいくつかのパターンを設定できます。詳しくはヘルプ)
例)Month( '2021/1/1' ) &'週' は、1週 を返します
Week(日付) &'週'
▼年週:Year関数とWeek関数
年と週を&で連結しました。
Year(日付) &'年'& Week(日付) &'週'
▼曜日:Weekday関数
Weekday関数を使います。
(※曜日に相当する 0 から 6 までの数値を返します)
例)Weekday( '2021/1/1' ) は、金 (標準書式のSET)を返します
Weekday(日付)
ここからは、単純な関数だけでは実現できない少し複雑な「年度」や「四半期」です。
▼年度(4月はじまり):Year関数とAddMonths関数
AddMonths関数を使って、日付から3ヶ月を引き算して年度とします。
例)AddMonths( '2020/4/1' , -3 ) は、2020/1/1 を返します
例)AddMonths( '2021/3/31' , -3 ) は、2020/12/31 を返します
ということは、
2020/4/1~2021/3/31 は 2020/1/1~2020/12/31となるので、ここからYear関数で年を取得すれば「年度」となります。
例)Year(AddMonths( '2021/3/31' , -3 )) &'年度' は、2020年度 を返します
Year(AddMonths(日付 , -3 )) &'年度'
ちなみに、引数を変えることで年度の開始月は応用できます。
例)AddMonths( '2021/3/31' , -1 ) は、2021/2/28 を返します
▼四半期(4月はじまり):いろいろなものを組み合わせ
四半期は思いのほか工夫が必要でした。
例)AddMonths( '2020/4/1' , -3 ) は、2020/1/1 を返します
例)Num(Month( '2020/1/1' )) は、1 を返します。3で割ると0.333‥、切り上げたら 1
例)Num(Month( '2020/4/1' )) は、4 を返します。4で割ると1.333‥、切り上げたら 2
例)Ceil ( 1.333 ) は、2 を返します
'Q'& Ceil(Num(Month(AddMonths( 日付 ,-3)))/3)
▼半期(4月はじまり):四半期を条件分岐
半期は四半期を利用してIf文でやってみました。他にもやり方はあるかもしれません。
四半期の値が 3 よりも小さい場合は「上期」、それ以外は「下期」としました。
If(Ceil(Num(Month(AddMonths([日付],-3)))/3)<3,'上期','下期')
▼年度四半期(4月はじまり)
年度と四半期を連結して作成しました。
Year(AddMonths( 日付 ,-3))&'年Q'& Ceil(Num(Month(AddMonths( 日付 ,-3)))/3)
例)Year(AddMonths('2021/4/1',-3))&'年Q'& Ceil(Num(Month(AddMonths('2021/4/1',-3)))/3) は、2021年Q1 を返します
▼年度半期(4月はじまり)
年度と半期を連結して作成しました。
Year(AddMonths(日付 ,-3))&'年'&If(Ceil(Num(Month(AddMonths(日付 ,-3)))/3)<3,'上期','下期')
★時系列の基本セット
時系列の基本セットを生成するロードスクリプトのサンプルをメモしておきます。こうやって並べて記載するとよく分かりませんが、コピペして修正しながら使えると思います。
日付,
year([日付])&'年' as 年,
Month([日付]) as 月,
Week([日付])&'週' as 週,
WeekDay([日付]) as 曜日,
Year([日付])&'年'&Month([日付]) as 年月,
Year([日付])&'年'&Week([日付])&'週' as 年週,
Year(AddMonths([日付],-3))&'年度' as 年度,
'Q'& Ceil(Num(Month(AddMonths([日付],-3)))/3) as 四半期,
QuarterName(日付,0,4) as 四半期名,
If(Ceil(Mid(AddMonths([日付],-3),6,2)/3)<3,'上期','下期') as 半期,
Year(AddMonths([日付],-3))&'年Q'& Ceil(Num(Month(AddMonths([日付],-3)))/3) as 年度四半期,
Year(AddMonths([日付],-3))&'年'&If(Ceil(Num(Month(AddMonths([日付],-3)))/3)<3,'上期','下期') as 年度半期
参考イメージ)[日付]を元にして下図のような項目が生成されます。
▼おまけ:その他の方法
四半期(4月はじまり):Quartername関数
「4月-6月 2021」というような表記でよければ、Quatername関数が使えます。
例)Quatername('2021/4/1' ,0,4) は、4月‐6月2021 を返します
2つめの引数 4 が年度の開始月を指定しています
実はQlik Senseは、データマネージャを使用して日付データを取り込んだ際にに同じようなことを自動的にやってくれています。(参考:Qlik Space「年・四半期・月などの日付項目の自動生成」)
ただ、生成される項目名が英語だったりするので、なかなか馴染めなかったりします。今回の記事も四半期などはQlik Senseが自動生成する数式を参考に確認しました。
Qlik Senseが自動生成してくれる日付項目には、まだ他にも様々な項目があるのでこちらも別の機会に日本仕様にしてみようと思います。
おわり
Comments