Data Analysis Expressions (DAX) の概要

Data Analysis Expressions (DAX) 言語は、PowerPivot テーブル (計算列) および Excel ピボットテーブル (メジャー) 内のカスタム計算を定義するために使用できる数式言語です。 DAX には、Excel の数式で使用される関数と、リレーショナル データでの作業と動的な集計用に設計された関数があります。

ここでは、次の概念について説明します。

  • DAX 式の用途

  • DAX 式の作成方法

  • DAX で実行できる操作の種類

DAX 式の概要

DAX の数式は Excel の数式とよく似ています。 DAX の数式を作成するには、等号に続けて関数名や式、必要な値や引数を入力します。 Excel と同様に、DAX にも、文字列の操作、日時を使った計算、条件値の作成などを行うことのできるさまざまな関数が用意されています。

ただし、DAX の数式には次のような重要な違いがあります。

  • DAX 関数は、常に列全体またはテーブル全体を参照します。 テーブルまたは列の特定の値のみを使用する場合は、数式にフィルターを追加できます。

  • 行ごとに計算をカスタマイズする場合は、現在の行の値か関連する値を使用して計算を実行できる PowerPivot の関数を使用します。この計算はコンテキストによって異なります。

  • DAX には、単一の値ではなくテーブルを結果として返す種類の関数が含まれています。 これらの関数を使用すると、他の関数に入力を渡すことができるので、テーブル全体または列全体の値を計算することができます。

  • 一部の DAX 関数にはタイム インテリジェンス機能があり、それにより有意な日付範囲を使用して計算を作成し、その結果を並列期間で比較することができます。

数式の用途

DAX 式は、PowerPivot テーブル内または Excel のピボットテーブル内で使用できます。

  • 列を追加してから数式バーに式を入力すると、計算列で数式を使用できます。 これらの数式は、PowerPivot ウィンドウで作成できます。 詳細については、「計算列」を参照してください。

  • メジャーで数式を使用できます。 Excel でこれらの数式を作成するには、既存の PowerPivot ピボットテーブルまたはピボットグラフで [メジャーの追加] をクリックします。 詳細については、「PowerPivot で使用するメジャー」を参照してください。

同じ数式でも、その数式が計算列で使用されるか、メジャーで使用されるかによって動作が異なります。 計算列では、数式は、常に、テーブル全体で、その列のすべての行に適用されます。 行コンテキストに応じて、値は変更される可能性があります。 一方、メジャーでは、結果の計算はコンテキストによって大幅に異なります。 つまり、ピボットテーブルのデザインや、選択した行見出しや列見出しなどは、計算で使用される値に影響します。 詳細については、「DAX の数式のコンテキスト」を参照してください。

数式バーを使用した数式の作成

PowerPivot には、Excel と同様、数式を簡単に作成および編集するための数式バーと、入力ミスや構文エラーを最小限に抑えるためのオートコンプリート機能が用意されています。

テーブル名を入力するには   テーブル名を入力し始めると、 数式オートコンプリート機能により、それらの文字で始まる有効な名前がドロップダウン リストに表示されます。

列名を入力するには   角かっこを入力し、現在のテーブルの列の一覧から列を選択します。 別のテーブルの列の場合は、テーブル名の最初の文字の入力を開始し、[オートコンプリート] ボックスの一覧から列を選択します。

数式の作成方法に関するチュートリアルについては、「数式の作成」を参照してください。

オートコンプリート機能の使用に関するヒント

  • 数式のオートコンプリート機能は、関数が入れ子になっている既存の数式の途中で使用できます。 挿入ポイントの直前のテキストが、ドロップダウン リストに値を表示するために使用されます。挿入ポイントより後ろのすべてのテキストは変更されません。

  • 定数に対して作成した定義名はオートコンプリートのドロップダウン リストに表示されませんが、入力は可能です。

  • PowerPivot には、関数の閉じかっこを追加する機能や、かっこを自動的に照合する機能はありません。 数式を保存または使用するには、各関数の構文に誤りがないことをユーザー自身が確認する必要があります。

数式での複数の関数の使用

関数は入れ子にすることができます。つまり、ある関数の結果を別の関数の引数として使用できます。 計算列では、最大で 64 レベルの関数を入れ子にできます。 ただし、入れ子化によって数式の作成やトラブルシューティングが困難になることがあります。

多くの PowerPivot 関数は、入れ子になった関数としてのみ使用されるように設計されています。 これらの関数はテーブルを返します。このテーブルは、結果として PowerPivot ブックに直接保存することはできませんが、入力としてテーブル関数に渡す必要があります。 たとえば、SUMX 関数、AVERAGEX 関数、および MINX 関数には、第 1 引数としてテーブルが必要です。

注意

メジャー内の関数の入れ子化には、いくつかの制限があります。これらの制限は、列間の依存関係から必要になる多数の計算によるパフォーマンスへの影響を防ぐために設けられています。

DAX 関数と Excel 関数の比較

DAX の関数ライブラリは Excel の関数ライブラリをベースとしていますが、これらのライブラリの間にはさまざまな違いがあります。 ここでは、Excel 関数と DAX 関数の異なる点と似ている点を要約して述べます。

  • DAX 関数には、Excel 関数と同名で全体的な動作も同じものが数多く存在しますが、引数として受け取る入力の型が変更されており、戻り値のデータ型が異なる場合もあります。 一般に、ある程度の変更を加えなければ、DAX 式を Excel ブックで使用したり、Excel の数式を PowerPivot ブックで使用したりすることはできません。

  • DAX 関数には、一定範囲のセルを渡したり、参照として範囲を渡すことはできません。DAX 関数が参照として受け取るのは、列またはテーブルです。

  • DAX の日付と時刻の関数は、datetime データ型を返します。 一方、Excel の日付と時刻の関数は、日付をシリアル番号で表す整数を返します。

  • 新しい DAX 関数の多くは、値のテーブルを返すか、値のテーブルを入力として計算を行います。 一方、Excel には、配列を扱うことのできる関数はありますが、テーブルを返す関数はありません。 テーブルや列全体を容易に参照できることは、PowerPivot の新機能の 1 つです。

  • DAX には、Excel の配列やベクトル形式の参照関数に似た新しい参照関数が用意されています。 ただし、DAX 関数では、テーブル間でリレーションシップが確立している必要があります。

  • DAX は、Excel にある variant データ型をサポートしていません。 列のデータは、常に同じデータ型であることを前提としています。 データが同じ型でない場合、DAX は、その列全体のデータ型をすべての値に対応するデータ型に変更します。

トップに戻る

DAX データ型

異なるデータ型をサポートするさまざまなデータ ソースから PowerPivot ワークシートにデータをインポートできます。 ブックにデータをインポートするか読み込んだ後、そのデータを計算に使用したりピボットテーブルで使用したりすると、データがいずれかの PowerPivot データ型に変換されます。 データ型の一覧については、「PowerPivot ブックでサポートされているデータ型」を参照してください。

table データ型は、DAX の新しいデータ型であり、多数の新しい関数の入力または出力に使用されます。 たとえば、FILTER 関数は、入力としてテーブルを受け取り、フィルター条件を満たした行のみを含んだ別のテーブルを出力します。 テーブル関数と集計関数を組み合わせることにより、動的に定義されるデータセットに対して複雑な計算を実行することができます。 詳細については、「数式での集計」を参照してください。

トップに戻る

数式とリレーショナル モデル

PowerPivot ウィンドウは、複数のテーブルのデータを使用して作業を行う場所であり、リレーショナル モデルでテーブルの関連付けを行う場所です。 このモデルでは、テーブルはリレーションシップによって相互に関連付けられます。これによって、他のテーブルの列との相関関係を作成して、より有益な計算を行うことができます。 たとえば、関連テーブルの値を合計する数式を作成して、その値を 1 つのセルに保存できます。 また、関連テーブルの行を制御するために、テーブルと列にフィルターを適用することもできます。 詳細については、「リレーションシップの概要」を参照してください。

リレーションシップを使用するとテーブルをリンクできるため、異なるテーブルの複数の列のデータを含むピボットテーブルを作成することもできます。

ただし、数式ではテーブルおよび列全体を使用するため、Excel の場合とは異なる計算をデザインする必要があります。

  • 一般的に、列内の DAX 式は、常に列内の値セット全体に適用されます (一部の行またはセルのみに適用されることはありません)。

  • PowerPivot のテーブルの各行には同じ数の列が含まれ、同じ列のすべての行には同じデータ型が含まれている必要があります。

  • 複数のテーブルがリレーションシップによって関連付けられている場合、キーとして使用される 2 つの列では、大部分の値が一致する必要があります。 PowerPivot では参照整合性が強制されないため、キー列に一致しない値があってもリレーションシップを作成できます。 ただし、空白または一致しない値が含まれていると、数式の結果およびピボットテーブルの外観に影響を及ぼす場合があります。 詳細については、「数式内でのリレーションシップと参照」を参照してください。

  • リレーションシップを使用してブック内のテーブルをリンクする場合は、数式を評価するスコープ (またはコンテキストとも呼ばれる) が拡大されます。 たとえば、ピボットテーブル内の数式は、ピボットテーブルのフィルターや、列見出しおよび行見出しの影響を受けることがあります。 コンテキストを操作する数式を記述することもできますが、コンテキストにより、予期しない方法で結果が変更される可能性もあります。 詳細については、「DAX の数式のコンテキスト」を参照してください。

トップに戻る

計算列とメジャー

PowerPivot では、計算列またはメジャー内で数式を作成できます。

計算列

計算列は、既存の PowerPivot テーブルに追加する列です。 列に値を貼り付けるかインポートする代わりに、列値を定義する DAX 式を作成します。 ピボットテーブル (またはピボットグラフ) に PowerPivot テーブルを含めると、他のデータ列と同じように計算列を使用できます。

計算列の数式は、Excel で作成される数式とたいへんよく似ています。 ただし、Excel とは異なり、テーブル内の異なる行に異なる数式を作成することはできません。代わりに列全体に自動的に DAX 式が適用されます。

列に数式が含まれている場合は、各行について値が計算されます。 数式を作成するとすぐに、その列に対する結果が計算されます。 列の値が再計算されるのは、基になるデータが更新された場合または手動再計算が使用された場合のみです。

メジャーおよび他の計算列に基づく計算列も作成できます。 ただし、計算列とメジャーに同じ名前は使用しないでください。同じ名前を使用すると、わかりにくくなる可能性があります。 列を参照するときは、誤ってメジャーが呼び出されないように、完全修飾列参照を使用することをお勧めします。

メジャー

メジャーとは、PowerPivot データを使用するピボットテーブル (またはピボットグラフ) 専用に作成される数式のことです。 COUNT や SUM などの標準の集計関数に基づいてメジャーを作成することも、DAX を使用して独自の数式を定義することもできます。 メジャーは、ピボットテーブルの [値] 領域で使用します。 計算結果をピボットテーブルの別の領域に配置する場合は、計算列を使用します。

メジャーを作成するには、先に PowerPivot ブックにピボットテーブルまたはピボットグラフを追加する必要があります。 メジャーの数式を定義しただけでは何も起こりません。メジャーをピボットテーブルにドロップすると効果が現れます。 メジャーを追加すると、ピボットテーブルの [値] 領域のセルごとに数式が評価されます。 行の見出しと列の見出しの組み合わせごとに結果が作成されるため、メジャーの結果は各セルで異なる場合があります。

作成したメジャーの定義は、ソース データ テーブルと共に保存されます。 メジャーは、PowerPivot フィールドの一覧に表示され、ブックのすべてのユーザーが利用できます。

トップに戻る

数式の結果の更新

データ更新と再計算は、別個の操作ですが互いに関連しています。複雑な数式、大量のデータ、または外部データ ソースから取得されるデータを含むデータ モデルをデザインする場合には、これらの操作を理解している必要があります。

データ更新は、外部データ ソースの新しいデータでブック内のデータを更新する処理です。 データは、ユーザーが指定する間隔で手動で更新できます。 また、ブックを SharePoint サイトにパブリッシュした場合、外部ソースからの自動更新をスケジュールすることもできます。

再計算は、数式に対する変更と基になるデータの変更を反映するために、ブック内の数式および計算列の結果を更新する処理です。 再計算は、以下のようにパフォーマンスに影響を及ぼす場合があります。

  • 計算列の数式が変更された場合、列全体に対して、常に数式の結果を再計算する必要があります。

  • ただし、メジャーの数式の結果は、ピボットテーブルまたはピボットグラフのコンテキストにメジャーが配置されるまで計算されません。 数式は、データに対するフィルターに影響を及ぼす行見出しまたは列見出しが変更されたとき、またはピボットテーブルが手動で更新されたときにも再計算されます。

詳細については、次の各トピックを参照してください。

トップに戻る

Analysis Services の表形式モデルと DirectQuery モードとの互換性

一般に、PowerPivot で作成された DAX 数式は Analysis Services の表形式モデルと完全に互換性があります。 ただし、PowerPivot モデルを VertiPaq モードで実行する Analysis Services インスタンスに移行し、DirectQuery モードで配置する場合は、一定の制限があります。

  • DirectQuery モードで配置した場合、一部の DAX 数式が別の結果を返すことがあります。

  • 数式によっては、リレーショナル データ ソースでサポートされない DAX 関数が含まれることが原因で、DirectQuery モードに配置すると検証エラーが発生することがあります。

詳細については、http://go.microsoft.com/fwlink/?LinkId=219172 を参照してください。

関連項目

概念

レポート、グラフ、およびピボットテーブルへの計算の追加

PowerPivot ブックでサポートされているデータ型

Data Analysis Expressions (DAX) の概要

その他の技術情報

Data Analysis Expressions (DAX) リファレンス

PowerPivot で分析するデータの準備

PowerPivot でのデータの追加とメンテナンス