[Power BI] マトリックスビジュアルでヒートマップを作成する方法と解説

ブログのアイキャッチ。マトリックスビジュアルでヒートマップを作成する方法と解説

このページでは、Power BIのデフォルトのマトリックスビジュアルを使用してヒートマップを作成する方法を紹介します。特に取扱うデータは数値データとして
ヒートマップの範囲に応じたテーブルを作成し、表示するためのメジャーを準備します。
使用する関数:SELECTCOLUMNS、GENERATESERIES、CROSSJOIN、CEILINGなど…

目次

ヒートマップとは?

ヒートマップ(Heatmap)は、データを色で視覚的に表現するグラフの一種です。主に数値データを色の濃淡や明暗で表現し、データのパターンや傾向を直感的に把握できるようにします。

ヒートマップの例

具体的には、ヒートマップは行と列で構成された格子状のレイアウトに、各セルに対応する数値が割り当てられ、その値に応じて色が付けられます。一般的に、値が高い部分は濃い色、値が低い部分は薄い色で示されることが多いです。色の違いを通じて、データの分布や偏り、特定の領域における数値の変動を一目で確認できます。

2つの数値データを表示する際には、一般的に散布図などを使用することが多いですが、データの疎密や分布の偏りを数値的に表示するのは難しい場合も。そういった場合はデータをヒートマップ形式で表示すると良いかもしれません。

サンプルデータを散布図で表示した図。

Power BIでヒートマップを作成手順

カスタムビジュアルなどを使用すれば簡単に作成することができるかもしれませんが、企業によっては使用に制限がある可能性が高いです。今回はデフォルトのマトリックスビジュアルとDAX式を使用して作成してみます。

使用するデータ

今回はサンプルデータとして、250個の適当な数値データを使用してみます。
それぞれX,Yとし、テーブル名はDummy_dataとします。

サンプルデータの分布
サンプルデータ

ヒートマップの作成手順

作成するため準備を行う内容を下記に記載します。それぞれ後ほど詳細を説明していきます。

  1. Dummy_dataとは別で、ヒートマップを作成するマトリックスビジュアルで使用するためのデータを格納するテーブルを作成します。このテーブルでヒートマップの表示範囲を指定します。今回はHeatmap_tableと名付けます
  2. Dummy_dataHeatmap_tableのリレーションシッップを作成するためのKey列を作成します。Key列はそれぞれに作成します。
  3. マトリックスビジュアルので使用するメジャーを作成します。今回はデータのカウントとします。
  4. マトリックスビジュアルの書式設定を行い、カウント数に応じて色を変更します。

Power BIでヒートマップを作成する方法

実際にDummy_dataを使用してヒートマップを作成してみます。

ヒートマップ用のテーブルを作成する

レポートビューのモデリングタブから、新しいテーブルを選択し、DAX式を使用して新しいテーブルを作成します。テーブル名をHeatmap_tableとし、ヒートマップで表示する範囲のデータセットとDummy_dataをリレーションシップで接続するためのkey列を作成します。

新しいテーブルの場所
Heatmap_tableの作成画面と結果。

Heatmap_table = 
VAR limit_X =100
VAR limit_Y =160
VAR Unit_X =10 
VAR Unit_Y =10 

VAR _X = SELECTCOLUMNS(GENERATESERIES(0,limit_X,Unit_X),"Heatmap_X",[Value])
VAR _Y = SELECTCOLUMNS(GENERATESERIES(0,limit_Y,Unit_Y),"Heatmap_Y",[Value])

RETURN
ADDCOLUMNS(
    CROSSJOIN(_X,_Y),
    "Key",CONVERT(ROUND([Heatmap_X],2),STRING) & "-" & CONVERT(ROUND([Heatmap_Y],2),STRING)
)

上記のDAX式で下記の内容を計算しています。

  • limit_X、limit_Yは、ヒートマップで表示するための上限値。今回、Xは100、Yは160まで。
  • Unit_X、Unit_Yはヒートマップ内のセルの区切り値。(今回は10刻み)
  • GENERATESERIES関数を使用して0から区切り値ごとに上限値まで加算する列を作成。
  • GENERATESERIES関数の戻り値は [Value]で固定なので、SELECTCOLUMNS関数を使用して列名を新たに命名しています。
  • X,Yそれぞれで作成した列のデカルト積をCROSSJOIN関数で作成。
  • key列としてそれぞれの値の組み合わせを作成。

ポイントはGENERATESERIES関数とSELECTCOLUMNS関数を組み合わせて、それぞれ列名を指定し、 CROSSJOIN関数でデカルト積を作成していることです。

作成したHeatmap_tableとマトリックスビジュアルを組み合わせると、下記のような空のマトリックスを作成できます。

リレーションシップ用の列を作成する

Dummy_dataHeatmap_tableのリレーションシッップを作成するためのKey列を作成します。Heatmap_tableはすでに作成済みなので、Dummy_dataに対して、モデリングタブから新しい列を作成します。リレーションシップ用の例はkeyとしています。

key列の作成画面と結果。
key = 
VAR MAX_X = MAX(Heatmap_table[Heatmap_X])
VAR MAX_X_2 = MAXX(FILTER(Heatmap_table,Heatmap_table[Heatmap_X]<MAX_X),Heatmap_table[Heatmap_X])
VAR _UNIT_X =MAX_X - MAX_X_2

VAR MAX_Y = MAX(Heatmap_table[Heatmap_Y])
VAR MAX_Y_2 = MAXX(FILTER(Heatmap_table,Heatmap_table[Heatmap_Y]<MAX_Y),Heatmap_table[Heatmap_Y])
VAR _UNIT_Y =MAX_Y - MAX_Y_2

VAR key_X = CEILING([X],_UNIT_X)
VAR key_Y = CEILING([Y],_UNIT_Y)

RETURN
CONVERT(key_X,STRING) & "-" & CONVERT(key_Y,STRING)

上記のDAX式で下記の内容を計算しています。

  • Heatmap_tableで指定したセルの区切り値(Unit_X、Unit_Y)を計算するために、Heatmap_tableの最大値と2番目に大きい値の差を計算しています。計算結果は_UNIT_X、_UNIT_Yに保存しています。
  • CEILING関数を使用して、各X、Yのデータを計算した_UNIT_X、_UNIT_Yを基準とした倍数にします。
  • 計算した倍数を組み合わせてkey列を作成します。

ポイントはこのメジャー内ですべて計算していることです。そのため、Heatmap_tableのメジャー内の変数(ヒートマップの表示範囲や区切り値)に応じてkeyを作成しいることです。ヒートマップの表示範囲などを変更したい場合は、Heatmap_tableの変数だけ変えればよい構成となっています。

作成したkey例を使用してリレーションシップを作成します。

リレーションシップの関係

ヒートマップ表示用のメジャーと書式設定

今回はシンプルにデータのカウントを行うメジャーを作成します。

count = IF(ISBLANK(COUNT(Dummy_data[X])),0,COUNT(Dummy_data[X]))

データがないものは通常空白が返されるので、明示的に0を返すDAX式としました。作成したメジャーをマトリックスビジュアルの値として使用します。

マトリックスビジュアルにメジャーを値として使用する。

書式設定を使用して、マトリックスビジュアルをヒートマップの様に表示します。
書式セル要素から設定したメジャーの背景色を条件付き書式として背景色の設定を行います。

書式設定を行い、ヒートマップの様に表示を行う。

これで、マトリックスビジュアルを使用したヒートマップを作成することができました。(フィルターで空白データは除外しています。)

データの散布図とヒートマップ。

今回使用したサンプルデータでは、Xが40~50の範囲、Yが80~90の範囲であるデータは26個あり、各範囲の組み合わせの中で最も多いことが一目でわかるようになりました。

まとめ

  • ヒートマップを作成するためのテーブルを新たに作成。
  • ヒートマップ用テーブルとデータのテーブルをリレーションシップするためのkey列を作成。
  • デフォルトのマトリックスビジュアルの条件付き書式設定を活用してヒートマップを表現。
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

技術系職社会人:業務でPowerBI を活用/データ分析/インドア派/趣味:ゲーム、カプセルトイ収集/[III]Mosnterが好き/勉強中:Blender/日々習得した内容をアウトプットしていきます!

目次