PowerPivot における Data Analysis Expressions (DAX)

PowerPivot における Data Analysis Expressions (DAX)

重要:  この記事は機械翻訳されています。機械翻訳についての「免責事項」をお読みください。この記事の英語版を参照するには、ここをクリックしてください。

慣れれば最初は、data Analysis Expressions (DAX) 簡単だが、名前に惑わさできないようにします。DAX の基礎は非常に簡単に理解します。まず最初の DAX はプログラミング言語。DAX では、式の言語です。DAX を使用するにカスタム計算を定義する計算列メジャー (集計フィールドとも呼ばれます)。DAX には、Excel の数式で使用する関数やその他の関数がリレーショナル データを使用して、動的の集計を実行するように設計の一部が含まれます。

DAX 数式について

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

ただし、DAX 数式は次の重要な点で異なります。

  • 行単位で計算式をカスタマイズする場合、DAX には、現在の行の値または相対値を使って、コンテキストごとに異なる計算を行うための関数が用意されています。

  • DAX には、結果として 1 つの値ではなく、テーブルを返すタイプの関数があります。このような関数を使用して、他の関数に入力値を渡すことができます。

  • DAX のタイムインテリジェンス関数では、日付の範囲を使用して計算を行い、並行する同じ期間の結果を比較することができます。

DAX 数式を使うケース

DAX 数式は、PowerPivot の計算または計算フィールドで作成できます。

計算列

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

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

列に数式が入力されている場合、値は行ごとに計算されます。数式を作成すると同時に、その列の結果が計算されます。列の値の再計算は、その基となるデータが更新された場合または手動再計算を使った場合にのみ行われます。

計算メジャーに基づくおよびその他の計算列を作成することができます。ただし、使用しないようにするのには、計算列とメジャーを同じ名前結果としてします。列の場合は、誤ってメジャーの呼び出しを防ぐために、完全修飾列参照を使用することをお勧めします。

詳細については、「Power Pivot の計算列」を参照してください。

メジャー

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

明示的なメジャーの数式を定義するとき、ピボット テーブルには、[メジャーを追加するまで何も起こりません。メジャーを追加するときに、数式は、ピボット テーブルのの領域の各セルに評価されます。行と列のヘッダーの組み合わせの結果を作成すると、ために対象となる各セルのメジャーの結果が異なることができます。

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

詳細については、 Power Pivot のメジャーを参照してください。

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

Excel PowerPivotと同じく、  にも、数式の作成や編集を簡単に行うための数式バーと、入力や構文エラーを最小限に抑えるためのオートコンプリート機能があります。

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

列名を入力するには   ブラケットを入力し、現在のテーブルの列リストから目的の列を選びます。別のテーブルにある列については、テーブル名の最初の文字から入力を開始し、オートコンプリートのドロップダウン リストから目的の列を選びます。

数式の作成方法の詳細とチュートリアルについては、「Power Pivot での計算式の作成」を参照してください。

オートコンプリート使用のヒント

入れ子になった既存の関数の途中で、数式オートコンプリートを使用できます。挿入ポイントの直前のテキストに基づいてドロップダウン リストの値が表示され、挿入ポイントの後のすべてのテキストは元のまま残ります。

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

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

1 つの数式における複数の関数の使用

関数はネストできます。つまり、ある関数の結果を別の関数の引数として使用することができます。計算列では 64 レベルまで関数をネストできます。しかし、ネストにより、数式の作成やトラブルシューティングが難しくなることがあります。

DAX 関数の多くは、ネストした関数としてのみ使うように設計されています。こういった関数はテーブルを返しますが、これを結果として直接保存することはできません。 テーブル関数への入力として渡す必要があります。たとえば、関数 SUMX、AVERAGEX、および MINX  の 1 つめの引数には、必ずテーブルを指定しなければなりません。

注: 関数の入れ子制限は、メジャー、列間の依存関係に必要な多くの計算がパフォーマンスに影響いないことを確認する内に存在します。

DAX 関数と Excel 関数の比較

DAX 関数ライブラリは Excel 関数ライブラリをベースにしていますが、両者のライブラリにはさまざまな違いがあります。このセクションでは、Excel 関数と DAX 関数の相違点の概要を説明します。

  • DAX 関数の多くは、Excel 関数と同じ名前を持ち、同じような動作をしますが、種類の異なる入力に対応できるように変更されており、場合によっては異なるデータ型を返すこともあります。通常、Excel の数式では DAX 関数は使用できません。また、PowerPivot で Excel の数式を変更せずに使用することもできません。

  • DAX 関数が参照としてセル参照や範囲を取ることはありませんが、列やテーブルは参照できます。

  • たとえば、DAX の日付と時刻の関数は、datetime データ型を返します。これに対して、Excel の日付と時刻の関数は、日付をシリアル番号として表した整数を返します。

  • 新しい DAX 関数の多くは、一連の値から成るテーブルを返すか、入力として与えられた値のテーブルに基づいて計算を行います。一方、Excel にはテーブルを返す関数はありませんが、配列を処理できる関数はいくつかあります。テーブル全体や列を簡単に参照できる動作は、PowerPivot の新しい機能です。

  • DAX は、Excel の配列およびベクトル形式の LOOKUP 関数に類似した、新しい LOOKUP 関数を提供します。ただし、DAX 関数を使用するには、テーブルの間にリレーションシップを確立する必要があります。

  • 列内のデータは、常に同じデータ型であることが想定されています。データが同じ型ではない場合、列全体が、すべての値に最もよく対応するデータ型に変更されます。

DAX のデータ型

PowerPivot データ モデルにはさまざまなデータ ソースからデータをインポートできますが、これらのデータ ソースでサポートされているデータ型が異なることがあります。データをインポートまたはロードし、そのデータを計算またはピボットテーブルで使用する場合、このデータは PowerPivot データ型のいずれかに変換されます。データ型のリストについては、「データ モデルのデータ型」を参照してください。

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

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

PowerPivot ウィンドウでは、複数のデータ テーブルを操作し、これらのテーブルを接続し、リレーショナルモデルにすることができます。このデータ モデルでは、テーブルはリレーションシップにより相互に接続されます。これにより、ユーザーは他のテーブルにある列との相関関係を作成し、より興味深い計算を作成できるようになります。たとえば、関連テーブルの値を合計する数式を作成し、この値を 1 つのセルに保存することができます。また、関連テーブルの行を制御するために、テーブルや列にフィルターを適用することもできます。詳細については、「データ モデルのテーブル間のリレーションシップ」を参照してください。

リレーションシップを使用してテーブルをリンクできるため、ピボットテーブルには、さまざまなテーブルにある複数の列からデータを取り込むこともできます。

ただし、数式はテーブルおよび列全体を操作できるため、計算式の組み立ては Excel とは異なります。

  • 一般的に、列の DAX 数式は、常にその列にある値セット全体に適用されます。一部の行やセルだけに適用されることはありません。

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

  • テーブルがリレーションシップにより接続されている場合、キーとして使用されている 2 つの列の値の大部分が一致していることを確認する必要があります。PowerPivot では、参照の整合性は強制されていないため、キー列の値が一致していなくてもかまいませんし、リレーションシップを作成することもできます。ただし、空白や一致しない値のプレゼンスが、数式の結果やピボットテーブルの見た目に影響を与える可能性があります。詳細については、「Power Pivot の数式での参照」を参照してください。

  • リレーションシップを使用してテーブルをリンクするときは、範囲、つまり数式が評価されるコンテキストを拡大します。たとえば、ピボットテーブルの数式は、ピボットテーブルのフィルターまたは列見出しおよび行見出しによる影響を受けます。コンテキストを操作する数式を書くことはできますが、コンテキストが原因で、想定外の結果となることもあります。詳細については、「DAX の数式のコンテキスト」を参照してください。

数式の結果の更新

データ 更新と再計算は異なる動作ですが、複雑な数式、大量のデータ、または外部データソースから取得されたデータを含むデータ モデルの設計時には理解していなければならない動作であるという点では、関連しています。

データの更新はワークブック内のデータを、外部データ ソースから得られた新しいデータでアップデートするプロセスです。データは指定した間隔で手動で更新できます。また、ワークブックを SharePoint サイトに公開している場合は、外部ソースから自動更新をスケジュールすることもできます。

再計算は、数式自体に対する変更、または基になるデータに対する変更が反映されるように数式の結果を更新するプロセスです。再計算はパフォーマンスに次のような影響を与えます。

  • 計算列では、数式が変更されるたびに、必ず列全体の数式の結果が再計算されます。

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

数式のトラブルシューティング

数式を記述しているときのエラー

数式を定義しているときにエラーが発生した場合、この数式には構文エラーセマンティックエラー計算エラーのいずれかが含まれている可能性があります。

一番簡単に解決できるのは構文エラーです。多くの場合、かっこやカンマが抜けています。個々の関数の構文については、「DAX 関数リファレンス」を参照してください。

構文エラー以外のエラーは、構文は正しくても、値や参照されている列が、数式のコンテキストで意味をなしていないときに発生します。このようなセマンティック エラーや計算エラーの原因には、次のような問題が考えられます。

  • 数式が、存在しない列、テーブル、または関数を参照しています。

  • 数式は正しいように見えますが、データ エンジンがデータをフェッチすると、型の不一致が判明し、エラーとなります。

  • 数式から関数に、誤った数値または型のパラメーターが渡されています。

  • 数式がエラーを含む別の列を参照しているため、その値が無効になっています。

  • 数式はまだ処理されていない列を参照しています。つまり、メタデータはありますが、計算に使用できる実際のデータがありません。

1 つめから 4 つめのケースでは、DAX により、列全体に無効な数式が含まれているというフラグが設定されます。最後のケースでは、DAX はこの列を灰色で表示し、列が未処理の状態であることを示します。

列の値をランク付けまたは順序付けした場合の間違った結果または例外的な結果

値 NaN (Not a Number: 数字ではありません) を含む列をランク付け、または順序付けすると、間違った結果や例外的な結果となる可能性があります。たとえば、0 を 0 で割る計算が行われると、NaN という結果が返されます。

これは、数式エンジンは数値を比較して、順序付けとランク付けを行いますが、NaN は列内の他の数字とは比較できないためです。

正しい結果を得るために、IF 関数を使った条件文を使って、NaN 値をテストし、数値 0 を返すことができます。

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

基本的に、PowerPivot で構築した DAX 数式は、Analysis Services 表形式モデルと完全な互換性があります。ただし、PowerPivot モデルを Analysis Services インスタンスに移行し、DirectQuery モードでモデルを展開する場合には、多少の制約があります。

  • DirectQuery モードでモデルを展開した場合、DAX 数式によっては、異なる結果が返されることがあります。

  • DirectQuery モードでモデルを展開すると、リレーショナル データ ソースではサポートされていない DAX 関数を使った数式で検証エラーが発生する可能性があります。

詳細については、SQL Server 2012 BooksOnline にある Analysis Services 表形式モデルに関するマニュアルを参照してください。

注: 機械翻訳についての免責事項: この記事の翻訳はコンピューター システムによって行われており、人間の手は加えられていません。マイクロソフトでは、英語を話さないユーザーがマイクロソフトの製品、サービス、テクノロジに関するコンテンツを理解するのに役立てるため、こうした機械翻訳を提供しています。記事は機械翻訳されているため、用語、構文、文法などに誤りがある場合があります。

スキルを磨く
トレーニングの探索
新機能を最初に入手
Office Insider に参加する

この情報は役に立ちましたか?

ご意見をいただきありがとうございます。

フィードバックをお寄せいただき、ありがとうございます。Office サポートの担当者におつなぎいたします。

×