こんにちは。CData Software Japan リードエンジニアの杉本です。
最近個人的なプロジェクトとして、テスラのデータをAPI経由で収集するのにハマってます。
kageura.hatenadiary.jp
kageura.hatenadiary.jp
目下の目標は1日中テスラの状態をAPI経由で監視して自分のテスラ利用実績を可視化することです。
そんな目標へのアプローチが最近ようやく定まってきて、以下のようなアーキテクチャで実装を考えていました。Azure のローコード・iPaaSであるLogicAppsを利用して定期的にTeslaのデータを取得し、Cosmos DB Table APIへ格納。最終的にPower BIで可視化する、という方法です。
ただ、このアプローチで一点不満がありました。
Power BI は Microsoft製のBIツールなので、もちろんCosmos DBへの接続をサポートしています。
https://docs.microsoft.com/ja-jp/azure/cosmos-db/powerbi-visualize
しかしながら、デフォルトですとデータセットをそのままプリロードし
型の調整やカラムの取捨選択を一つ一つ実施しなければいけません。(Power Queryをガリゴリ書きなさいという話なのかもですが)
というか、そもそも、Cosmos DB Table APIはSQLクエリをサポートしているので、
https://docs.microsoft.com/ja-jp/azure/cosmos-db/sql-query-getting-started
以下のようにCosmos DB データエクスプローラー上で実行できるSQLクエリのように、リクエストさせてほしいという思いもありました。
そこで、手前味噌ですが、CData Cosmos DB Power BI Connectorを使ってこのSQLによるPower BIからのリクエスト方法を試したいと思います。
https://www.cdata.com/jp/drivers/cosmosdb/powerbi/
使い方
まず、以下のURLからトライアル版をダウンロードして、対象のマシンにセットアップします。
https://www.cdata.com/jp/drivers/cosmosdb/powerbi/
セットアップ完了後、以下のように接続画面が立ち上がるので必要なプロパティを設定します。
これで接続のテストが通れば設定は完了です。
Power BI から Cosmos DB に接続する
それでは、Power BI から CData Connector 経由で Cosmos DBに接続してみたいと思います。
通常通り、Power BIを立ち上げて、「データを取得」をクリックし
一覧から、「CData Cosmos DB」を選択します。
先程のData Source Nameを入力すれば、これで接続が可能です。
とりあえず素直に「OK」をクリックすると
以下のようにテーブルデータにアクセスできます。
SQLを使ってアクセスする
次にSQLを使って、Cosmos DBにアクセスしてみます。
Cosmos DBのデータエクスプローラー上では以下のようなクエリで、時間ごとのステータス状態を取得しています。
SELECT c.datetime, c.state FROM VehicleData as c
CData Connector では、以下のAdvanced Optionの項目にSQLを記述することで、Cosmos DBへSQLを使ってリクエストを行うことができます。
以下のようにうまく取得できていますね。
せっかくなので集計処理も試してみましょう。対象の日付の範囲で、バッテリーレベルのMAX・MINを取得するクエリを書いてみました。
SELECT
Max(c.charge_state_battery_level) as maxbatterylevel,
Min(c.charge_state_battery_level) as minbatterylevel
FROM VehicleData as c WHERE c.date = '2020-12-28'
同じ用にSQLを貼り付けるだけです。
集計結果が取得できました!
補足
ちなみに、ここまで同じSQLでリクエストを実行してきましたが、厳密にはCosmos DBのSQLとCData Power BI ConnectorのSQLは規格が少し異なります。
CData Power BI Connector では以下の構文をサポートしているので、参考にしてみてください。
cdn.cdata.com
関連コンテンツ