Morning Girl

Web API, Windows, C#, .NET, Dynamics 365/CRM etc..

Power BI を使って Exchange の各ユーザーカレンダーを横断して分析できるようにする:CData Exchange Power BI Connector

今回は「Power BI 勉強会 @ 東京 #11」のランチセッションで発表するための記事になります!

powerbi.connpass.com

また、この記事の内容は以下の動画でも提供しています。

4分くらいなので、さくっと見てもらえるかと。

www.youtube.com

やりたいこと

もともと私自身CRMアプリケーションのインテグレーションをしていた経験もあって、「Office365 / Exchange Online のデータを使って、打ち合わせや会議、予定の情報を分析したい」という話をよく耳にします。

実際Activity分析の材料として予定表は宝の宝庫です。

なぜか? と言えば、いつ、誰が、どこに、何をしにいった? といった情報が基本的に入力されるのはもちろんのこと、社内システムのようにユーザーが入力するための敷居がとにかく低い。基本的なインフラレベルで使っているものになるので、データがちゃんと貯まるんですね。

(※本来であれば、CRMアプリケーションと組み合わせて、顧客に紐づけて活用するのがいいんですけどね。)

f:id:sugimomoto:20181221143904p:plain

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

f:id:sugimomoto:20181221143345p:plain

実現するにあたっての課題

雰囲気的に簡単にできそうなお題なんですが、ちょっと課題があります。

Power BI にExchange のコネクタがあるんですが、実は「1ユーザー」の情報しか取得できません!

f:id:sugimomoto:20181221143403p:plain

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

f:id:sugimomoto:20181221143418p:plain

実現アプローチ

CData Power BI Exchange Connector を使うことは前提になるのですが、それと合わせて理解しておく必要があるものが、Exchange の偽装ユーザーです。

あくまでExhangeのデータ取得には特定のユーザーを割り当てて行いますが、そこに偽装ユーザーのリクエストを挟むことによって、自分以外のスケジュールにもアクセスできるようにします。

f:id:sugimomoto:20181221143441p:plain

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

f:id:sugimomoto:20181221144511p:plain

以下のBlogを参考にさせてもらいました。

blog.o365mvp.com

ただし、偽装ユーザー権限は結構強力の権限なので、使用する際には要注意です。

あと、反映されるまで、少し時間がかかるみたいです。

CData Power BI Exchagne Connector のインストールと接続設定

それでは実際の手順を簡単に説明していきたいと思います。

まず、以下のWeb サイトから「CData Power BI Exchange Connector」をダウンロード・インストールしておきます。

f:id:sugimomoto:20181221143302p:plain

https://www.cdata.com/jp/drivers/exchange/powerbi/

インストールすると、認証情報を入力するための画面に移るので、先程述べた偽装ユーザー権限を持ったユーザー情報でログインします。

f:id:sugimomoto:20181221143809p:plain

ちなみに、ServerのプロパティにはExchange Onlineの場合「https://outlook.office365.com/EWS/Exchange.asmx」を指定します。

cdn.cdata.com

Power BI から Exchange Online に接続

それでは実際にPower BI からExhcnage Onlineのデータを取得してきましょう。

Power BI を立ち上げて

f:id:sugimomoto:20181222162804p:plain

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

f:id:sugimomoto:20181222162930p:plain

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

f:id:sugimomoto:20181222163015p:plain

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

f:id:sugimomoto:20181222163100p:plain

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

f:id:sugimomoto:20181222163801p:plain

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

f:id:sugimomoto:20181222163821p:plain

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

こんな感じでデータが取得できました。

f:id:sugimomoto:20181222164023p:plain

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

f:id:sugimomoto:20181222164214p:plain

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