こんにちは。今日はDynamics 365で天気予報を自動取得して各種分析に利用するご紹介します。この記事では「Dynamicsで天気予報を確認してみたら大変なことになった!」みたいなSNS的なノリではなくて、実際にお客様にCRMを導入させていただく際に実装が必要になったので、その背景と実装方法についてご説明したいと思います。実装自体は至って簡単です。
何のためにやるか?
普段の業務の中で天気予報を気にするケースというのはBtoBの業態だとあまり多くはないのかもしれませんが、実は色々なケースに応用できるかと思います。例えば、「日々の売り上げと過去の最高気温の相関関係を分析したい!」とか「来週の天気予報と工程をカレンダーにプロットして、イベントのスケジュールを管理したい!」とか、特にBtoBtoCのビジネスにおいては天気が売上に影響を与える重要なファクターになりうるためです。
どのようにやるか
実装自体は比較的簡単に行えます。Dynamics365やPowerAppsのライセンスがあれば使えるDataflowという機能を使って実装します。天気予報のAPIからDataflowでデータを取ってきてDate+Cityをキーに日々Upsertをかけていく感じです。
手順1:テーブルを作成
まずは天気予報のデータをとため込むためのテーブルをDataverse側に作っていきます。新しいソリューションを作成し、1つのテーブルを作成します。

テーブルの所有者は”組織”にしておくのがよいです。天気に担当者とかはいらないので。

テーブルのフィールドはこんな感じがよいかと。一般的に天気予報のデータは日付、地域、最高気温、最低気温、天気といった情報から構成されています。ポイントはKeyというテキスト項目を持っておくことです。これを代替キーとして利用します。今回はプライマリ名をそのままKeyにしました。

“Key”をキーに。

手順2:APIキーを取得
次に、天気予報をどこから取得してくるかを決めます。天気予報のAPIはさまざまなものが公開されているのですが、今回はVisual Crossingというサイトからデータを取得していきたいと思います。
アカウントを作成(無料)し、以下の画面からForecast→Request Weather Dataへと進んでいきます。

Locationsボタンを押して、複数のCityを追加していくことで、いい感じにAPI用のURLを作ってくれます。


Addressは適当に都市名を入れればOKです。

金沢、所沢、横浜の天気を取得するとこんな感じ。

画面上のQuery APIを押すことで、必要なAPIへのアクセスが取得できます。Content TypeはCSVを選んでおきます。

次はDynamics側からデータを取りに行く設定を行います。
手順3:Dataflowを構成
Dynamics 365やPowerApps周辺の開発において、他システムとのインターフェースを組む場合はPower Automateを使ったり、何らかのサードパーティの製品を使ったりすることが多いかと思うのですが、私のおすすめはDataflowです。ExcelやPower BIで利用されているPower Queryというツールを使って、あらゆる場所からデータを取得・変換することができます。この機能が追加費用なしで使えるのは素晴らしいですね。
Power Appsのページから、データ>データフローをたどり、新しいデータフロー→空白から作成 を選びます。

適当に名前をつけます。

データソースの選択でテキスト/CSVを選び、

先ほどのQueryをここに貼り付けます。

天気予報が読み込まれます。

まずは列の選択を押して、必要な列のみに絞り込みます。

絞り込んだ結果がこちら。

つぎに、Keyを作っていきます。天気予報は向こう数日分の情報を毎日移動しながら取得していくことになるため、日付+地域をキーにして取り込んでいくことで重複してデータが作られることを防ぐ必要があります。
Date Time列のデータ型をいったんテキストに変更します。

カスタム列の追加から、日付と都市(Date Time列とName列)を結合しKey列を生成します。

Key列が作成できたら、再度Date Time列を日付型に戻します。

これでデータの加工はOKです。次へを押して、

Dynamics 365側のテーブルとマッピングしたら完成。次へを押すと自動でデータが取得されます。

もちろん、自動更新の設定も可です。(周波数ベースの更新 という謎翻訳。。)

できた
ということで、API経由で天気予報を自動取得するしくみが構築できました。

Dynamics 365やPowerAppsの開発で使えるDataflowは、このようにありとあらゆる場所からデータを取得・加工することができます。ポイントは代替キーをうまくつかってUpsert (Update or Insert)を正しく回していくことです。この情報をデータ分析に活用していく手順については、また別の記事でご紹介したいと思います。
当社ではDynamics 365 Sales / Business Central / PowerApps / Power BI などを用いた業務改善支援を行っております。ご相談・お問い合わせはこちらから。