テクテク日記

テクテク=テクノロジー&一歩ずつ(テクテク)

Power BIの差別化要素7 -計算エンジン

BIツールはデータソースにアクセスして、データをクエリする(必要な形に変更して結果を表示させること)のですが、Power BIはDAX*1を用いて、Excel Power PivotはMDX*2を用いていることが特徴です。

  •  ツール費用(無料)
  • モデリング機能(データモデル、複合モデル)
  • ETL機能( Power Queryによるステップ記録機能で完全自動化)
  • Excelで分析」機能
  • 時系列操作関数の扱いやすさ
  • 関数言語(Excelから継承した関数の数々)及びクエリ言語
  • 計算エンジン(SSAS Tabularモデルをベースとした強力な分析エンジン)
  • Microsoftの他のサービスとの連携
  • 1つのテクノロジー(BIとしてのExcel
  • 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つのエンジンを使用してクエリを処理しており、下図がこのエンジンを説明したものとなります。

f:id:marshal115:20210717232857p:plain

FE: Formula Engine

リクエストを処理し、クエリプランを生成・実行。FEはDAXやMDXによってリクエストされた全ての処理を行うことができ、非常に複雑なリクエストにも対応可能

SE: Storage Engine
FEが要求したリクエストに応えるため、Tabularモデルからデータを取得

このSE層での実行は更に2つに分かれており、VertipaqDirectQueryによって処理されます。Vertipaqはデータソースから定期的に更新されるデータをインメモリデータとしてコピーを保持しています(インポートモード)。一方でDirectQueryはオリジナルのデータソースに直接クエリを発行して、データを取得します。DirectQueryVertipaqとは異なり、データをインメモリに保持せず、コピーも作ることもありません。

クエリのパフォーマンスを比較すると、インメモリにデータを保持するVertipaqが圧倒的に速く、Power BIを使う際には

特別な理由がないか限り、常にVertipaqを活用=インポートモードを使用

することがベストプラクティスとなります。

なお、特別な理由とはこの場合、以下のようなケースが挙げられます。

  1. データモデルのサイズが大きすぎてメモリ(RAM*3)に格納できない場合。ただし、クエリ・パフォーマンス(Power BIのビジュアルがインターラクティヴに相互反映されるまでの時間)はデータソースのハードウェアに左右される
  2. データの更新頻度が頻繁であり、Power BIで作ったレポートが常に最新時点のものを表示させる必要がある場合。ただし、この場合も結果が表示されるまでにかかる時間がリーズナブルであることが条件
  3. 会社の規定でデータがオリジナルのデータソースに保持されなければいけない場合(=インポートモードが使用できない場合)

FEとSEはそれぞれ明確な違いがあり、例えるなら下図が最も分かりやすいでしょう。

f:id:marshal115:20210717235705p:plain

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:Random Access Memoryの略。Power BIにインポートされたデータは全てこの中に格納された状態となっている。メモリサイズが小さいPCは当然ながら処理が遅くなるため、Power BIをストレスなく使用するためには通常16GB以上のスペックが望ましい