データプラットフォームとしての Power BI について考える

Qiita初投稿です。読み苦しいと思いますがどうぞお付き合いください。

現在、ある企業の経営企画部門でデータ分析の仕事に携わっております。そこで日々 Power BI と悪戦苦闘して得た知見を、拙いものではありますが共有できればと思います。

※ 2019.12.23　一部、加筆修正いたしました。

##0. はじめに
今年（2019年）の初めごろから Power BI を全社で導入して組織内のデータ活用を推進しようとしていますが、１年たった今でもいまひとつうまくいっていません。原因はさまざまなのですが、その１つとして、「必要な人が必要なデータを自分で手に入れられる仕組み ＝ **データプラットフォーム**」がきちんと整備されていないことがありました。

そこで、とりあえず Power BI をこのデータプラットフォームとして活用できないか？と考え、関連機能について色々と調べて考察した内容を共有したいと思います。ただ、現時点でも試行錯誤の道半ばなので、もし「それは違う！」とか「もっとこうやった方がいい！」といった箇所があれば是非ご指摘をお願いいたします。

##1. データプラットフォームとは？
データプラットフォームとは、データ分析やデータ活用のために組織内データを共有するための基盤のことで、**「データ分析基盤」**と言ったりもします。具体的には、データを格納するためのデータベースやストレージ、そしてそれらの間でデータを受け渡したり変換したりするETLなどで構成されるアーキテクチャとなります。

最近では下記のような**「データレイク層」「データウェアハウス層」「データマート層」**の三層構造をとることが多いようです。三層に分ける主な理由としては、データの加工プロセスを区切ることでデータの流れを整理できることと、ユーザーの役割によって違うデータのニーズに対応するためです。

＜データプラットフォーム構成図＞
![DataPlatform.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/499524/b8758c08-c4ce-fffb-6fae-78d3ff68d889.jpeg)

まず、データレイクに業務システムなどから取得したデータを加工せずにそのままの状態で蓄積します。次にデータウェアハウスでそのデータをサブジェクト（主題）ごとに統合したり、正規化したりして、データを構造化した状態で格納します。最後にデータマートでそれぞれの部門ごとに必要となるレポートや集計にあわせたモデリングをして、分配します。

こうすると、例えば機械学習にデータを利用したいデータサイエンティストなどはデータレイクから加工されていない生のデータを取得でき、また一方で、先月の売り上げの集計をしたい事務ユーザーなどはデータマートのきちんと整形加工されたデータを利用することができます。

しかし、この構成はあくまでも解の一つであり、必ずしも「唯一絶対の解」ではありません。この分野では昔から多くの議論がなされていて、様々な『あるべき論』が存在します。どういった構成をとるべきかはデータの状態や組織の環境にもよるので色々と検討をしてみてください。

以下に私が参考になったと思った書籍や記事をあげておきます。

- [『10年戦えるデータ分析入門』](https://www.amazon.co.jp/dp/B010CQD4Y0)
- [データ基盤の3分類と進化的データモデリング](https://speakerdeck.com/yuzutas0/20190213)

##2. 構築時の課題
一般的に企業でデータプラットフォームを構築する場合は、AWS、Azure、GCPなどのパブリッククラウドのソリューションを利用する例が多いと思います。例えば、Amazon Redshift や Google BigQuery などがデータウェアハウスとしてよく用いられます。

しかし、このような本格的なアーキテクチャをクラウド上に構築するには、エンジニアの人件費も含め、それなりの初期コストと運用コストがかかります。また、企業によっては情報セキュリティ上の理由で、こういったクラウドのソリューション導入のハードルが高かったりする場合があります（弊社がそうでした）。

そうなると、なかなか現場レベル（ビジネス部門）で気軽にスモールスタートで始めてみるということは難しくなります。

##3. Power BI で出来ないか？
そこで、Power BI をデータプラットフォームとして利用することを考えてみました。**Power BI は単なるデータの可視化・分析ツールではありません。**企業のBI（Business Intelligence）を実現するためのクラウドサービスで、組織内でデータを共有し活用するための機能が備わっています。

しかも、それらの機能は特に難しいスキルを必要とせず、普段 Power BI でレポートを作る際に使っている Power Query などで利用できます。今回はそれらの機能を使って、気軽に始められる簡易的なデータプラットフォームを構築してみました。

※ ちなみに Power BI のライセンスは **Proライセンス**（≠Premiumライセンス）です。

###Power BI dataflows
Power BI dataflows（以下、dataflows）は2019年4月にGAになった機能で、Power BI Service（クラウド）上でデータの前処理と共有を行うことができます。様々なデータソースに接続することができ、取得したデータを Power Query で加工整形し、共有します。

＜dataflows概念図（[公式Docsより引用](https://docs.microsoft.com/ja-jp/power-bi/service-dataflows-overview)）＞
![Dataflow.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/499524/be44df0d-a27b-620c-52f8-a7f84411414f.jpeg)

組織内の業務システムごとに分散しているデータを統合して、ひとつのサブジェクト（主題）ごとにまとめることができます。また、Common Data Model（CDM）というあらかじめ用意されている標準スキーマにデータをマッピングをすることで、色々な恩恵を受けることができる、、らしいです（今のところ詳細不明）。

Proライセンスだとdataflowsではクエリのマージやアペンドができない（更新ができない）仕様ですが、データをロードしなければこれらの処理も可能です。ロードした場合としない場合の違いはまた別の機会に記事にしたいと思います。

- [Proライセンス内でのクエリのマージやアペンド方法](https://www.red-gate.com/simple-talk/blogs/merging-tables-in-power-bi-dataflows-with-pro-subscription/)
- Proライセンスだとdataflows間のリンクは不可能（Premiumライセンスだと可）
- データ容量はワークスペース当たり10GB、、少ない。。

###ワークスペース間のデータセット共有
2019年12月現在ではまだプレビュー機能ですが、データセットをワークスペースを跨いで共有することができるようになりました。そうやって聞くと「なんか管理が大変になるだけの余計な機能だなぁ」と私も最初思ったのですが、これに関する色々な記事を読んだところ、どうやらそうではないようです。

この機能の意図としては、データセットのワークスペースとレポートやダッシュボードのワークスペースを分離できることにあるようです。つまり、特定のユーザーと共有をしたいデータセットだけが格納されたワークスペース（簡易的なデータマート）を作れるようになったことです。

＜データセットの分離と共有（[引用元](https://ssbipolar.com/2019/06/22/quick-tip-creating-data-workspaces-for-dataflows-and-shared-datasets/)）＞
![Dataset.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/499524/d8105a08-c049-dc52-a72d-1418ff44ee0e.jpeg)

このデータマート的ワークスペース上から取得したデータセットで、それぞれのユーザーがレポートやダッシュボードを作成したり、それらをまとめてアプリとして配信したりします。ちなみにユーザーは取得したデータセットの編集することができません。

つまり、**データをモデリングをする人**と**レポート・ダッシュボードを作成する人**が分離されます。

これに関しては賛否あると思いますが、弊社ではちゃんとしたデータモデリング（スタースキーマとか！）ができる人が限られているため、このような分離方式の運用が向いているような気がして採用をしました。

##4. やってみた！

以上の機能を利用して、Power BI Service 上で簡易的なデータプラットフォームを作ってみました。データレイク層については Proライセンスのため、dataflows間のリンクができなかったり、容量が少なかったりすることもあり、以前からあるオンプレの SQL Server とクラウドストレージ（AWS S3）を利用してます。

＜Power BI を利用したデータプラットフォーム概念図＞
![NewPlatform.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/499524/cf264b9c-e236-ffcf-ddc7-4ca4a5e3aaff.jpeg)

- データレイク層に接続できるのはデータ管理者のみ
- データ管理者はデータウェアハウス層のモデリングを担当する
- データウェアハウス層（dataflows）に接続できるのは上位ユーザーのみ
- 上位ユーザーはデータマート層のモデリングを担当する
- データマート層には一般ユーザーも接続できる
- データマート層はアクセス権限も含め部署やプロジェクトごとに分けられている
- 一般ユーザーはデータマートからレポートやアプリを作成する
- ワークスペースは全て「新しいワークスペース」を利用する

##5. 現時点の課題
**Excel からデータを取得できない**
Excel の Power Query（取得と変換）から dataflows に接続することができるともっと便利になると思うのですが、現状、Proライセンスの範囲内だと難しいです。Premiumライセンスだとひと手間かければ何とかできそう。

**やはり容量が足りない**
Proライセンスでの dataflows の容量がワークスペースあたり10GBなので、データウェアハウスとして利用するのは容量が少なすぎます。まぁ、そもそもデータウェアハウスではないし、金出して Premium ライセンス買えや！って話なんですが。。（Premiumだとテナントあたり100TB！）

**データの汎用化と共通化がしんどい**
データプラットフォームは組織内のデータ活用の基盤なので、公共性がとても高いです。社内の様々なニーズを汲み取って、その最大公約数を導き出すミクロ的視点と、企業としてどういうデータをどういう形で管理すべきかというマクロ的視点が必要となり、かなり調整が大変な仕事になります。その割に地味で評価されません。。

##6. 感想
とりあえず結論としては Power BI をデータプラットフォームとして使うなら Premiumライセンスが絶対あったほうが良い！なのですが、Proライセンス内でも思ったより色々と試すことができます。最初は全社レベルではなく、ご自身の所属する部門内のデータだけでもよいので、とにかく試してみることが大事です。

今後は Power BI もしくは Power Platform としてもこの辺の機能が充実していくようなので、そこに期待したいと思います。

以上、拙い文章ではありましたが、最後まで読んでいただきありがとうございました。