Power BI Streaming dataflowsの位置づけを整理しつつ試してみる

## はじめに

Power BIでローコードでのリアルタイム変換処理を実装できるPower BI Streaming dataflowsがPublic Previewとなったので試してみます。

[Streaming dataflows in Power BI premium now available in public preview](https://powerbi.microsoft.com/en-us/blog/streaming-dataflows-in-power-bi-premium-now-available-in-public-preview/)

## 従来のリアルタイムデータセットとの違い

Power BI でリアルタイムデータの可視化を考えたとき、工程を「収拾」→「変換」→「BIモデル化」→「レポート」のように整理してどう異なるか考えてみます。
※SQL DatabaseやSynapse Analyticsなどにリアルタイム連携し、DirectQueryモードで可視化するという案もありますが、今回は割愛

### リアルタイムデータセット

従来のリアルタイムデータセットでは、以下のようなイメージで、変換処理層はPower BI 側では持たず、モデルに対してデータを送信してもらうことで、レポートにつながっています。
※Azureで実装する場合はStream Analyticsなどを利用します。
Stream AnalyticsはSQLライクな言語でリアルタイム分析を実装できるサービスです。

![](.media/archi.png)
![archi.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/8d9a1290-defe-ae87-0879-f17f6e1b0883.png)


参考：

[https://docs.microsoft.com/ja-jp/power-bi/connect-data/service-real-time-streaming#types-of-real-time-datasets](https://docs.microsoft.com/ja-jp/power-bi/connect-data/service-real-time-streaming#types-of-real-time-datasets)

[チュートリアル:Stream Analytics で不正な通話のデータを分析し、Power BI ダッシュボードで結果を視覚化する](https://docs.microsoft.com/ja-jp/azure/stream-analytics/stream-analytics-real-time-fraud-detection)


### Streaming dataflows

Streaming Dataflowsは、以下のようにリアルタイム変換処理を担います。
変換処理はローコードで実装が可能で、変換結果はhot data あるいはcoldデータという形でPower BI データセットに提供されます。

![](.media/archi2.png)
![archi2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/a56b201c-91e2-8bf0-8d2d-bfbd505f6e6e.png)

すでに機能提供されているPower BI Dataflowsも変換処理をローコードかつPower BI Service上で実装できるものであり、dataflowという言葉はMicrosoft製品ではデータ変換機能を指すような流れとなっています。

## 手順

それでは以下の手順で実際に試してみます。
docsのチュートリアルがなかなか親切ですが、補完するような形で画面イメージを案内いたします。

1. Pi Webシミュレータ、IoT Hubの準備
2. Power BI WorkspaceでのStreaming Dataflowsの作成
3. Power BI Desktopからのモデル作成
4. Power BI Service上で確認

docs：
[ストリーミング データフロー (プレビュー)](https://docs.microsoft.com/ja-jp/power-bi/transform-model/dataflows/dataflows-streaming#limitations-and-considerations)

### 前提条件

Power BI ライセンス：Premium以上が必要です。(Power BI Embedded環境で試す場合はProでOK)

### 制限事項

その他制限事項は以下の通り。

>- ストリーミング データ フローを作成および実行するには、Power BI Premium サブスクリプション (容量または PPU) が必要です。
> - ワークスペースごとに許可されるデータフローのタイプは 1 つだけです。
> - 通常データフローとストリーミングデータフローのリンクはできません。
> - A3 より小さい容量では、ストリーミング データ フローを使用できません。
> - テナントでデータフローまたは拡張計算エンジンが有効になっていない場合、ストリーミングデータフローを作成または実行することはできません。
> - ストレージ アカウントに接続されているワークスペースはサポートされていません。
> - 各ストリーミング データ フローは、最大 1 メガバイト/秒のスループットを提供できます。

[制限事項と考慮事項](https://docs.microsoft.com/ja-jp/power-bi/transform-model/dataflows/dataflows-streaming#limitations-and-considerations)

### Pi Webシミュレータ、IoT Hubの準備

データソースを構成します。以下の手順にしたがってIoT Hubを作成してください

[Raspberry Pi オンライン シミュレーターの Azure IoT Hub への接続](https://docs.microsoft.com/ja-jp/azure/iot-hub/iot-hub-raspberry-pi-web-simulator-get-started#what-you-do)

作成後、概要画面からデータの流入が確認できます。
![](.media/iot1.png)
![iot1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/41592712-6425-af3c-3a18-e452fa0e0c72.png)

### Power BI WorkspaceでのStreaming dataflowsの作成

#### ワークスペースの準備

##### Power BI Premium Per User ライセンスを保持している場合

ワークスペースの作成時/設定画面から割当て可能です。


![ws1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/da006333-5f21-458b-3d06-480fff35c8a2.png)

##### Power BI Premium Per Capacity or Azure Power BI Embedded のA3 SKUを利用する場合

Power BI Premium Per Capacityを個人で利用される方はあまりいないと思うので、以下を参考にPower BI Embeddedを利用しましょう。

[Power BI Premium専用機能を従量課金でテストする方法](https://qiita.com/ryoma-nagata/items/08b1e54627853e679fd1)

#### Streaming dataflowsの作成

workspaceからStreaming dataflowsを作成します。


![df1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/e8b7062c-b336-826f-f68c-2f1789586a08.png)


![df2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/a63f2cae-12c0-35f2-8538-111823c081e2.png)

データソースとしてIoT Hub か Event Hubsを選択します。
今回はIoT Hubを選びます。


![df3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/e625691b-a1f5-2c90-914c-edea269e17c4.png)

IoT Hubを利用する場合にはIoTHubの接続文字列ではなく、Event Hub互換エンドポイントを利用することになるので、注意

IoT Hubでは以下の情報を利用します。


![iot2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/d26eaa4e-44b0-66ca-b86e-05dbea99bb96.png)

イベントハブ互換エンドポイントの情報を入力します。


![df4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/1aabbb65-df2e-1943-4eb1-3c89f855b7cd.png)

IoT Hubに送信されているデータの項目を検出可能です。


![df5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/730d0e8e-f293-5fd1-af2d-fc65831d7cab.png)


![df6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/508091f9-67f4-1b04-20b4-e950d335a202.png)


IoT Hubが自動的に付与するタイムスタンプ情報は自動検出されないので、手動で入力します。
Power BI Streaming dataflowsのオーサリング画面上ではプレビューもできない点は注意


![df11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/03994a6d-8712-d6d5-27d0-1d2b3a246165.png)

変換のステップをリボンから選択し、入力と出力の線をつなぐことで変換を実装していきます。


![df8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/1f81e3ab-c721-cc22-fe23-40938f3892fd.png)

変換ステップは出力の線を結ばないとプレビューが表示されないようです。


![df9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/fb1b10c0-258e-da52-90fc-fe8e42d5e457.png)

最終的にはこのようなデータフローになりました。


![df12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/eacc4edc-4934-52b3-8f65-b1a4cc8e621d.png)

保存してワークスペースに戻ります。


データフローの実行ボタンをクリックすることでPower BI Streaming dataflowsが開始します。
![ws2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/af2f704f-f7a5-d048-7391-9eedda30cb6c.png)



### Power BI Desktopからのモデル作成

Power BI Desktopでモデル化を行います。
データフローのコネクタから、先ほど作成したStreaming Dataflowsを選択すると、hotとColdが選択できます。
※Power BI データフローコネクタではhotのみの表示になります。今後データフローコネクタに統合されるようです。


![pbi1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/567b1b13-9238-5e05-3e7b-440110a943ec.png)

プレビューが表示されます。hotデータとcoldデータが双方取得可能です。
リアルタイムデータについてはhot、履歴分析用データはcoldです。
それぞれの保持期限は今のところ情報がないようです（見落としているだけかも）



![pbi2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/ff6214a4-7736-9b91-4980-a50b4db79e21.png)

Power BI のデータセット（モデル）を作成していきます。
ストリーミングデータ同士のリレーションシップを構成したり、他のデータともリレーションシップを構成可能です。
以下のようにDevice マスタ的なテーブルをつないでみました。

![pbi3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/1e34975c-35a9-6c58-f5e9-b28fc14de615.png)


>**Note**
>  
> このようにリアルタイムデータを利用したデータモデルを作成できるというのが従来のリアルタイムデータセットと最も違う点となります。

簡単なレポートを作成して発行してみます


![pbi4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/d66afcfc-5cf7-157e-ea9e-ffa09353c216.png)

### Power BI Service上で確認

発行後、レポートを確認すると認証エラー


![pbi5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/67dff053-66b5-5e8f-1678-d2420bcac51c.png)

データセットの認証情報を修正します。このあたりは通常のデータセットと同じ取り扱いですね。

設定画面に進みます。

![pbi6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/88e83a89-b5a9-e086-6257-da9f985d026f.png)

資格情報の編集からサインインをすることで認証が構成されます。

![pbi7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/6ac9d13f-9ee3-cb72-edc7-38ee4ef14c4a.png)

レポートを確認します。
途中PiWebシミュレータを止めたのでいびつになっていますが、きちんと最新情報が表示されています。
Streaming Dataflows上のテーブルに対してダイレクトクエリモードなのでレポートを更新すると常に最新のデータが取得されます。

![pbi8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/6ed05167-b414-4e7f-168b-a6dc01a429fc.png)