DAX / Data Modelについて

本ブログのメインコンテンツの1つは「Power Queryについて」の記事にて図説したDAX / Data Model(データモデル)です。念のため、もう一度画像をアップロードしておきますが、見てお分かりの通り、データの加工を担当するPower Queryを前工程とするならば、DAX / Data ModelはBIツールを使ってデータ分析を可能にする後工程に当たります。

f:id:marshal115:20200424200205p:plain

今回はDAX / Data Modelとは何かを簡単に紹介していきたいと思いますが、DAX / Data Modelという言葉自体、1つではなく、2つの概念になります。なぜ2つを1つにまとめたかといいますと、実はこの後工程を担う2つのキーワード、どちらかが欠けてもダメ、という意味で1つのキーワードにまとめているのです。

Data Modelとは

Data Model(以下「データモデル」)は簡単に言ってしまえば、

分析・レポーティング用に複数のデータセットに関係性を持たせたもの

となります。この概念はデータウェアハウス(DWH)*1の概念と類似しており、下図はモデリング*2に際してのベスト・プラクティスといわれる「スタースキーマ」です。

f:id:marshal115:20200416005230p:plain

スタースキーマはファクトテーブル(上図では売上Factテーブル)を囲むようにして、ディメンションテーブル(各Dimテーブル)が1対*(1-N)というリレーション(関係性)で定義付けされたものであり、BI*3を構築する当たって多くのケースで最適なスキーマとなります。

Dimテーブルは一意の値の列が必ず1つ存在する必要がありますが、Factテーブルはこれに限りません(例:商品CDが重複した列、等)。また、リレーションは一度定義さえしてしまえば、例えばDim店舗の列「店舗」で”店舗A”をフィルターした場合、この"店舗A"というレコードが自動的にFact売上テーブルの"店舗A"の全ての行をフィルターしてくれます。これをフィルターの伝播(英語ではFilter Propagation)と言いますが、DAX / Data Modelを学ぶ上で非常に重要な概念となります。

基本的にスタースキーマであれば、Dimテーブルにある列でフィルターを行っていくため、Factテーブルでは数値列(例:数量・単価・金額等)以外、日付コードや店舗コード、商品コード等のマッチング用のキーだけが残ります。下図はExcel版Data Modelのモデルビューの例ですが、Factテーブルにある全ての列がグレイアウト(操作ができず、グレイ色で表示)され、これらの列はPivot Tableを作成した際に表示されません。その結果、殆どのケースにおいて、Factテーブルは下記に紹介するDAX*4で記載された計算式(メジャー) だけが残るテーブルとなります。

f:id:marshal115:20200416015813p:plain

DAXとは

ここまで話して、難しいと感じた方は非常に良い反応だと思います。なぜなら、私も昔はここを理解するため、非常に苦しんだ経験があり、まして普段の業務でExcelしか触れる機会がない方にとっては未知の領域だからです。データベースの知識をお持ちの方はすんなり話が入ってくると思いますが、大多数の方はそうでないのが現実です。

一方でDAXData Analysis eXpressionの略で、直訳すると「データ分析数式」となりますが、公式サイトの日本語解説を見ると、

関数、演算子、および定数を集めたもので、これらを数式または式の中で使用して、1 つまたは複数の値を計算して返すことができます

とあります。

docs.microsoft.com

正直、なんのこっちゃ、と理解するのに苦労する日本語ですが、簡単に言えばこういうことです。

DAXExcel関数にステロイド注射をしたもの

と考えてください。どうでしょう、公式サイトの説明と全く違うが、的を得た表現だと思います。つまり、DAXExcel関数と同じ機能を持つが、それよりもパワフルである、ということです。何がパワフルかというと、DAXにはExcel関数にはない関数(例:SUMX、CALCULATE、ALL等)があり、これらのDAX関数を駆使することでExcel単体では到底実現できない計算が可能になるのです。

さて、DAXですが、いくつか重要な特徴がありますので、まとめておきます。この段階でこれら全てを覚える必要はないですが、とても重要な概念ですので、可能な限り覚えておくことをお勧めします。

  • DAXはData Modelに対してビジネスに必要な指標を計算するために作られた関数
  • DAXはポータブル関数(一度定義すればどこでも使用可能)
  • DAXExcelと同じ名称の関数が数多い(SUM / AVERAGE / IF…AND…)
  • Excelはセル単位、DAXは列単位で考える
  • 最適化するために多くの労力を要する(Excel関数の感覚ではない)
  • DAXは関数言語、かつ、クエリ言語(スカラー値の算出やテーブルクエリとしても機能)
  • Power Queryとの違いは
    a) Power Query: データを整備する
    b) DAX: 整備されたデータを評価する
  • DAXはData Modelとセットで考える必要がある(実はDAXよりもData Modelのほうが重要度は高い)
  • DAXはシンプルだが、簡単ではない(マスターすることが困難)
上記項目は今後、何度も出てくることですので、少しずつ覚えていけば良いと思います。

まとめ

さて、いかがだったでしょうか?人によってはいきなり難しい話となってしまったかもしれませんが、DAX / Data Modelの根本的な部分について凝縮して解説しました。前工程のPower Queryと後工程のDAX / Data Model、どちらもデータに対する処理を行うことは同じですが、かなり色合いが違うことがわかるかと思います。

私はPower Queryから入門したのですが、感覚的にExcelユーザーであればPower Queryのほうが入りやすいと思います。DAX / Data Modelは一般のビジネスユーザーにとってやや敷居が高いですが、意思決定に役立つ分析結果を人間が迅速に理解できるようにするための最終段階(データの可視化やKPI*5の算出)に欠かせない部分ですので、こちらを習得する意義は非常に高いといえます。

最終的に多くの方がDAXで苦しむことになると思いますので、本ブログもそちらについて基礎的なことを中心に紹介していきたいと思います。 

*1:一定の期間ごとに切り出したデータを正規化して、上書きすることなく蓄積していくためのデータベース。Microsoft社の製品だとSQL ServerはAzure SQL Server等がこれに当たる

*2:データモデルを組むこと

*3:BI = Business Intelligence略。BIツールを用いて、大量データの分析やその結果を可視化することで経営上の意思決定を迅速にサポートする手法

*4:DAX = Data Analysis eXpressionの略

*5:Key Performance Indicator(重要業績指標)