ラグビーワールドカップ2019のPower BI レポートを作った際に起こったトラブルと得た知見

この記事は[Microsoft Power BI Advent Calendar 2019](https://qiita.com/advent-calendar/2019/powerbi)に参加しています。

[ラグビーワールドカップ2019日本大会公式サイト](https://www.rugbyworldcup.com/)を利用したPower BI レポート[RWC2019BI](http://bit.ly/rwc2019bi)を作成した際に起こったトラブルや知見のお話です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313502/dac3ac6c-c070-c8e7-6b49-b4ce3ebe7636.png)


#トラブル1 : データソースのデータが急に変わり、レポートが破綻した
レポートが9割方出来上がり、公開に向けた調整をやってた頃のお話です。
**データの更新を行うと、突如として今まで公式サイトから取得出来てた日本語データの大半が英語になりました。**

例えばこの場合なら`アルゼンチン`が`Argentina`といった具合です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313502/931f8c12-9303-d0c8-e2ff-ac02fc9cb040.png)

その被害は甚大です。

日本語データを前提として設計してたスライサーは**全滅**。
日本語データをフィルター式として利用していたDAX式も**全滅**。
日本語データで関連付けてたリレーションも**全て破綻**しました。

例えば試合会場のデータはこのようになりました。

Before
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313502/d0dd0891-d97e-04d4-88c8-eb315026d7e8.png)

After
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313502/b16f4def-b1b2-3bbd-12d8-adb94c2a84f8.png)

Afterは復旧後の画像なので列名などが異なってますが、当時は`会場`、`開催地`、`所在地`の全てが英語になってしまったのです。

##何があったか
正確な原因は不明ですが、恐らく公式サイトの設定が変わったのだと思います。
以前はPower Queryで`https://www.rugbyworldcup.com/matches?lang=ja`を指定すれば日本語サイトを読み出せました。
しかし、この時を境に`https://www.rugbyworldcup.com/matches?lang=ja`であってもPower Queryでは英語サイトを読み出すようになってしまったのです。

##対策
###他所のデータをデータソースとする場合、変更は必ずあるものと覚悟しておく
自分が管理していないデータに何があっても文句は言えません。

###データが急に変更されても対応しやすいデータ構造やステップを組もう
Power Queryで処理をなるべくワンラインに収めたり、既存の処理を弄って複雑な事をやらせたりもできます。
しかしPower Query Ninja なら兎も角、生兵法でやっても面倒を見切れなくなるだけなので、**自身のレベルに合わせたステップ構築がお勧めです。**

Power Queryデフォルトのステップ名はある程度分かりやすい名前ですが、**重要なステップに自分で分かりやすい名前を付けておくと修正の際に迅速な作業を行えます。**

また「ステップのここからここまでで何を処理する」という風に処理するテーマ毎にステップを連ねてあげると、後付けでステップを差し込みやすいです。

今回の例であれば、`[更新トラブル対応]`と付いたステップが対応を行った際に追加したものです。
もし一過性のトラブルであれば、`[更新トラブル対応]`と付いたステップを消すだけで元通りになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313502/1567011d-c55c-d77e-71b5-5a8a8d192e6a.png)


###データソースの母国語(大体は英語)と日本語の対訳テーブルを用意しておこう
国外の組織のデータをソースとする場合、例え日本語サイトが提供されていたとしても正は相手の母国語のデータです。
**日本語サイトの日本語は、翻訳されて出て来た処理の結果でしかありません。**

もし日本語訳が変わると困ったり、今回のようなトラブル対応を見越すのであれば、相手の母国語のデータと日本語との対訳テーブルを用意するのが便利です。

母国語サイトと日本語サイトのデザインが共通なら作り方は簡単で、Power Queryを使い同じ処理で母国語サイトと日本語サイトのデータを取得し、マージした上でExcelなどの静的データにします。
サイトデザインが共通の場合、データの並び順も一緒の場合が多いはずなので難易度は低いと思います。

#トラブル2 : Power BI Desktop と Power BI Service ではビジュアルの挙動が異なる
レポートが無事完成し、Power BI Serviceで公開した後のお話です。
これは現在の物ですが、[RWC2019BI](http://bit.ly/rwc2019bi)のトップページには`マップ`ビジュアルが使われています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313502/05c67b28-7886-edb3-9627-7d05d36895df.png)

公開した直後、Power BI Serviceのレポートでそこを見た時に違和感を感じました。
**「あれ？ロシアが無いぞ？」**
##何があったか
以下の国名を標準の`マップ`ビジュアルで`場所`フィールドに追加した場合の挙動を見てみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313502/80c88bf2-af8f-9b8d-d428-5de9540cc065.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313502/921bfbce-b774-b731-f0bc-3bcc80338de1.png)

データカテゴリは`場所`を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313502/df546f2b-5b58-058e-7a11-a6685b3200fd.png)

これが同じ`マップ`ビジュアルをPower BI DesktopとPower BI Serviceで表示した結果です。

Power BI Desktop
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313502/0c42dbd4-e038-a73d-f36e-8ca67a77b77a.png)

Power BI Service
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313502/a2135d3e-2a42-5b96-cae5-4de29ebd0b58.png)

見てわかる通り、異常な点が幾つかあります。
Power BI Desktopではジョージア(旧名グルジア)がアメリカ合衆国ジョージア州にマッピングされています。

Power BI Serviceではそれに加え、ロシアが[アメリカニューヨーク州のロシア](https://binged.it/2qQA7Kq)にマッピングされていたり、イギリス連合王国の大半がアメリカ合衆国国内に存在してます。

**なんとPower BI DesktopとPower BI Serviceで、`マップ`ビジュアルのマッピングアルゴリズムが異なるのです。**

##対策
###必ず発行したレポートを確認しながら作ろう
先ほど見たように、Power BIはPower BI DesktopとPower BI Serviceでビジュアルの挙動が異なる事が多々あります。
またデザインにおいてもこれは同様で、Power BI Desktopで文字サイズを調整してスクロールバーを粛清しても、Power BI Serviceではサイズ感が異なりスクロールバーが復活する事も多いです。

**細かい調整をする時は、最終成果物であるPower BI Serviceに発行したレポートを見ながら調整しましょう。**
さもなくば2度手間が待っています。

###正確な表現が必要な物は機械による自動判定を極力避け、数値で指定しよう
`マップ`ビジュアルの`場所`フィールドのように、システムがデータを自動で判定してよしなにしてくれる機能は非常に便利です。
しかし、それは裏を返せば**システムの判定に人間が介在出来ない**という事です。

今回の例であれば、Power BI Desktopならジョージアをグルジアに変更するだけで`マップ`ビジュアルは期待した結果を出してくれます。
しかしPower BI DesktopとPower BI Serviceではそもそもマッピングアルゴリズムが異なるため、このような対策は無意味です。

**この手のトラブルを避けるためには判断する余地のないデータを利用するのが一番**で、今回の例であれば緯度経度でマップ上を絶対値で指定可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313502/c8c3e644-a267-6ecc-cf61-16c3bf705a9a.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313502/abd3841c-e8a2-1334-7df2-a07839ea2d65.png)

#まとめ
- **他所のデータを使う時は急な変更があっても泣かない**
    - 我々は使わせて頂いてるだけです
- **Power BIはSaaSである事を常に意識しよう**
    - ローカルとクラウドでは挙動が異なるのは当然と考えましょう
- **自動で判断させても良いデータなのか、正確性を担保する必要があるデータなのか**
    - マップなど、システムが自動で判断する機能を持ったビジュアルを業務で利用する際は必ず考慮してください

所用で投稿が遅れました…(´・ω・｀)
反省

#謝辞
このBIレポートを作りにあたり、某室長から様々なフィードバックと**御馳走**と激しい指示がありましたが、無事乗り切れました。
最後のデータ検証にも付き合っていただいて、トラブル1の対処でも非常に助かりました。

現地の試合会場までレポートを持ち込んでくれたり、[ブログ](https://www.pbc.co.jp/blog/microsoft-ignite-the-tour-tokyo-how-to-describe-our-promissing-future/)で取り上げてくれたり、感謝の念に堪えません。

![79331346_1256996821154050_9174627486644830208_n.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313502/5316d4c1-4c61-9e01-e160-c49bbc894ad5.png)

![79413150_507236000000709_8435105951601655808_n.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313502/713076b1-dd47-8e44-94f7-46aa39d65c36.png)

因みに私はDefense Coachです(/・ω・)/ｶﾞﾝﾊﾞｯﾀ

![78919683_598089117617250_4379335425949433856_n.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313502/df7a6773-193e-4aeb-323a-e7011303e7c0.png)

ラグビーが好きな会社役員の方も多いですし、こういうところの方々にも見てもらってPower BIが更に広まってくれるとありがたいですねー。

![79794179_1319279308244246_3304354057207939072_n.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313502/36766a84-7e1b-dc73-9512-10b22436bb58.png)