ある日、会社の上司から「工場のラインの間取り図にマシンの温度がリアルタイムで表示されるPowerBIを作るように。」というタスクが降ってきたので作ってみました。作り方が分からんかったらPowerBIのNinjaクラスの大先生に教えてもらえ、ということだったのでイチから教えて頂きました。ありがとうございました!
本業(Dynamics導入)とはあまり関係ない?話だったので趣味に走ることにしました。ということで、ビール醸造所のラインの各タンクの温度を測ってPowerBIに表示します、、、と言いたいところですが、ビール醸造所はもちろん所有していないので(いつか持ちたいのですが)、温度データはなんちゃってで作ることにします。(本当はIoTな温度計でやりたかったのですが。。)
まずはレイアウトを入手します。(ガチで2時間くらい探しましたw)
我が愛しのベルギービールではなく、アメリカのクラフトビール関係のサンプル図面なのが残念ですが、いい感じのレイアウトです。左上が醸造エリアですね。ここに工程ごとのタンクが置いてあるはずです。真ん中あたりは出来上がったビールを冷ますエリアでしょう。真ん中少し右が樽置き場でその右が出荷用のパレット置き場、下半分は醸造所併設パブですかね。この図面だけでビール2杯くらいイケますね。
おっと話がそれました。本題のPowerBIです。
まずはデータセットを作ります。「動くグラフ」が課されたお題なのでストリーミングデータセットを作る必要があります。PowerBIサービス画面のサイドメニューからマイワークスペースを選択。
初回はこんな画面が出ますが、下の方に行って、、
右下のスキップをクリック。
一覧画面です。マイワークスペースのダッシュボードとかデータセットがタブで分類されて表示されています。デフォルトはダッシュボードが表示されていますが、まずはデータセットを作るので「データセット」のタブをクリック。
データセットの一覧が表示されました。(このアカウントでは)初めて作るのでリストには何も表示されていません。右上の「+作成」を押します。
作る対象として「ストリーミングデータセット」を選択。
3種類のソースを選べと言われますが、今回はAPIを選択。(Azure Stream も試してみましたが、それはまたの機会に書きます。)「次へ」をクリック。
データセットを定義します。データセット名とか項目名をそれぞれ定義。タンク温度を縦持ちにするか横持ちにするか一瞬迷いますが、縦持ちで進めてみます。属性に「日時」型の項目が一つと「数値」型の項目が最低一つ入っているのが重要です。「作成」をクリック。
データセットが作成されました。(後ろ側にデータセットができます。)ここでPowerShellのタブをクリックすると、、
PowerShellを使ってデータセットにレコードを作成するサンプルが表示されます。ここでコピーして控えていてもよいですが、あとでもう一度参照できますので気にせず進めます。「完了」を押します。
データセットが表示されました。
マイワークスペースで「ダッシュボード」タブに切り替えて「+作成」から「ダッシュボード」を選択します。
ダッシュボード名を適当につけて「作成」。
ダッシュボードが出来ました。まだ何も表示されないのでタイルを追加しましょう。「+タイルの追加」をクリック。
ソースの種類として「カスタムストリーミングデータ」を選択して「次へ」。
ストリーミングデータセットを今から作るか、既存のデータセットを作るか聞かれますので、先ほど作成したデータセットを選択して「次へ」をクリック。
表示様式を指定する画面が表示されます。
デフォルトは「カード」ですが、選択肢は以下の通りです。今回は「カード」でやってみます。
「+値の追加」をクリック。
カードのタイルに表示するフィールドとして先ほどデータセットに定義した「Temperature」を選択。(数値項目が他にあればここに表示されます。)「次へ」をクリック。
タイルの名前を適当につけて「適用」。
ダッシュボードにタイルが追加されました。まだ何も表示されません。当然ですね。データを作ってないからです。
データは先ほどのPowerShellで作ります。マイワークスペースからデータセットの一覧を表示し、丸囲みのiマークをクリックします。
PowerShellのタブをクリックするとデータセット作成時に表示されたPowerBIが表示されます。コピーして、、
PowerShell ISEにペースト。このまま実行するとタンク名とか温度がサンプル通りになるので、、
適当に名前と温度に変えます。適当と書きつつ割とガチのタンク名&温度です。Mash Tunというのはビールの原料(麦とか)を砕いて水と混ぜるタンクの事ですね。
ガチで作ると10個近い工程とタンクがありますが、ほどほどにしないとボスに怒られるので3個にしましたw。発酵タンクと発酵後に寝かせる用のタンクを追加します。$PayloadのセクションとInvoke-RestMethodの行をコピーして追加します。データセットは同一、つまりendpointも一つなのでInvoke-RestMethodの行はそのままコピーしてOKです。$Payloadのセクションはタンク名称とか温度を適当に変えます。あと、日付は自動的に現在時刻を取ってくるよう Get-Dateコマンドを使います。コマンドを作ったらF5ボタンで実行です。
PowerShellを実行すると、、このようになります。最後の温度だけ表示される…?。
もう一度実行してみます。
よく見ると、最初は80が表示され、次に60が表示され、、
最後に30が表示されます。データセットを縦持ちにした&「どのタンクの温度を表示する」の指定ができないので必然的にこうなってしまいます。。(これの解決方法はまた次回。)
カード型がダメなら、、ということで「+タイルの追加」をクリック。
カスタムストリーミングデータを選択して「次へ」。
先ほどのデータセットを選択して「次へ」。
折れ線を選んでみましょう。
カードよりも指定項目が多いです。
凡例が指定できるのがミソですね。
名前を付けて「適用」。
タイルが追加されました。まだ何も表示されません。データを作っていないので当然です。
先ほどのPowerShellをそのまま実行。折れ線グラフを作りたいので数回実行します。
最初はこんな感じですが、、
そのうち、このようになります。温度が横ばいなのは面白くないですね。。
温度を手で変えてみましょう。適当に温度を変えて何度か実行。
こんな感じでいい感じのデータができました。
毎回温度を手で打ち換えるのは面倒なので、Get-Random コマンドで温度の揺れを自動化します。
適当な間隔で実行するといい感じのグラフができました。
今回はここまでです。
カードに各タンクの温度を出す方法とレイアウト図に乗っける件は次回。
1件のコメント