ExcelDAX-評価コンテキスト

DAXでは、コンテキストはDAX式を作成する際に知っておくべき重要な用語です。とも呼ばれますevaluation context、DAXコンテキストは、DAX式の評価と対応する結果を決定するために使用されます。つまり、DAX式の結果は、コンテキストによって異なる可能性があります。特定のDAXコンテキストがどのように使用され、結果がどのように異なる可能性があるかを明確に理解する必要があります。

評価コンテキストを使用すると、動的分析を実行できます。動的分析では、DAX数式の結果を変更して、現在の行またはセルの選択、および関連データを反映できます。コンテキストを理解し、コンテキストを効果的に使用することは、強力なDAX式を作成し、動的データ分析を実行し、DAX式の問題をトラブルシューティングするために非常に重要です。評価コンテキストは、複雑なデータ分析レポートを作成するために習得する必要があるDAXのすべての高度な機能の基礎です。

DAX式での関連する使用法についてDAX関数を参照し続ける場合、結果を明確にするために、DAXコンテキストに関するこの章を参照する必要があります。

DAXのコンテキストのタイプ

DAXは以下の評価コンテキストをサポートします-

  • 行コンテキスト
  • フィルタコンテキスト

DAX式が評価されると、すべてのコンテキストが考慮され、関連するものとして適用されます。コンテキストは一緒に存在し、数式の結果は、値の計算中に使用されるコンテキストに基づいて異なります。たとえば、ピボットテーブルで行、列、およびフィルターのフィールドを選択すると、小計は、小計/合計が関連付けられている行と列に基づいて動的に計算され、行と列の値はフィルターによって決定されます。中古。

行コンテキスト

行コンテキストとは、DAX式またはDAX関数が、任意の時点で参照しているテーブルの行を認識していることを意味します。行コンテキストを現在の行と見なすことができます。数式は、行コンテキストを使用して行ごとに計算されます。

一部のDAX関数(X関数、FILTER()など)とすべての計算列には行コンテキストがあります。たとえば、DAX式= YEAR([Date])を使用して計算列Yearを作成する場合、計算列の値は、テーブルの指定された列に行ごとに指定されたDAX式を適用することによって取得されます。

つまり、計算列を作成した場合、行コンテキストは、使用されるDAX式によって決定される、個々の行の値と現在の行に関連する列の値で構成されます。DAX式には行への参照が含まれていませんが、DAXは値の計算中に行コンテキストを暗黙的に理解します。

計算列を定義すると、DAXは行コンテキストを自動的に作成し、DAX式を使用して計算されたすべての値が計算列に表示されます。

対照的に、SUMXなどのDAX関数がある場合、行ごとに計算された値が合計され、最終結果のみが表示されます。つまり、中間値は破棄されます。

関連するテーブルがある場合、行コンテキストによって、関連するテーブルのどの行が現在の行に関連付けられているかが決まります。ただし、行コンテキストは関係を介して自動的に伝播されません。これには、DAX関数(RELATEDおよびRELATEDTABLE)を使用する必要があります。

複数行のコンテキスト

DAXには、SUMXのようなイテレータ関数があります。これらの関数を使用して、行コンテキストをネストできます。これにより、プログラムで、複数の現在の行と現在の行コンテキストを持つことができる、内側のループと外側のループを再帰的に処理できます。

たとえば、現在の操作に先行する操作からの行コンテキストを格納するDAX関数Earlier()を使用できます。この関数は、2セットのコンテキストをメモリに格納します。1セットのコンテキストは数式の内側ループの現在の行を表し、もう1セットのコンテキストは数式の外側ループの現在の行を表します。DAXは、2つのループ間で値を自動的にフィードするため、複雑な集計を作成できます。

例については、シナリオ-値のランク付けと比較の章のシナリオ-値を動的にランク付けするDAX式の作成を参照してください。

フィルタコンテキスト

フィルタコンテキストとは、DAXのデータモデルに適用されるすべてのフィルタリングを指します。フィルタコンテキストは、ピボットテーブルとDAX関数によって作成されます。

ピボットテーブルによって作成されたフィルターコンテキスト

ピボットテーブルによって作成されたフィルターコンテキストは、次のピボットテーブルフィールドで行われた選択によって適用される自然なフィルター処理です。

  • Rows
  • Columns
  • Filters
  • Slicers

ピボットテーブルによって作成されたフィルターコンテキストは、データモデルの基になるテーブルをフィルター処理します。テーブルが関連している場合、フィルターはルックアップテーブルからデータテーブルに流れます。つまり、ルックアップテーブルの結果に基づいてデータテーブルをフィルタリングできます。フィルタの伝播は、その逆では発生しません。ただし、DAX式を使用して、データテーブルの結果に基づいてルックアップテーブルをフィルタリングできます。

DAX関数によって作成されたフィルターコンテキスト

DAXフィルター関数を使用して、DAX式で使用される値を制御するフィルター式を含む計算フィールドと計算列を定義できます。これらの計算フィールドと計算列は、ピボットテーブルフィールドリストの一部になり、ピボットテーブルに追加できます。これらのDAXフィルター機能を使用して、特定の列のフィルターを選択的にクリアすることもできます。フィルタコンテキストを作成するための強力なDAXフィルタ関数の例は、CALCULATE()です。例については、「シナリオ-複雑な計算の実行」の章を参照してください。

行コンテキストへの追加としてのフィルターコンテキスト

行コンテキストは、フィルターコンテキストを自動的に作成しません。DAXフィルター関数を含むDAX式でも同じことができます。