【Power BI】同じ折れ線グラフ上で前年度比較をする


集計じゃなく、前年度比較・前月比較を出したいんだ

折れ線グラフで前年比較したいときってありますよね。
去年の傾向とどう違うのかしら?ていうのを、重ねて表示したい。
だってせっかくPowerBI使っているんだもの。
グラフを二つ別々に出すなんてスマートじゃないですわ。

でも、調べてみても、なかなか出てこない。
メジャーを使って集計するやり方はわかったよ。
PreviousYearとか、DateADDとか、
僕がやりたいのは集計しないやり方なんだ。
10分おきの細かいデータを、カテゴリとか、センターとか、いろんなフィルタ使える状態で見たいんだ。


▲弊社で独自分析しているコミュニティチャンネルの視聴率データ。今年度と前年度を重ねて出したい。何ならヒント機能で今年・去年でそれぞれ何の番組やっていたかマウスオーバーするだけでわかるようにしたい。

そうだ、列をつくろう

はい、スマートじゃないですね。
だってそれしか思いつかないんですもの。
例えば2020年8月7日23:50の視聴率データがあったら、2019年8月7日の視聴率もデータで持ってしまおうというもの。

でも、こうしておけば、重ねて表示することもできます。
今回つかうDAX関数はこちら

前年度時刻 = CONVERT(EDATE('テーブル名'[時間],-12)&" "&TIMEVALUE('テーブル名'[時間]),DATETIME)
前年度データ = LOOKUPVALUE('テーブル名'[対象データのカラム名],
                'テーブル名'[条件列のカラム名],'テーブル名'[条件列のカラム名],
                'テーブル名'[時間],'テーブル名'[前年度時刻],
              0)

あとは、グラフの「値」「第2の値」に今年度データと前年度データを読み込ませればOKです。

解説

前年度時刻の追加

前年度時刻 = CONVERT(EDATE('テーブル名'[時間],-12)&" "&TIMEVALUE('テーブル名'[時間]),DATETIME)

列を追加して強引にデータを持ってしまおうというのは先に述べた通り。
前年度時刻を算出するために、EDATE関数を使って時間を12か月分さかのぼります。
ただし、EDATE関数はDATE型を返すので、TIME部分が抜け落ちてしまいます。
そのため、TIMEVALUEで時間部分を抜き出して、&でつないでやっています。
このままだと文字列型になっているので、最後にCONVERTでDATETIME型に変換しています。
(じぶんは日時に重複あるデータを使ったので怒られましたが、日時がユニークな方はもしかしたらDATEADD関数とかでいけるかも?)
ちなみに、前月比較したいときは、EDATEの二つ目の引数の-12ってなっているところが月なので、-1に変えてやればいけます。

前年度データ列の追加

前年度データ = LOOKUPVALUE('テーブル名'[対象データのカラム名],
                'テーブル名'[条件列のカラム名],検索条件,
                'テーブル名'[時間],'テーブル名'[前年度時刻],
              0)

LOOKUPVALUE関数は、検索条件に一致するデータを探してきてくれます。
最初に対象データを指定、カンマで区切って、次に条件列のカラム名、検索条件を書きます(検索条件は複数OK)。
今回じぶんは時刻だけじゃなく、ほかのデータでも条件つけたのでこう書きましたけど、条件が時刻だけという方は2行目は不要です。
なお、時刻以外条件を変化させないときは(その行と同じ条件で時刻だけ前年度にしたデータを持ってきたい場合)、二行目を

'テーブル名'[条件列のカラム名],'テーブル名'[条件列のカラム名],

と変えてやればうまくいきます。

毎回言っていますが、ヒント機能は楽しいですね。
とりあえずマウスオーバーしたときに前年度と今年度のデータを出せるようにしてみましたが、本当はもう少し凝りたいところです。
それでは素敵なPowerBIライフを!