見出し画像

Power BIを使ってセンサデータのリアルタイムダッシュボードを作る

先日Power BIに関して次のようなツイートをしたところ、特に具体的な手法を解説した訳でもないのに少し狼狽するほどリツイートされてしまった。せっかくなので当方がPower BIを具体的にどのように活用しているかご紹介したいと思う。

Power BIとは何か

マイクロソフトが提供するBIツールである。

BIツールって何だっけ

企業が持っている、

  • 各種データベース

  • 売上を記録したエクセルシート

  • ユーザの行動ログ

などの様々な情報を分析・可視化してビジネスに活かしちゃおうというツールである。
ただし、用途は別にビジネスに閉じられたものではなく、雑多なデータを超簡単に可視化することができるので、僕は大学院の研究にも重宝している。例えば、近接無線通信のパフォーマンス測定結果をCSV形式でクラウドにアップロードし、それをグラフにしてそのまま論文に貼り付けるようなことが非常に簡単にできる。

Power BIってどれを使えばいいんでしたっけ

これは非常に素晴らしい質問で、僕も最初この辺りがよくわからなかった。Power BIにはPower BI DesktopというPCにインストールして使うスタンドアロンなアプリケーションと、Power BI Serviceというオンライン版があって、出来ることが異なっている。

Power BI Desktop

Windows向けソフトウェアで、完全無料でダウンロード・利用することができる。

Power BI Desktopで何が出来るかは、僕が長々と文章を書くよりこの動画を最初の5分だけでも良いので眺めていただけると一発でお分かりいただけると思う。

この例では、ローカルに保存した複数のエクセルファイルから様々なデータを分かりやすく可視化している。また、一度ルールを設定すると同じようなエクセルファイルを特定のフォルダに追加するだけでグラフが動的にアップデートされる様子も解説されている。めちゃんこ凄い。

このDesktop版を使う限りにおいては完全に無料であるため、特にダッシュボードを社内で共有したいといったモチベーションがない限り個人で永久に無料で使い続けることができる。

Power BI Service

端的に言うとPower BIのオンライン版である。

Power BI Desktopで作ったレポートをPower BI Serviceのダッシュボードにpublishして、それを社内で共有するといったことが簡単にできる。
また、Microsoft Azureのサービスをデータソースにしてオンラインだけで完結するレポートやダッシュボードを作成して可視化するようなこともできる。本エントリではこのうちのごく一部の機能をお見せしたいと思う。

こちらは有料で、料金体系はユーザ数に応じた月額課金がメインだが、全社的にOffice 365を導入している会社では一緒に契約している場合もあるため、是非社内の情シスの方に連絡してみて欲しい。

Power BIでセンサデータのダッシュボードを作る

Power BI Desktopの動画を見ていただいた方々は、Power BIでどのようなことが出来るかざっくりとお分かりかと思う。
ここでは非常によくあるシナリオとして、センサデータをリアルタイムに監視できるようなダッシュボードを作ってみたいと思う。詳細は次の通りだ。

  • 世界中の拠点で気温データを毎分取っている

  • データは次のようなJSON形式であり、この時点では時系列データになっておらず、安価なData Lakeに単に保存し続けている

  • これを場所ごとの気温変化が分かりやすいように可視化したい

{
  "place": "Antarctica",
  "temperature": -10,
  "dateTime": "2022-10-16 05:05"
}

完成イメージは次のような感じだ。

センサデータの収集方法

エンジニア的にはセンサデータをどのように集めてどのように保存するのかは大きな関心事だ。例えばリレーショナルデータベースに保存するのかドキュメントデータベースなのか、それとも構造化データのファイルとしてData Lakeに貯めていくのか。
最近はとりあえず取れるデータは何でも取っておいて安価なData Lakeに無造作に放り込んでおき、後から機械学習などで利用する際にETLツールを使って良きに計らう…ということも多いだろう。本エントリではその瞬間瞬間のセンサデータがひたすらJSON形式でData Lake(Blob storage/ADLS Gen2)に蓄積されていくシナリオを想定した。

ちなみに、このデータを貯める部分に関するノウハウに興味がある人が多ければ別途記事にする予定があるのでご期待いただきたい。

Stream Analyticsでストリームを作る

先に書いておくと、Power BIでは「ストリームデータをデータソースにしてリアルタイムに更新される折れ線グラフのダッシュボード」といったものが実に簡単に作れる。現状、センサデータはある瞬間の状態がJSONで保存されているだけなので、これを時系列のストリームに変換する必要がある。
Azure Stream Analyticsを使うとこのようなことが簡単にできる。

Microsoft Azure Portalから「Stream Analytics job」を選択し、Jobを新規作成する。

次に「Add stream input」から、今回センサデータを格納しているData Lakeである「Blob storage/ADLS Gen2」を選択する。

次に「Job topology」から「Inputs」を選択する。ここでデータの入力ソースに関する設定をしていく。

データが保存されているStorage accountを選択し、Container名を指定する。

次に、Container内でデータが保存されているパスのパターンと日付フォーマットを自分のものと合わせる。Stream Analyticsはこの情報を元にJSONファイルを探す。

最後にファイルフォーマットとしてJSONを選択する。こうすることで各プロパティがクエリ可能となる。

次に「Outputs」からデータのアウトプット先を設定する。ここでは時系列データをPower BIのデータソースとして扱うための設定をする。

予め作っておいたPower BI ServiceのWorkspaceを指定し、このストリームが作り出すDatasetとTableの名前を設定する。

次に「Query」を選択し、入力ソースであるData LakeのJSONを収集して時系列ストリームを作るためのクエリを組み立てる。

このクエリが最大のミソだ。まずはクエリ全体を紹介する。その後ひとつひとつ意味を解説する。

まず全体を見渡すと、一般的なSQLのようにクエリを組み立てることが分かる。
FROMでJSONが格納された「DataLakeInput」からデータをSELECTする。その際、JSONの「dateTime」フィールドをTIMESTAMPとして利用する。TUMBLINGWINDOWはスライディングウィンドウの一種で、ここでは5分間隔で場所ごとに気温データをまとめてストリームを作ることを意味している。データの粒度や更新頻度に応じて間隔は任意に調整することができる。ウィンドウ関数は以下のリンクに詳しい。

SELECTの中では各種集計関数が利用可能だ。例えばavg(temperature)TUMBLINGWINDOWでまとめた気温の平均を取っている。また、max(dateTime)で各時間間隔の最後の値を取り、これをそのウィンドウ(間隔)における区切りの時間としている。
最後にINTO [PowerBIOutput]の部分で、このクエリの実行結果をPower BIのデータソースとして利用できるように設定している。

最後にStream Analyticsの「Overview」から「Start」を選択してこのジョブを開始する。

これでData LakeにJSONとして保存したセンサデータを時系列ストリームに変換することができた。

Power BIでリアルタイムダッシュボードを作る (1)

この時系列ストリームを使ってリアルタイムダッシュボードを作ってみよう。やり方は驚くほど簡単だ…!
まず、app.powerbi.comからPower BI Serviceにログインし、Stream AnalyticsのOutputを指定したワークスペースを選択する。

次に、ダッシュボードの「Edit」から「+ Add a tile」を選択する。

次に、「REAL-TIME DATA」を選択する。

次に、データソースとして「YOUR DATASETS」から先程Stream Analyticsで作成した「RealtimeWorldTemperature」を選択する。

「Visualization Type」は「Line chart」を選択する。

次に、Axis(X軸)として「WindowEnd」を選択。
また、Legend(凡例)として「place」を選択。
最後に、Values(Y軸)として「averageTemperature」を選択する。

最後に、直近何分間表示するか設定する。

たったこれだけで、データソースの情報が更新されるとそれがリアルタイムに反映されるダッシュボードが完成した!

さて、このダッシュボードは一点だけ問題がある。それはデータの絞り込みが一切できないことだ。いまは凡例が3つだけなので何とかなるが、これが100-200と増えた場合に絞り込みが出来ないとほとんど使い物にならないことは想像に難くない。次項ではそれに対応したダッシュボードを作ってみよう。

Power BIでリアルタイムダッシュボードを作る (2)

先程はPower BI Serviceの画面からいくつか選択していくだけで簡単にリアルタイムデータソースを可視化するダッシュボードを作ったが、細かいコントロールが効かないという欠点があった。
しかしながらPower BI Serviceは本エントリの冒頭で紹介したPower BI Desktopのようなレポートを作ることもできる。このアプローチは作成に手間がかかるものの、細かいコントロールが可能というメリットがある。

ワークスペースから「Datasets」の「Create report」を選択する。

すると、下図のように時系列ストリームをデータソースとしてレポートを作成することができる。もし冒頭で紹介した動画を最後まで見ていただけた方々は、このデータソースを使ってPower BI Desktopと全く同様に任意のビジュアライゼーションが可能であることにお気付きだろう。

ここでは折れ線グラフを作りたいので、「Visualization」から「Line Chart」を選択する。

先程作ったダッシュボード同様、「X-axis」には「WindowEnd」を、「Y-axis」には「averageTemperature」を、そして「Legend」には「place」を選択する。

次に、「Filters」から「WindowEnd」の「Filter type」を最新時間からの相対時間にするためにRelative timeを選択する。

次に、一度すべてのチャートの選択を解除してから「Visualizations」を選び、「Page refresh」の設定を変更する。
先程のリアルタイムダッシュボードと違い、Power BIの通常のレポートにはデータソースの更新に応じて動的に画面をリフレッシュする機能は残念ながら存在しない。しかしながらこうして指定した時間でページを自動的に更新することで、リアルタイム更新を擬似的に再現することが可能だ。

次に、場所による絞り込み機能を達成するために「Visualizations」から「Slicer」を選択する。

「Slicer」の「Field」には「place」を選択する。

この時点で場所による絞り込みが達成されるが、更に「…」から「Search」を選択することで、文字列による絞り込み機能も追加することができる。

最後に、「Pin to a dashboard」でレポートをダッシュボードにピン留めできたらダッシュボードの完成である。

ダッシュボードは一定期間で自動更新されるメイン画面と、右下の絞り込み機能で構成される。画面を放置すると定期的に新しい値でアップデートされ、また右下のSlicerから場所を選択すると絞り込んだ結果だけを描画することができる。

まとめ

今回のエントリではData Lakeに乱雑に貯めたセンサデータをAzure Stream Analytics機能を使って時系列データに変換し、それをPower BI Serviceを使ってオンラインでダッシュボード化した。その際、組み込みのリアルタイムダッシュボード機能を使ってデータソースに変更があれば動的に反映されるダッシュボードを作成した他、Power BI Desktopと同じような通常のレポート機能とSlicerを組み合わせてきめ細かいチューニングができることも紹介した。

今回はたまたまAzureとPower BI Serviceを使った例をご紹介したが、Power BI Desktopとして使う限りは完全に無料であるため、まずは手元のエクセルシートやCSVファイルなどを使ってちょっとしたビジュアライゼーションから使い始めることができる。また、Power BI Desktopの知識はPower BI Serviceでレポートやダッシュボードを作る際にも活かすことができる。

今回紹介した機能はPower BIのポテンシャルのごくごく一部に過ぎない(本当に!)ので、このエントリで興味を持った人は是非色々試してPower BIの便利な使い方を見つけて欲しい。


この記事が気に入ったらサポートをしてみませんか?