今回は「Power BI 勉強会 @ 東京 #11」のランチセッションで発表するための記事になります!
また、この記事の内容は以下の動画でも提供しています。
4分くらいなので、さくっと見てもらえるかと。
- やりたいこと
- 実現するにあたっての課題
- 実現アプローチ
- CData Power BI Exchagne Connector のインストールと接続設定
- Power BI から Exchange Online に接続
やりたいこと
もともと私自身CRMアプリケーションのインテグレーションをしていた経験もあって、「Office365 / Exchange Online のデータを使って、打ち合わせや会議、予定の情報を分析したい」という話をよく耳にします。
実際Activity分析の材料として予定表は宝の宝庫です。
なぜか? と言えば、いつ、誰が、どこに、何をしにいった? といった情報が基本的に入力されるのはもちろんのこと、社内システムのようにユーザーが入力するための敷居がとにかく低い。基本的なインフラレベルで使っているものになるので、データがちゃんと貯まるんですね。
(※本来であれば、CRMアプリケーションと組み合わせて、顧客に紐づけて活用するのがいいんですけどね。)

というわけで、今回はこの宝の山をPower BI上で取得して分析できるようにしたい! というお話になっています。

実現するにあたっての課題
雰囲気的に簡単にできそうなお題なんですが、ちょっと課題があります。
Power BI にExchange のコネクタがあるんですが、実は「1ユーザー」の情報しか取得できません!

そこで、CData Power BI Exchange Connector を使って、実現する方法を紹介したいと思います。

実現アプローチ
CData Power BI Exchange Connector を使うことは前提になるのですが、それと合わせて理解しておく必要があるものが、Exchange の偽装ユーザーです。
あくまでExhangeのデータ取得には特定のユーザーを割り当てて行いますが、そこに偽装ユーザーのリクエストを挟むことによって、自分以外のスケジュールにもアクセスできるようにします。

そのため、あらかじめ、Exchange 管理画面にて「ApplicationImpersonation」を対象ユーザーに付与しておいてください。

以下のBlogを参考にさせてもらいました。
ただし、偽装ユーザー権限は結構強力の権限なので、使用する際には要注意です。
あと、反映されるまで、少し時間がかかるみたいです。
CData Power BI Exchagne Connector のインストールと接続設定
それでは実際の手順を簡単に説明していきたいと思います。
まず、以下のWeb サイトから「CData Power BI Exchange Connector」をダウンロード・インストールしておきます。

https://www.cdata.com/jp/drivers/exchange/powerbi/
インストールすると、認証情報を入力するための画面に移るので、先程述べた偽装ユーザー権限を持ったユーザー情報でログインします。

ちなみに、ServerのプロパティにはExchange Onlineの場合「https://outlook.office365.com/EWS/Exchange.asmx」を指定します。
Power BI から Exchange Online に接続
それでは実際にPower BI からExhcnage Onlineのデータを取得してきましょう。
Power BI を立ち上げて

「CData Exhcange」を選択します。(Power BI の Exchange コネクタではありません)

DataSourceを選択して、そのままOKをクリック

とりあえずログインユーザーのスケジュールだけ取得します。

取得できたら、クエリを編集して、Power Queryで取得処理を書き直しましょう。

以下のようなものがデフォルトになっているので、

Sampleで私が作成したものですが、下記のようなクエリで実行できます。
CData Power BI Connectorでは内部的にSQL文でリクエストできるようになっており、
select * from Calendar where ImpersonationUser = 'hogehoge@hogehoge.onmicrosoft.com' というSQLで偽装ユーザーとして予定表データが取得できるようになります。
取得したいユーザーを増やしたい場合は、メールアドレスを追加してください。
let
Source = "CData Power BI Exchange",
BaseQuery = "select Subject,Start,End,IsMeeting,OrganizerName,DATEDIFF('mi',Start,End) as UsageTime,ItemId from Calendar where ImpersonationUser = '",
Users = {
"XXXX@XXXXXX.onmicrosoft.com",
"XXXX@XXXXXX.onmicrosoft.com",
"XXXX@XXXXXX.onmicrosoft.com",
"XXXX@XXXXXX.onmicrosoft.com",
"XXXX@XXXXXX.onmicrosoft.com",
},
AllData = Table.Combine(
List.Transform(
Users,
each CData.Exchange.DataSource(Source, null, [Query = BaseQuery & _ & "'" ])
)
)
in
AllData
こんな感じでデータが取得できました。

あとはPower BIの機能を使って、可視化することができます。

CData Power BI Connector は30日間のトライアルを提供しているので、是非使ってみてください!