Mから始めよう #1 ～Power BIでM式を使う～

Power BIでDAXの森でさまよい続けてる方への、1つの解決法。

この記事は、[Microsoft Power BI Advent Calendar 2020](https://qiita.com/advent-calendar/2020/powerbi)の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/ の右下にあります。
![who-covid-19.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/22507b7a-dbf8-1b5e-94c2-ef1a5cd6914c.jpeg)
　「Download Map Data」のところを右クリックし、リンクのコピーを行います。
　そして、Power BI Desktopを立ち上げた後、データを取得します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/75fa9de5-8017-2ec0-88ba-552b0160e443.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/662daca2-c0d2-78bb-454e-dc4a18ef0def.png)
CSVの読み込み確認が出てきますので、「データの変換」を押します。
![powerbi.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/03df4028-2f1e-6545-fcda-e828621deebc.jpeg)
　Country_code, WHO_region, Cumulative_cases, Cumulative_deathsは、削除して、左上の閉じて適用を押します。
![remove.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/70e7b845-bc29-5209-63b2-8ec1ae7d3bac.jpeg)
少し待つと、右側のフィールド欄に以下のテーブルが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/57d172d4-3991-9c9e-7e17-cb0ff397cdae.png)

# グラフにしてみる
　まずは、簡単にグラフを作ってみましょう。
　視覚化から「折れ線グラフ」を選ぶと、キャンバスに折れ線グラフを表示する枠ができます。
![oresen.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/ae85f1d3-f8a5-9603-14e1-9b9378b692bb.jpeg)
フィールドで、Date_reportedとNew_casesにチェックを入れてみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/72a6bb68-fd6b-4381-d6a3-cf025ce31f7b.png)
表示は、以下のようになり、折れ線になってくれません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/1d0776a5-1fed-beae-6a54-dc8649d9599e.png)
視覚化の少し下に軸を設定するところで、Date_reportedの右の×の左にある✓を押すと、以下のメニューが出ますので、Date_reportedを選択します。私が一番最初に躓いたところです。Power BIで日付を扱うときには、注意しましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/93fc7e54-f093-a7ac-3982-15071019c2da.png)
とりあえず、こんな感じでグラフの位置、サイズを調整しときます。
![line.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/1ed3d05b-42e0-3fcc-2ec7-9519421f21e9.jpeg)

# 表示の調整
　このままだと、見栄えが良くないので、表示の調整をしていきます。
　調整は、グラフを選択して、先ほどの「軸」と表示されていた上にある、ローラー刷子の形をした書式をクリックします。以下のような項目が出てきますので、それぞれを開いて変更していきます。
![hake.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/b8d76d6e-4ed1-4703-d07f-5c1335d00a15.jpeg)
まず、Ｙ軸の単位をの表示単位が「自動」になっているので、「なし」にします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/da26f3fc-f3ea-c9bc-a366-c72a467531c1.png)
軸の値が0.3Mから300000になります。300,000のように表示させるには、右のフィールドで「New_cases」を選択した状態で、メニューから「書式」「列ツール」と選んで、カンマをクリックします。
![column.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/6333d19e-74f4-e28b-49e7-8bd79b146bdf.jpeg)
Y軸のタイトル軸名を直したい場合は、フィールドのところで、「New_cases」を右クリックして「名前の変更」を選び「新規感染者数」とします。X軸は見れば日付とわかるので、タイトルはオフにして、グリッド線はオンにしておきましょうか。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/6b375f24-d5f3-81c9-2df7-8aa48ea2e033.png)
後は、タイトルのタイトルテキストを変更し、とりあえずの体裁が出来上がりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/0089574e-b7eb-f6ce-e352-a9839e19fdee.png)

# 最新の感染者数を載せたい
　人に見せるには、ページのタイトルをつけたいですよね。メニューの「挿入」から「テキストボックス」を選択して作成します。
　このグラフの直近のデータは、何日で、どのくらいの人数か表示させたくなりますね。
　ここは、簡単なDAXでテーブルを作ります。
　メニューの「モデリング」から「新しいテーブル」を選択し、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/7784bbf7-ba40-0529-6574-65eece5f0078.png)

```
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テーブルに日付が最も大きい行が取り出せました。左のアイコンでデータの表示に切り替えて確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/c94d9a81-8a15-7a31-25a4-573c7b2ed839.png)
また、レポートの表示に切り替え、今度は、視覚化のアイコンの中化から「カード」を選択します。２つ作って、程よく配置したら、フィールドのLatestテーブルからDate_reportedと新規感染者数をそれぞれのカードで選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/b30de567-5b16-1548-68bf-367bc32f51bc.png)
表示形式を整えます。
まず、Date_reportedを選んで、書式を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/41a04e55-5c73-261b-bbbd-c81e55d9fab2.png)
次にフィールドの新規感染者数を選んで、コンマをクリMから始めよう ～Power BIでM式を使う～ #1ックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/0512ef56-5828-5005-8eb5-a5bd812392d8.png)
カードを選択し、ローラー刷毛の書式から、データラベルのテキストサイズ、表示単位を変え、カテゴリをオフに、タイトルをオンにしてタイトルテキストを入力します。
これで、そこそこの見栄えになったと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/5c6a97b5-bb62-ab0f-c9e2-1bc0a7055df0.png)
でも、これじゃ、いまいちな感じですよね。

次は、このグラフをロウソク足にしてみたいと思います。

作成したpbixファイルは、[github](https://github.com/fukuyori/powerbi-advent-2020)に登録してあります。

# 今回わかったこと

**1. MはETL言語である**
**2. Power BIはWeb上にあるデータを取得できる**
**3. グラフの種類は視覚化のアイコンで選ぶ**
**4. 日付をX軸に設定するにはひと手間必要**

## 続く
- [Mから始めよう #2 ～Power BIでM式を使う～](https://qiita.com/spumoni/private/a35deddd679dea0eaab0)
- [Mから始めよう #3 ～Power BIでM式を使う～ ](https://qiita.com/spumoni/private/9b89555dfd8b550c177f)