IoTで取得したデータがそのまま見える化に使えなかった。。。
データの加工が複雑になりリアルタイムで見えなかった。。。
昨今、製造業では「IoT」の活用で工場のあらゆるデータを離れた場所から接続できるようになりました。
取得したデータを一元管理できるようになったため、各設備や治具のPLC値やロボットのデータなどを時系列にデータベースに蓄積することができます。
機械学習やAIの時系列分析を用いて、設備の故障タイミングを予知することで設備保全などに活用する事例も増えてきています。
本記事では下記の内容についてまとめています。
- 工場の電力量をTableauで見える化する際に苦労した内容
- 2つの改善策
試行錯誤した内容を記事に残していきたいと思います。
取り組みの背景
工場の電力量を見える化した背景は省エネです。
IoTを用いてDBに蓄積した膨大な時系列データをグラフ化することにしました。
そうすることで、ユーザーが任意の期間で電力量の比較や傾向の把握が出来るようになるため、省エネの効果確認が簡単に行えるようになります。
1年前の同じ日と比較などです。
苦労したこと
今思えば当たり前のことなのですが、取得している電力値が累積値であるのに対し、表示したい値はある期間での差分の合計値であった点です。
5秒ごとにデータをDBに蓄積していたため、欲しい値は5秒前との差分です。
TIME | 累積値 | 差分 |
2022/11/06 22:30:00 | 3200 | 0 |
2022/11/06 22:30:05 | 3210 | 10 |
2022/11/06 22:30:10 | 3220 | 10 |
任意の期間(年や月、日)をパラメーターにして差分の合計をTableauで可視化したかったのです。
極力リアルタイムなデータが必要であったため、一定の間隔でTableau ServerからprepのカスタムSQLを用いたwindow関数(1行前のデータとの差を求める)を走らせて、データを抽出していく必要がありました。
ここまでくるのにも紆余曲折がありましたが。。。
しかし、5秒毎に取得しているデータであるため、1年分のデータ(約630万行)を処理するのにも膨大なデータ量です。
実際、Tableau Serverでのデータ抽出にかかる処理は70分もかかっていました。
この処理が原因でその他のデータソース抽出やフローの実行が遅れることになり、早急に対処が必要でした。
先に解決策の方法を述べると、データベース側での処理の変更です。
DataSaberBridgeの活動の中でも学ぶところですが、原因となっている処理がTableau側なのかデータベース側なのかを切り分けて考えることが大事です。
今回はTableau側ではなく、データベース側で走らせているSQLが原因であるため、データベース側での解決方法を考えていく必要があります。
2つの解決策
最終的な解決方法は下の2つに絞りましたが、採用したのは②になります。
①蓄積するデータの時間間隔を5秒→1分に変更したテーブルを作成して、データ量を減らす。
②ストアドプロシージャを用いて、差分データのテーブルを作成して、Tableau Serverから発行するSQLを簡素化する。
ストアドプロシージャとはデータベースに対する命令をまとめたものです。
今回は、データベースに値が追加される度に1行前の値との差分を別のテーブルに追加していくような処理を記述したものになります。
差分を蓄積したテーブルからのデータ抽出は複雑なwindow関数などが不要なためSQLが簡素化され抽出時間が短くなります。
具体的な実装方法はまた別の記事でまとめていきたいと思います。
まとめ
製造業でTableauを使い始めて約1年半ほど経ちますが、ここまでデータの抽出に悩まされたのは初めてでした。
Tableauにはテーブル結合やリレーションシップ、高度な抽出フィルタなど様々な素晴らしい機能があるため、ほとんどの場合はTableau側で処理ができてしまいます。
ただ、まれにTableau側ではどうしようもできないときがあります。
そういったときは、データベース側で改善する方法があるのでは?という視点を持つだけでもTableauで扱えるデータの幅が広がるのではないかと思います。