【Power BI】データフローとSalesforceであれしよう！

この記事は[Microsoft Power BI Advent Calendar 2020](https://qiita.com/advent-calendar/2020/powerbi)に参加しています。
なんと今年で3年連続の参加です！ウェーイ！

この記事は、Power BIとSalesforceを使っていて、もうちょっと効率化できないものかな・・・と思っているあなたにお届けします！（いるかな・・・？）

##レポートは一か所で全部見られた方がいいに決まってる！

弊社事情なのですが、CRMはSalesforceを使用しております。
そしてわたくし、大好物です。認定アドミニストレータの資格も持っております。エッヘン。
ただ、残念ながらSalesforceのレポート・ダッシュボード機能にはあまり満足していません。
ユーザーによってRLSがデフォルトで実現できる点は便利なんですけどね。
それに加えて、やっぱり、こっちのデータはPower BIで、こっちのデータはSalesforceでとあちこち移動しなくちゃならないのは、どうかと思うんですよね。
レポートは一か所で全部見られた方がいいに決まってる！

というわけで、うちの部署では、どのレポートもPower BIで見られるようにしています。

##弊社の事情（レア？）
弊社のデータ周りの事情なのですが、↓こんな感じになっています。
（同じような事情の方がいらっしゃれば、お役に立てるかも・・・？・・・いない？？）

![Qiita201215-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221359/49cfd56e-3958-99a5-cbaf-a1cfc1e630be.png)

①出荷実績のデータは、ERPから毎晩csvファイルが吐き出され、本社のサーバーにあるDBに取り込まれる。

②そのDBのデータは、そのサーバー内にあるゲートウェイ経由でPower BIと接続。
ゲートウェイの権限はITにしかない。つまり、Poewr BI Serviceに発行した際、データセットの設定者がITになる。

③SalesforceのデータをPower BIに取り込むときは、ゲートウェイ不要だが、データセットの設定者は自分。

④そのため、出荷実績データとSalesforceのデータを同一レポートでデータソースとすることができない(´;ω;｀)

ただ、両方のデータを一緒にして分析したいことありますよね、営業の訪問と実績の関連性とか。
その場合には、本社サーバー内にあるその他データのフォルダにファイルを突っ込めば、同じゲートウェイを経由できるのでデータソースとして使用することができる。

この実現のために、わたしはSalesforceから毎日毎日レポートをDLして、フォルダに格納するという作業をボチボチとしなければならなかったわけです・・・
**今までは！！**

##データフローすればいいじゃん！
何故これを思いつかずに、毎日チクチク手動の作業をしたり、たまに忘れて上司に怒られたりしていたのか・・・

データフローで、レポートではなく直接Salesforceのオブジェクトに接続して、データを取り込んで、スケジュール更新して、そのデータをレポートで使用すれば、毎日チクチクしなくていいじゃないですか！

何故レポートではダメか、それはデータが2000行以上になるレポートでも、**2000行までしかPower BIで取り込めないという制限**があるからです。
これがなくなれば本当にハッピーなのですが、なんででしょうかね？Salesforceさん・・・。

##やってみよう！
①ワークスペース内の↓ココの「＋新規」メニューから、「データフロー」を選択しましょう。
![Qiita201215-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221359/de8d9071-882a-b838-e612-a9c46a5c4a33.png)

②「新しいエンティティの追加」を選択します。
![Qiita201215-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221359/6caa2f90-9ccc-927a-319c-09b162ff8d30.png)

③データソースで、「Salesforceオブジェクト」を選択しましょう。
![Qiita201215-4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221359/214f26e6-38bc-c98e-c6d8-982538dee76d.png)

④接続設定は、アカウントを持っている組織が1つなら「実稼働」でOK。複数アカウントを持っている場合には、「カスタム」にしURLを入れてあげましょう。
![Qiita201215-5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221359/154b09ee-b599-a328-dd61-ccff734cd6e3.png)

URLは、Classicの場合には、フツウにコレでいいのですが、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221359/f1d59d21-4967-3e28-f7cb-d4ee12212edf.png)

LEXの場合はコレじゃなくて、
![Qiita201215-7.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221359/ce6bd256-730f-0c33-12d1-fa24c1b28bd3.png)

コッチです。
![Qiita201215-8.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221359/499c59ad-4aa4-891c-cd29-8e55cd20e390.png)

⑥「次へ」をクリックすると、オブジェクトを選択する画面になりますので、データフローに取り込みたいオブジェクトを選択しましょう。

ここからはPower BI DesktopのPower Queryの画面とほぼ一緒です。
ある程度データフロー側でモデリングしてもよいかと思いますし、Power BI Desktop側でやってもよいかと思います。

⑦モデリングが済んだら、保存して更新します。
※保存しただけだと、エンティティにデータが読み込まれていませんので、
必ず更新が必要です。

※スケジュール更新も設定しておきましょう。
設定は、データセットのスケジュール更新と同じです。

![Qiita201215-10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221359/afa2c7fb-b352-4056-e5ab-eaa299ebd67e.png)


⑧これでPower BI Desktopで、データソースとして読み込むだけです！

⑨弊社事情のように、データセット設定者問題があるレポートでは、レポートをServiceに発行した後、
データセットの設定で、データセットの設定者に、データソースの資格情報の編集をしてもらう必要があるかと思います。
多分、ここ↓の部分に×がついたデータソースが表示されていると思うので、そこをクリックして
資格情報を更新してもらいましょう。
![Qiita201215-9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221359/1cec216c-1052-739f-9e6d-a1721bcf0ffb.png)

⑩これで完了！



##SalesforceオブジェクトをPower BIでデータソースとして使用する際のポイント
初めてSalesforceオブジェクトをPower BIでデータソースとして読み込むと、「うげっ！」というくらいフィールドが出現すると思います。

通常使用している項目とともに、作成者・作成日・最終更新者・最終更新日などのシステム項目も全て読み込まれるからです。
ページレイアウト上に表示されていない項目も全て読み込まれます。（もちろんアカウントのアクセス権限でアクセス可能な項目だけですが）

弊社の場合、グローバルで組織を共有しているので、取引先オブジェクトなんか、日本が使用しているのは5項目くらいしかないのですが、100項目以上読み込まれます。

なので、よくPower BIで使用するオブジェクトについては、データフローで使用する項目だけに絞っておくと使い勝手がいいかもしれませんね。

##まとめ（？）
●データフローは、GAされた時から使っていたのですが、「データ置き場」的な感じでしか使っていませんでしたが、今回、データフロー❤Salesforceという思いつきで、毎日の煩わしさが解消！ちょっと（弊社事情的に）使い道は多岐にわたりそうです。
というか、なんで気が付かなかったんだよ・・・って感じです。
既にルーチン化している作業でも、効率化できないかどうか定期的に見直す必要がありますね。

●ただし、例えば、リアルタイムに更新されない（最短で30分に1回更新できるけど、48個設定が必要）とか、Salesforceと同じアクセス権限はデフォルトでは効かない（レポート作成者の権限と同じになるので、必要ならRLSなどの設定が必要）とか、Salesforceのレポート・ダッシュボードと同じ運用にはできないので、その点は考慮が必要ですね。