Excel-dax-evaluation-context

提供:Dev Guides
移動先:案内検索

Excel DAX-評価コンテキスト

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

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

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

DAXのコンテキストの種類

DAXは、次の評価コンテキストをサポートしています-

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

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

行コンテキスト

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

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

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

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

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

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

複数行コンテキスト

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

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

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

フィルターコンテキスト

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

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

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

  • Rows
  • フィルター
  • スライサー

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

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

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

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

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