複数の項目の数量の変化について時間の推移で追っていく場合、折れ線グラフを利用するの一般的です。一方で、各項目の集計開始日からの経過時間を揃えて推移を比較したい場合はどうすればよいでしょうか。
※起算日(スタート地点)を揃えて変化のスピード等を追いたい。
下の左右のチャートは新型コロナウィルスの感染拡大の状況(2020/5/2現在)について、アメリカ、イタリア、中国、日本の状況を比較しており、同じデータを用いています。左のグラフはX軸が日付、Y軸は感染者累計です。右のグラフはX軸が感染者が10を超えた日を1として現在までの経過日数、Y軸は感染者の累計を10のべき乗(10,100,1000,10000,,,)で表しています。
感染スピードや感染拡大の規模を比較したい場合には、時間軸が揃っており、また、スケールも比較しやすい右のグラフのほうがわかりやすいのではないでしょうか。
Qlik Senseでは、Y軸の"Logスケール"ボタンをチェックすることで簡単に対数スケールに変更可能です。一方で、集計開始日を揃えるにはどのようにすればよいでしょうか。
結論としては、Aggr関数とRank関数を利用して作成することができます。ほかにもやり方はあるのでしょうが、サンプルデータを元にして説明させていただきます。
①はQlik Senseで読み込んだ元のテーブルです。A、B、Cという国があり、なにかの数量が3/1頃から増加しています。数量が増え始めるのは、Aは3/2、Bは3/1、Cは3/4からとそれぞれ開始日が揃っていません。
②は数量が1を超えた日に"1"のフラグを付けました。
if(Sum([数量])>0,1,)
③は現在からの日数を日付の引き算を行って換算しました。
if(Sum([数量])>0,today()-日付,)
④はRank関数を用いて換算日数の順序をひっくり返しました。
Rank(if(Sum([数量])>0,today()-日付,))
こうして、④ではA、B、Cのそれぞれの国で数量が増え始めてからの日数が開始日を起点として把握できるようになりました。
次に、④で計算した経過日数を軸としたい場合はAggr関数を利用します。
④の計算式をAggrで括って軸として利用できるようにすると、下の右のグラフのように経過日数を軸として利用できます。
=Aggr(Rank(If(sum(数量)>0,Today()-日付,)),国,日付)
この考えを適用して、冒頭に掲載したグラフを作成しています。
今回は新型コロナウィルスの感染拡大スピードのグラフを元に考えましたが、医療分野では特定の疾患グループにおける傾向比較等で利用できそうですし、医療以外の他の分野でも利用できるかと思います。
ご参考までに、Qlik Senseのサンプル(qvf)も添付しましたので、ご関心のある方はご確認ください。
また、Aggr関数については以下の解説を参照しました。
〇Qlik SenseのAggrによる高度な集計処理
https://www.qlikspace.net/qlik-sense%e3%81%aeaggr%e3%81%ab%e3%82%88%e3%82%8b%e9%ab%98%e5%ba%a6%e3%81...
〇Aggr関数再入門(Aggr関数の詳細と使用例)
https://qlik-training.ashisuto.co.jp/aggr-function/