Event WebhookのデータをPower BIで可視化する
- 2018年10月16日
- by 有田繭子
- Category: 技術ネタ
SendGridサポートチームの有田です。
今回の記事では、SendGridのEvent Webhook、Microsoft Flow、Power BI サービスを組み合わせて、イベントデータを集計・可視化する方法を紹介します。
構成と前提条件
Power BIは、Microsoft社が提供するビジネス分析ツールで、様々なデータを可視化することができます。Power BIを使うと、発行したURLに対するデータのプッシュを契機に、ダッシュボードの図表を自動的に更新することも可能です(参考:Power BI のリアルタイム ストリーミング)。この機能を利用して、イベントデータの集計グラフがリアルタイムに更新される仕組みを作ります。
構成は以下の通りです。
前提条件として、SendGridのアカウント取得、Microsoft FlowとPower BIへのサインアップがそれぞれ必要となります。
Power BIの設定
まず、Power BIで受信するデータについて定義します。手順は以下の通りです。
- Power BIにサインインし、画面左側の「マイ ワークスペース」メニューをクリックします。画面右上の「作成」→「ストリーミングデータセット」→「API」の順でクリックします。
- 「データセット名」と「ストリームからの値」を入力します。「データセット名」は任意の名前で構いません。「ストリームからの値」では、受信する項目名(基本的には、Event WebhookのPOSTパラメータから必要な項目を選択)とそのデータ型を定義します。入力し終わったら、「履歴データの解析」をオンにして「完了」します。
- ストリーミングデータセットが作成され、プッシュURLが表示されます。このURLはMicrosoft Flowの設定で利用するので、控えておいてください。
Power BIの設定はここで一旦完了です。
Microsoft Flowの設定
Microsoft Flowは、複数のアプリを組み合わせてタスクを自動化するためのツールです。今回は、イベントデータをPower BIで解析しやすい形に加工するために利用します。設定の手順は以下の通りです。
- Microsoft Flowにログインし、「マイ フロー」→「一から作成」→「一から作成」の順にクリックします。
- まずはトリガー(フローが起動するきっかけ)を設定します。トリガーの種類は「HTTP要求の受信時」を選択します。トリガーの設定画面で「サンプルのペイロードを使用してスキーマを生成する」をクリックし、Event Webhookのサンプルデータ(イベントPOSTの例のJSONのコピーでOKです)を入力して「完了」します。
- ここからは、処理の中身の設定です。まずは、受信したデータを解析するアクションを定義します。「アクションの追加」から「データ操作 – JSONの解析」をクリックします。「コンテンツ」でトリガーの「本文」を選択し、手順2. と同様にJSONを入力して「完了」すると、JSONの構文が表示されます。
- 次に、Power BIに送信するデータを選択します。「アクションの追加」から「データ操作 – 選択」をクリックします。「開始」で「JSONの解析 – 本文」を選択し、「マップ」の「値」には手順3.で解析したパラメータまたは数式を入力します。
Power BIで可視化する際に、送信日時でデータをフィルタ・集計したい場合は、timestampパラメータを文字列形式にフォーマットしておくのがおすすめです(Power BIでは、UnixTimeを日付として解釈することや、ストリーミングデータセットを加工することができないため)。今回は、JSTへの変換と文字列フォーマットのため「formatDateTime(addSeconds(‘1970-1-1 09:00:00’,item()[‘timestamp’]),’yyyy-MM-dd HH:mm:ss’)」のように数式を指定しました。
- 最後に、Power BIにデータをPOSTするアクションを定義します。「アクションの追加」から「HTTP」をクリックします。「方法」で「POST」を選択し、「URI」にPower BIで発行したURLを入力します。「本文」には手順4.の「出力」を選択します。
フローに名前を付けて保存したら、Microsoft Flowの設定は完了です。フローの作成に成功すると、手順1.で設定したトリガーに「HTTP POSTのURL」が表示されます。このURLはSendGridの設定で利用するので控えておきます
SendGridの設定
SendGridでEvent Webhookの設定を行います。詳しい手順はこちらです。
- SendGridにログインし、Settings > Mail Settings > Event Notification > Editの順にクリックします。
- 「HTTP POST URL」の欄に、Microsoft Flowで生成されたURLを入力します。また、「SELECT ACTIONS」でPOST対象のイベントを選択します。
- 右上のチェックマークをクリックし、Event NotificationをACTIVEにします。
以上で、SendGridの設定は完了です。
疎通確認とPower BIの図表の作成
それでは、SendGrid – Microsoft Flow – Power BIが正しく連携できていることを確認するため、実際にメールを送ってみます。以下の3点を確認できれば、疎通は成功です。
- SendGridのActivityにイベントが表示されること
- Microsoft Flowの「フローの管理」ページに実行履歴が表示されること
- Power BIでデータセットの「フィールド」の項目にチェックを入れると、受信したデータが表示されること
ここまで確認できたら、Power BIで図表を作成していきます。
- 「マイ ワークスペース」→「作成」→「レポート」を順にクリックし、「レポートの作成」画面を開きます。先程作成したデータセットを選択し、「作成」をクリックします。
- 空のレポートが表示されたら、画面右側に表示される「視覚化」「フィールド」「フィルター」の項目から、図表の種類や集計項目などを選択し、自由に配置していきます。
今回は、例として以下を作成しました。A. 受信したイベントの一覧
B. Processed, Delivered, Openイベントの合計回数
C. イベントの発生日時ごとの集計
D. 宛先ドメインごとの集計
E. 受信者の住所(都道府県)ごとの集計
(※メール送信時のcustom_argsで設定)
なお、集計対象は「レポート レベル フィルター」で直近3日間に絞っています。 - 作成した図表の右上にあるピンマーク(ビジュアルをピン留めする)をクリックし、「新しいダッシュボード」を選択してダッシュボード名を入力します。ダッシュボードが作成され、選択した図表が配置されます。その他の図表も同様に「ビジュアルをピン留め」していきますが、次からは既存のダッシュボードを指定すればOKです。
- この状態で再度メールを送ってみると、ダッシュボードが自動的に更新されることが確認できます。
まとめと注意事項
今回紹介した方法は、設定項目が多くて少し大変かもしれませんが、イベントデータをわかりやすく表示できる、発生したイベントをリアルタイムに可視化できる、ノンコーディングで実現できる といったメリットがあります。
ただし、Power BIの制限事項(受信可能なデータ量の制限など)より、メールの通数が多い場合にこのままの方法で運用することは難しいと思われます。制限を回避するには、
- Microsoft Flowで可視化に必要なデータだけフィルタしてPower BIに送る
- Microsoft Flowから一旦DBに書き出したデータを読み込んで可視化する
といった方法が考えられます。
また、Event Webhookのデータをフィルタしたり加工したりせずに、そのままの値を保存したい場合は、フローの途中にDB更新処理を追加しておけばよいでしょう。
ご自身の運用にあった方法で、イベントデータを活用していきましょう。