BIツールはデータソースにアクセスして、データをクエリする(必要な形に変更して結果を表示させること)のですが、Power BIはDAX*1を用いて、Excel Power PivotはMDX*2を用いていることが特徴です。
- Power BIの差別化要素1 -価格体系
- Power BIの差別化要素2 -モデリング機能
- Power BIの差別化要素3 -ETL機能
- Power BIの差別化要素4 -Excelで分析機能
- Power BIの差別化要素5 -時系列操作関数の扱いやすさ
- Power BIの差別化要素6 -関数言語及びクエリ言語
- Power BIの差別化要素7 -計算エンジン
- Power BIの差別化要素8 -Microsoftの他のサービスとの連携
- Power BIの差別化要素9 -1つのテクノロジー(BIとしてのExcel)
- Power BIの差別化要素10 -SaaS型BIソリューション
Tabularモデルとは
DAXは多くのツールで使用可能であるが、Tabularという内部エンジンを共有しています。それゆえ、Tabularという言葉はTabularモデルとも呼ばれており、このエンジンはDAX及びMDXをクエリ言語として活用しています。Power BI、Excel Power Pivotのどちらを使うにせよ、それぞれのツールにて生成されたレポートは必ず、Tabularモデルに対してDAX(Power BI)もしくはMDX(Excel Power Pivot)を使ってクエリを発行しています。
MDXは2005年に登場した多次元分析キューブと呼ばれる成熟した分析用テクノロジーであり、その概念は必要な”切り口”の指標を可能な限り事前に計算させておくこと(Cubeという概念)により、切り口を切り替えた際の結果を素早く表示させることにあります。現在は一部の大企業のIT部門が構築・メンテナンスを行っているものの、非常に高い専門性が必要とされることから一般のビジネスユーザーには縁のない言語となっています。
一方、Tabularモデル(DAX)は2012年に登場し、最初はExcel Power Pivotに搭載されていました。Tabularモデルは1つ以上の列を含むモデルであり、リレーションシップ、階層、階層のレベル、計算式等を定義したものであり、Power BIにおけるモデルは全てTabularとなります。
現在の主流はDAXベースのTabularモデルであり、理由はその処理速度がMDXよりも圧倒的に速いからです。以前までMDXでBI構築を行っていた業界トップの人たちもMDXから卒業しており、DAXをマスターすることがPower BIを用いてBIソリューションを構築するディファクト・スタンダードとなっています。
FEとSE
Tabularモデルは2つのエンジンを使用してクエリを処理しており、下図がこのエンジンを説明したものとなります。
この図が示す内容は、ユーザーがPower BIレポートを操作すると、クライアント(Power BI DesktopやPower BI Service)からDAXクエリがTabular Modelに送信される仕組みです。Tabular Modelはこのクエリを解析し、エラーのチェックを行い、実行ツリー(Execution Tree) と呼ばれる一連の処理手順を生成します。この実行ツリーでは、データのスキャン、フィルター、集計などの具体的な操作が行われ、結果が求められる形で返されます。
すべての処理は、Formula Engine(FE) によって実行されますが、Formula Engineには直接データにアクセスすることができないという制約があります。Formula Engineは、受け取ったデータを基に計算や変換を行い、結果を返しますが、実際のデータへのアクセスはStorage Engine(SE) を通じて行われます(図中でSEを経由していることがその動きを示しています)。
そのため、FEがデータを必要とする際には、必ずSEに問い合わせを行います。SEは、データの保存場所に応じて適切な方法で応答します。たとえば、データがインメモリで管理されている場合はVertiPaq (FEはDAXクエリ(正確にはシンプルな処理だけを行うことができるxmSQL*3)をSEに対して送る)を使用し、データベースに直接アクセスする必要がある場合はDirectQuery (FEはSQLクエリをSEに対して送る) を通じて応答します。この連携により、Power BIのクエリ処理が効率的かつ柔軟に実現されています。
なお、重要な点として、センシティブな情報の取り扱いは常にSEレベルで適用されるため、処理はSE内で完結し、データがこのレイヤーから漏れることはありません。また、FEとSEは個別に機能するものではなく、必ず一緒に機能することになります。
FE: Formula Engine
リクエストを処理し、クエリプランを生成・実行。FEはDAXやMDXによってリクエストされた全ての処理を行うことができ、非常に複雑なリクエストにも対応可能です。FEは1つですが、複数のStorage Engine(DirectQueryやインポートモードで使うVertipaqエンジン)に応答することができます。
SE: Storage Engine
FEが要求したリクエストに応えるため、Tabularモデルからデータを取得
このSE層での実行は更に2つに分かれており、VertipaqとDirectQueryによって処理されます。Vertipaqはデータソースから定期的に更新されるデータをインメモリデータとしてコピーを保持しています(インポートモード)。一方でDirectQueryはオリジナルのデータソースに直接クエリを発行して、データを取得します。DirectQueryはVertipaqとは異なり、データをインメモリに保持せず、コピーも作ることもありません。
クエリのパフォーマンスを比較すると、インメモリにデータを保持するVertipaqが圧倒的に速く、Power BIを使う際には
特別な理由がないか限り、常にVertipaqを活用=インポートモードを使用
することがベストプラクティスとなります。
なお、特別な理由とはこの場合、以下のようなケースが挙げられます。
- データモデルのサイズが大きすぎてメモリ(RAM*4)に格納できない場合。ただし、クエリ・パフォーマンス(Power BIのビジュアルがインターラクティヴに相互反映されるまでの時間)はデータソースのハードウェアに左右される
- データの更新頻度が頻繁であり、Power BIで作ったレポートが常に最新時点のものを表示させる必要がある場合。ただし、この場合も結果が表示されるまでにかかる時間がリーズナブルであることが条件
- 会社の規定でデータがオリジナルのデータソースに保持されなければいけない場合(=インポートモードが使用できない場合)
FEとSEはそれぞれ明確な違いがあり、例えるなら下図が最も分かりやすいでしょう。
FEは例えるならば高級スポーツカーであり、様々な細かいことを実現できることが特徴です。一方のSEはとにかくスピードに特化したエンジンであり、複雑なことはできないが、シンプルな処理であればスピードは爆速となっています。これら2つのエンジンは非常に奥深く、ここでは解説しきれないので、今回はこれにて終わりにしたいと思います。
まとめ
- TabularモデルはDAXやMDXをクエリ言語として使用
- MDXは現在殆ど使用されておらず、Power BIではDAXがネイティブ言語となる
- Excel Power Pivotを使った場合、DAX式はMDXに変換されてPivotが生成される
- Tabularモデルは2つのエンジンを使用しており、FEとSEがこれに当たる
- FEは複雑なリクエストも含め、全て処理可能であるが、SEと比べ処理速度が劣る
- SEは簡単な処理(例:DAXでいえばSUMやCOUNTROWS等)を最速で処理できるが、複雑な処理はFEが行うことになる
- SEにはDirectQueryがあるが、データをメモリに格納せず、直接データソースをクエリする。パフォーマンスはVertipaq(インポートモード)よりも遅いことが特徴であり、特別な事由がない限り、インポートモードがベストプラクティスとなる
*1:Data Analysis eXpressionの略。Power BIのネイティブ言語であり、データモデルをベースに様々な指標を計算するの使用される。Power BIを使う上で修得がマストな言語となる
*2:Multi-Demension eXpressionの略。MDXはDAXが登場する前のBI業界で主流であった言語であるが、その複雑さゆえに一部のITプロフェッショナルだけが取り扱うことができた言語であり、現在は余程のことがない限り、”引退した言語”と言われている
*3:Formula Engine(FE)とStorage Engine(SE)の間での通信を最適化するためのバイナリ構造を、人間が読みやすい形で表現したもの
*4:Random Access Memoryの略。Power BIにインポートされたデータは全てこの中に格納された状態となっている。メモリサイズが小さいPCは当然ながら処理が遅くなるため、Power BIをストレスなく使用するためには通常16GB以上のスペックが望ましい