Power BIでDAXの森でさまよい続けてる方への、1つの解決法。
この記事は、Microsoft Power BI Advent Calendar 2020の14日目の記事となります。
この文章の作者はPower BI歴が浅いため、用語の使い方が統一されていなかったり、手順等に間違いがあった場合、都度訂正させていただきますので、よろしくお願いします。
DAXとM式(Power Query)の違い
M式は、ETL言語です。ソースからデータを抽出(Extract)し、変換(Transform)し、格納(Load)する作業を行う、バッチ処理です。
一方DAXは、M式(Power Query)で格納されたデータを元に、メモリ上で条件に応じてデータを分析します。条件が変わるたびに再計算されるため、データが多いほど読み込みは遅くなります。大きなデータを扱う場合、事前にテーブルのフィルタリングをせずに全てDAXで処理するのは間違いです。膨大なメモリを使用し、パーフォーマンスを大きく犠牲にすることになります。
また、M式にも様々な機能があるので、それを使えば複雑なDAXを書かなくて済むかもしれません。まず、データの整理をきちんと行う力がないと、複雑な表現は無理。ということで、M式でできる限りのとこまでやってみるという記事です。
(see https://docs.microsoft.com/en-us/power-bi/guidance/power-bi-optimization)
ソースを取り込む
まず最初に、Power BI Desktopのインストールを行ってください。(https://aka.ms/pbidesktopstore)
それでは、データの取り込みを行ってみましょう。
使用するデータは、エクセル、CSVなど、ローカルのファイルでもいいのですが、毎日自動で更新されるオンラインデータの方が面白みがあります。2020年、皆の関心となった新型コロナウイルス(COVID-19)のデータを、WHOのホームページから取得しましょう。
目的のデータの取得場所は、https://covid19.who.int/ の右下にあります。
「Download Map Data」のところを右クリックし、リンクのコピーを行います。
そして、Power BI Desktopを立ち上げた後、データを取得します。
CSVの読み込み確認が出てきますので、「データの変換」を押します。
Country_code, WHO_region, Cumulative_cases, Cumulative_deathsは、削除して、左上の閉じて適用を押します。
少し待つと、右側のフィールド欄に以下のテーブルが表示されます。
グラフにしてみる
まずは、簡単にグラフを作ってみましょう。
視覚化から「折れ線グラフ」を選ぶと、キャンバスに折れ線グラフを表示する枠ができます。
フィールドで、Date_reportedとNew_casesにチェックを入れてみましょう。
表示は、以下のようになり、折れ線になってくれません。
視覚化の少し下に軸を設定するところで、Date_reportedの右の×の左にある✓を押すと、以下のメニューが出ますので、Date_reportedを選択します。私が一番最初に躓いたところです。Power BIで日付を扱うときには、注意しましょう。
とりあえず、こんな感じでグラフの位置、サイズを調整しときます。
表示の調整
このままだと、見栄えが良くないので、表示の調整をしていきます。
調整は、グラフを選択して、先ほどの「軸」と表示されていた上にある、ローラー刷子の形をした書式をクリックします。以下のような項目が出てきますので、それぞれを開いて変更していきます。
まず、Y軸の単位をの表示単位が「自動」になっているので、「なし」にします。
軸の値が0.3Mから300000になります。300,000のように表示させるには、右のフィールドで「New_cases」を選択した状態で、メニューから「書式」「列ツール」と選んで、カンマをクリックします。
Y軸のタイトル軸名を直したい場合は、フィールドのところで、「New_cases」を右クリックして「名前の変更」を選び「新規感染者数」とします。X軸は見れば日付とわかるので、タイトルはオフにして、グリッド線はオンにしておきましょうか。
後は、タイトルのタイトルテキストを変更し、とりあえずの体裁が出来上がりました。
最新の感染者数を載せたい
人に見せるには、ページのタイトルをつけたいですよね。メニューの「挿入」から「テキストボックス」を選択して作成します。
このグラフの直近のデータは、何日で、どのくらいの人数か表示させたくなりますね。
ここは、簡単なDAXでテーブルを作ります。
メニューの「モデリング」から「新しいテーブル」を選択し、
Latest =
FILTER(
'WHO-COVID-19-global-data',
'WHO-COVID-19-global-data'[Date_reported] =
MAX('WHO-COVID-19-global-data'[Date_reported])
)
のように入力します。入力欄の右側の✓を押すと、入力の枠が広がります。改行は、Shift + ENTERを押します。これで、Latestテーブルに日付が最も大きい行が取り出せました。左のアイコンでデータの表示に切り替えて確認します。
また、レポートの表示に切り替え、今度は、視覚化のアイコンの中化から「カード」を選択します。2つ作って、程よく配置したら、フィールドのLatestテーブルからDate_reportedと新規感染者数をそれぞれのカードで選択します。
表示形式を整えます。
まず、Date_reportedを選んで、書式を選択します。
次にフィールドの新規感染者数を選んで、コンマをクリMから始めよう ~Power BIでM式を使う~ #1ックします。
カードを選択し、ローラー刷毛の書式から、データラベルのテキストサイズ、表示単位を変え、カテゴリをオフに、タイトルをオンにしてタイトルテキストを入力します。
これで、そこそこの見栄えになったと思います。
でも、これじゃ、いまいちな感じですよね。
次は、このグラフをロウソク足にしてみたいと思います。
作成したpbixファイルは、githubに登録してあります。
今回わかったこと
1. MはETL言語である
2. Power BIはWeb上にあるデータを取得できる
3. グラフの種類は視覚化のアイコンで選ぶ
4. 日付をX軸に設定するにはひと手間必要