ジョンズ・ホプキンズ大の新型コロナウイルスのデータをPower BIで可視化してみよう(3/5)


前回の記事(2/5)のまとめ

前回の記事では、Confirmed (感染者数)、Deaths(死亡者数)、Recovered(回復数)の3つのデータを合わせた1つのMasterテーブルを作成するところまで完了しました。

今回の記事(3/5)のゴール

この記事ではさらに4つのテーブル(およびそれを作成するためのクエリ)を作成します

  • 一番最近の日のデータのみを持つLatest テーブルを作る
  • 場所を表すLocation テーブルを作る
  • Confirmed、Deaths、Recoveredなどのステータスを表すStatus テーブルを作る
  • メジャーの定義を一か所で整理できるように_Measureテーブルを作る(メジャーに関しては後述)
  • 可視化した際に役に立つテーブルのリレーションシップを定義する

一番最近の日のデータのみを持つLatest テーブルを作る

ジョンズ・ホプキンズ大のデータは2020年の1月ぐらいからのデータですが、現時点の合計などは直近のデータ(例えば今日は4月14日なので4月13日のデータ)さえあれば得られます。そのためにLatestと名付けたテーブルを作成します。

手順は簡単です

  1. Masterクエリの複製を作りLatestという名前にする
  2. 一番最近の日のデータ以外をフィルターで取り除く

まず複製を作り:

名前を変更した後、Advanced Editorを開いて以下のクエリをコピペします。

let
    Source = Table.Combine({Confirmed, Deaths, Recovered}),
    #"Filtered Rows" = Table.SelectRows(Source, let latest = List.Max(Source[Date]) in each [Date] = latest),
    #"Changed Type" = Table.TransformColumnTypes(#"Filtered Rows",{{"Value", Int64.Type}})
in
    #"Changed Type"

Dateカラムが一番最近の日にみのLatestテーブルを作成しました。

場所を表すLocation テーブルを作る

Latest テーブルを作ったのと全く同じ手順で、Locationという名前のテーブル(クエリ)を作ります。コピペするクエリの内容は以下です。

let
    Source = Table.Combine({Confirmed, Deaths, Recovered}),
    #"Removed Other Columns" = Table.SelectColumns(Source,{"Province/State", "Country/Region"}),
    #"Removed Duplicates" = Table.Distinct(#"Removed Other Columns"),
    #"Added Conditional Column" = Table.AddColumn(#"Removed Duplicates", "LocationKey",
 each 
     if ([#"Province/State"] = "") 
     then [#"Country/Region"] & "-" & [#"Country/Region"]
     else [#"Country/Region"] & "-" & [#"Province/State"]
)
in
    #"Added Conditional Column"

下図のようになっていれば完了です。

ここでは、LocationKeyというカラムが加えられていることに着目してください。実は同様のカラムがMasterテーブルとLatestテーブルでも定義されています。これで、テーブル間に関係を持たせることが出来ます(後述)。

ステータスを表すStatus テーブルを作る

このテーブルは手動で定義します。ホームタブの Enter Data からCreate Tableダイアログを開きます。

直接、値を入力して、テーブルの名前を指定したらOKボタンでダイアログを閉じます。

以下のようになってるはずです。

このStatusテーブルにはカラムがひとつだけありますが名前がデフォルトのColumn1になっているので、ダブルクリックして名前をStatusに変更しましょう。

テーブル名もカラム名もStatusなので、それが気になるなら別の名前にしても構いません。

これで Statusテーブルの作成が完了しました。

_Measureテーブルを作る

後述しますがメジャーはPower BIのもっともパワフルな機能です。メジャー機能が無かったらPower BIという製品はほぼ無価値だと言ってもいいでしょう。

メジャーは、クエリやテーブルに対して横断的に定義できるので、対象になるクエリやテーブルではなく、独立したダミーのテーブルの一部として定義することにします。(対象のクエリの一部として定義しても全く問題ありませんし、むしろその方が整理しやすい場合もあるでしょう。)

ダミーなテーブルなので作成手順は超簡単です。Statusテーブルを作成した要領で「空のテーブル」を作るだけです。

Power Query エディタでの準備は完了

だいたいこのぐらいでPower Query エディタでやることは終わりです。もちろん、通常の開発工程では何度もPower Query エディタと、Power BIデスクトップの間を行ったり来たりすることになりますが、今回はクエリを全部準備していたので、ここでPower Query エディタを終了します。

Power Queryエディタを終了して、Power BIデスクトップに戻るには、ひとつの「儀式みたいな」過程を通過します。ホームのClose & Applyがそれです。

クエリを変更し、その変更内容をPower BIデスクトップで定義した図などに反映させるのがApplyです。それをせずにそっとPower Queryエディタを閉じたい時はCloseのみを選びます。

変更が反映されるのにしばらく時間が係る場合もあるので、下図のようなダイアログが表示されます。

反映された結果、作成したクエリがFieldsタブに表示されればここまでの手順は完了です。

テーブルのリレーションシップを定義する

この作業はPower BIデスクトップで行います。Power Queryエディタではないですから混乱の無きよう。

Power BIデスクトップには3つの作業画面があります。

  • Report
  • Data
  • Model

の3つですが、テーブルの間にリレーションを定義するのは3つ目のModelで行います。

いくつかのテーブルは右方向に配置されていて見えなくなっているかもしれません。スクロールしてマウスでドラッグして見えるところまで持ってきましょう。
今回必要なテーブルは

  • Main
  • Latest
  • Status
  • Location

の4つです。例として以下のような配置にしてみましょう。

すでにテーブル間にリレーション(矢印が付いた線。下図では黄色表示)が定義されている場合はいったん削除してしまいましょう。

次に、これら4つのテーブルに対してリレーションを定義していきます。

具体的には以下のテーブルの組み合わせにリレーションを定義します。

  • MasterテーブルとStatusテーブル
  • LatestStatusテーブル
  • MasterテーブルとLocationテーブル
  • LatestLocationテーブル

MasterテーブルとStatusテーブルにリレーションを定義する

例として、この2つのテーブルに対してリレーションを定義する手順を解説します。

下図で示す番号に従います。

すると新規のリレーションシップが作成されます。

モデルにもリレーションシップを表す線分が現れます。

 残り3つのリレーションを定義する

同じ要領で、残りの3つのリレーションを定義しましょう。

  • LatestStatusテーブル
  • MasterテーブルとLocationテーブル
  • LatestLocationテーブル

LocationテーブルとのリレーションはLocationKeyカラムで関連付けされることに注意。

4つすべてのリレーションを定義しました。

モデルにもリレーションが表示されたら完了です。

4/5に続く

次の記事ではモデルをもとにメジャーを作成していきます。