DAX の数式のコンテキスト

注: 最新のヘルプ コンテンツをできるだけ早く、お客様がお使いの言語で提供したいと考えております。 このページは、自動翻訳によって翻訳されているため、文章校正のエラーや不正確な情報が含まれている可能性があります。 私たちの目的は、このコンテンツがお客様の役に立つようにすることです。 お客様にとって役立つ情報であったかどうかを、このページの下部でお知らせください。 簡単に参照できるように、こちらに英語の記事があります。

コンテキストを使用すると、現在の行またはセルの選択範囲と関連するデータもを反映するように、数式の結果を変更できます、動的な分析を実行することができます。 コンテキストについてコンテキストを効果的に使用するは、解析、優れた数式を作成するため、数式の問題のトラブルシューティングに非常に重要です。

ここでは、さまざまなコンテキストの種類を定義します。 行コンテキスト、クエリ コンテキスト、フィルター コンテキスト。 コンテキストが数式の計算列とピボット テーブルでの評価する方法を説明します。

この記事の最後に、数式の結果がコンテキストによってどのように変化するのかを示す詳しい例へのリンクが記載されています。

コンテキストについて

PowerPivot の数式は、ピボットテーブルに適用されたフィルター、テーブル間のリレーションシップ、数式で使用されるフィルターの影響を受けます。 動的分析を実行可能にするのがコンテキストです。 数式の作成とトラブルシューティングを行うには、コンテキストを理解しておくことが重要です。

コンテキストには、行コンテキスト、クエリ コンテキスト、フィルター コンテキストという種類があります。

行コンテキストは "現在の行" と考えることができます。 計算列を作成した場合、個々の行に格納されている値と、現在の行に関連した列の値で、行コンテキストが構成されます。 一部の機能 (EARLIEREARLIEST) 現在の行から値を取得し、その値を使って表全体を操作の実行中にもあります。

クエリ コンテキストとは、行の見出しと列の見出しに応じてピボットテーブルの各セルに暗黙的に作成されるデータのサブセットです。

フィルター コンテキストは、行に適用されているフィルター制約または数式内のフィルター式で定義されているフィルター制約に基づく、各列の許容値のセットです。

ページの先頭へ

行コンテキスト

計算列に数式を作成した場合、その数式の行コンテキストは、現在の行内の全列からの値を含んでいます。 テーブルが別のテーブルに関連付けられている場合、コンテキストには、現在の行に関連付けられている他のテーブルの値もすべて含まれます。

たとえば、同じテーブルの 2 つの列を加算する =[Freight] + [Tax]

] を加算 2 つの列と同じテーブルからします。 この数式は、自動的に同じ行から値を参照する数式が、Excel テーブルのように動作します。 テーブルは、範囲内からさまざまなことに注意してください: 範囲の表記法を使用して、現在の行の前に、の行から値を参照することはできませんし、任意の 1 つのテーブルまたはセルの値を参照することはできません。 テーブルおよび列常に使用する必要があります。

行コンテキストで、関連するテーブル内のどの行を現在の行に関連付けるかは、自動的にテーブル間のリレーションシップに従って決定されます。

たとえば次の数式は、RELATED 関数を使用し、注文の出荷先の地域に基づいて、関連テーブルから税の値をフェッチします。 現在のテーブル内の地域の値を使用し、関連するテーブルで地域を探し、関連するテーブルから該当する地域の税率を取得することによって、税の値が求められます。

= [Freight] + RELATED('Region'[TaxRate])

この数式は、Region テーブルから現在の地域の税率を取得するだけです。 テーブル間を接続するキーを知る必要や指定する必要はありません。

複数行のコンテキスト

DAX には、テーブルで計算を繰り返し実行する関数が含まれています。 これらの関数は、現在の行と、現在の行のコンテキストを、複数持つことができます。 プログラミングの観点では、内側および外側ループを再帰的に処理する数式を作成できます。

たとえば、ブックには、[商品] テーブルと売上テーブルが含まれています。 複数の製品に関連するトランザクションの完全な全体の売上テーブルを移動して、1 つのトランザクションの製品ごとに最大の目標を検索する可能性があります。

Excel では、この計算には一連の中間出力が必要であり、データが変更されると中間出力の再構築が必要となります。 Excel のパワー ユーザーであれば、ジョブを行う配列数式を作成することもできます。 または、リレーショナル データベースでは、入れ子にしたサブセレクトを記述できます。

ただし、DAX を使用すると、正しい値を返す 1 つの数式を作成でき、データをテーブルに追加すると結果が自動的に更新されます。

=MAXX(FILTER(Sales,[ProdKey]=EARLIER([ProdKey])),Sales[OrderQty])

この数式の詳しいチュートリアルについては、 EARLIERを参照してください。

つまり、以前の関数では、前に、現在の操作を操作から行のコンテキストが格納されます。 コンテキストのメモリ 2 セットでは保存ですべての回関数: コンテキストの 1 つのセット、数式の内部ループの現在の行、別の一連のコンテキストが数式の外部ループの現在の行を表します。 DAX では、複雑な集計を作成するには 2 つのループ間で値が自動的にフィードします。

ページの先頭へ

クエリ コンテキスト

クエリ コンテキストとは、数式に対して暗黙的に取得されるデータのサブセットのことをいいます。 ピボット テーブルのセルにメジャーまたはその他の値フィールドをドロップすると、コンテキストを確認するには、行と列のヘッダー、スライサー、およびレポート フィルター PowerPivotエンジンを調査します。 その後、 PowerPivotが必要な計算を行って、ピボットテーブルの各セルに値を生成します。 取得されるデータのセットは、各セルのクエリ コンテキストです。

数式を配置した場所によってコンテキストが変わるので、数式の結果も、多数のグループおよびフィルターを持つピボットテーブルで数式を使用したか、またはコンテキストが最少かつフィルターのない計算列で数式を使用したかによって変わります。

たとえば、Sales テーブルの Profit 列の値を合計する、=SUM('Sales'[Profit]) のような単純な数式を作成したとします。

Salesテーブル内の集計列に次の数式を使用する場合、数式、クエリ コンテキストは常に、 Salesテーブルのデータ セット全体であるために、数式の結果は、テーブル全体のと同じをします。 結果はすべての地域、すべての製品、すべての年の利益とします。

ただし、同じ結果を何百回も表示する必要はなく、特定の年度、特定の国または地域、特定の製品、または、そうした条件の組み合わせについて、該当する利益を計算し、総計を求めるのが普通です。

ピボットテーブルでは、列見出しや行見出し、スライサーを追加したり削除したりすることで、簡単にコンテキストを変更できます。 、測定値で、上記のような数式を作成でき、それをピボット テーブルにドロップすることができます。 ピボット テーブルに行見出しまたは列を追加したときに、メジャーを評価するクエリ コンテキストを変更します。 スライス操作やフィルター処理もコンテキストに影響を及ぼします。 したがって、ピボットテーブルで使用される同じ数式は、セルごとに異なるクエリ コンテキストで評価されます。

ページの先頭へ

フィルター コンテキスト

フィルター コンテキストは、数式の引数を使用して列やテーブルの使用可能な値のセットにフィルター制約を指定すると追加されます。 行コンテキストやクエリ コンテキストなど、他のコンテキストに加えて適用されます。

たとえば、ピボットテーブルでは、クエリ コンテキストに関する前のセクションで説明したように、行見出しと列見出しに基づいて各セルの値が計算されます。 ただし、メジャー、計算列をピボット テーブルに追加] で、数式で使用されている値を制御するフィルター式を指定できます。 また、特定の列のフィルターを選択的にクリアすることもできます。

数式内でのフィルターを作成する方法の詳細については、「フィルター関数」を参照してください。

フィルターをクリアして総計を作成する方法の例については、[すべてを参照してください。

選択的にオフにし、数式内でのフィルターを適用する方法の例については、 ALLEXCEPT 関数を参照してください。

このため、メジャーまたはが数式の結果を解釈するときにフィルター コンテキストわかるように、ピボット テーブルで使用される数式の定義を確認する必要があります。

ページの先頭へ

数式のコンテキストの決定

数式を作成すると、PowerPivot for Excel  はまず全体的な構文チェックを実行し、次に、入力した列とテーブルの名前を、現在のコンテキストで使用可能な列およびテーブルと照合します。 PowerPivot が、数式によって指定された列またはテーブルを見つけられない場合は、エラーになります。

コンテキストは、前のセクションで説明したように、ブック内の使用可能なテーブル、テーブル間のリレーションシップ、および適用されたフィルターを使用して決定されます。

たとえば、新しいテーブルにデータをインポートしたばかりで、フィルターを適用していない場合は、テーブルの列セット全体が現在のコンテキストに含まれます。 複数のテーブルがリレーションシップでリンクされていて、対象のピボットテーブルが列見出しの追加やスライサーの使用によってフィルター処理されている場合は、それらの関連テーブルと、データに対するフィルターが、コンテキストに含まれます。

コンテキストは、数式のトラブルシューティングも困難にする可能性がある強力な概念です。 簡単な数式およびリレーションシップで開始してコンテキストの機能を確認してから、ピボットテーブルで簡単な数式を試すことをお勧めします。 次のセクションでは、数式でさまざまなタイプのコンテキストを使用して動的に結果を返す方法の例も示します。

数式のコンテキストの例

  • RELATED 関数は、関連列の値が含まれるように現在の行のコンテキストを拡大します。 これにより、参照を実行できます。 このトピックには、フィルター処理と行コンテキストの相互作用の例が含まれています。

  • FILTER 関数を使用すると、現在のコンテキストに含める行を指定できます。 このトピックの例では、集計を行う別の関数にフィルターを埋め込む方法も示されています。

  • ALL 関数は、数式内でコンテキストを設定します。 この関数を使用すると、クエリ コンテキストの結果として適用されたフィルターをオーバーライドできます。

  • ALLEXCEPT 関数を使用すると、指定した以外のすべてのフィルターを削除できます。 どちらのトピックにも、数式の作成と複雑なコンテキストの理解に役立つ例が含まれています。

  • EARLIER 関数と EARLIEST 関数を使用すると、内側のループの値を参照しながら計算を実行してテーブルをループ処理することができます。 再帰の概念や内側と外側のループについてよく知っている場合は、このトピックを読むと EARLIER および EARLIEST 関数の威力がわかります。 これらの概念についてよく知らなくても、例の手順に注意して従うことで、計算で内側と外側のコンテキストがどのように使用されるのかを理解できます。

ページの先頭へ

参照整合性

ここでは、リレーションシップによって関連付けられた PowerPivot テーブル内の不足値に関連した高度な概念について説明します。 このセクションは、複数のテーブルや複雑な数式を含むブックがある場合に、結果を理解するのに役立ちます。

リレーショナル データの概念について詳しくない場合は、概要を説明した「リレーションシップの概要」を先に参照することをお勧めします。

参照整合性と PowerPivot リレーションシップ

PowerPivot では、有効なリレーションシップを定義する際に 2 つのテーブル間に参照整合性を適用する必要はありません。 代わりに、それぞれの一対多のリレーションシップの "一" 側に空白行が作成され、関連付けられたテーブルのすべての不一致行の処理に使われます。 この行は、実質、SQL 外部結合として動作します。

ピボットテーブルでは、リレーションシップの "一" 側でデータをグループ化する場合、リレーションシップの "多" 側の一致しないデータも同時にグループ化され、空白の行見出しを持つ合計に含められます。 この空白の見出しは、"不明なメンバー" とほぼ同じ意味です。

不明なメンバーについて

不明なメンバーの概念は、SQL Server Analysis Services などの多次元データベース システムを使用した経験があるユーザーには、親しみがあるかもしれません。 この用語を初めて聞く場合は、次の例を参照して、不明なメンバーがどのようなものであり、それが計算にどのように影響するのかを理解してください。

各店舗の毎月の売上合計を計算する計算を作成しているが、 Salesテーブル内の列で店舗名の値が不足するいると仮定します。 店舗名で保存して売上のテーブルが接続されて、それは予想して、数式の問題が発生するよいですか。 ピボット テーブルをどのようにグループ化または既存のストアに関連付けられていない売り上げ高を表示するか。

この問題は、ファクト データの大きな表論理的に関連しているストア、地域、およびその他の属性を分類して、計算の種類のデータに使用される情報を含むディメンションのテーブルのデータ ウェアハウスで一般的なであります。 問題を解決するには、既存のエンティティとは無関係ファクトは新しいは一時的に不明なメンバーに割り当てられます。 あるため、空白の見出しの下のピボット テーブルでグループ化された関連付けられていない種類のデータが表示されます。

空白値と空白行の処理の相違

空白値は、不明なメンバーに対応するために追加される空白行とは異なります。 空白値は、NULL、空の文字列、その他の不足値などを表すために使用される特殊な値です。 空白値および他の DAX データ型の詳細については、「データ モデルのデータ型」を参照してください。

ページの先頭へ

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

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

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

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

×