前回の記事(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
と名付けたテーブルを作成します。
手順は簡単です
-
Master
クエリの複製を作りLatest
という名前にする - 一番最近の日のデータ以外をフィルターで取り除く
まず複製を作り:
名前を変更した後、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
テーブル -
Latest
とStatus
テーブル -
Master
テーブルとLocation
テーブル -
Latest
とLocation
テーブル
Master
テーブルとStatus
テーブルにリレーションを定義する
例として、この2つのテーブルに対してリレーションを定義する手順を解説します。
下図で示す番号に従います。
すると新規のリレーションシップが作成されます。
モデルにもリレーションシップを表す線分が現れます。
## 残り3つのリレーションを定義する
同じ要領で、残りの3つのリレーションを定義しましょう。
-
Latest
とStatus
テーブル -
Master
テーブルとLocation
テーブル -
Latest
とLocation
テーブル
LocationテーブルとのリレーションはLocationKey
カラムで関連付けされることに注意。
4つすべてのリレーションを定義しました。
モデルにもリレーションが表示されたら完了です。
4/5に続く
次の記事ではモデルをもとにメジャーを作成していきます。