行コンテキストとフィルターコンテキストの理解
メニューを表示するにはスワイプしてください
すべてのDAX計算はコンテキスト内で実行されます。コンテキストとは、評価時にどの行が関連しているかの定義です。コンテキストを理解しないと、メジャーがどのような値を返すかを予測したり、誤った値を返す理由を診断したりすることはできません。
行コンテキスト
行コンテキストは、計算列内に存在するコンテキストです。Power Pivotが計算列を評価する際、各行を個別に処理します。DAXは現在どの行にいるかを正確に把握しており、その行の値のみを計算に使用します。
何か?現在の行を認識すること。数式は同じテーブル内の任意の列を参照でき、その特定の行の値を取得します。合計や平均ではなく、正確なセルの値です。
行コンテキストはメジャーには存在しません。メジャーが評価されるとき、現在の行は存在せず、アクティブなフィルターの集合だけがあります。このため、行レベルのラベルをメジャーとして記述するとエラーが発生します。メジャーには評価する行がないためです。
フィルターコンテキスト
フィルターコンテキストは、メジャーが評価されるときに存在するコンテキストです。これは、メジャーが計算される瞬間にデータモデル上でアクティブなすべてのフィルターの集合であり、ピボットテーブルがその特定のセルについて現在知っているすべてによって決定されます。
ピボットテーブルの各セルには、それぞれ固有のアクティブフィルターの組み合わせが存在。
空白セルはエラーを示すものではなく、そのセルのフィルターコンテキストで一致する行がゼロであることを意味。現在のアクティブフィルターの組み合わせ下では、単にデータが存在しない状態。
フィルターコンテキストの4つの発生源
フィルターコンテキストは、4つの独立した発生源から同時に蓄積される。それぞれがデータセットをさらに絞り込む:
- 行ラベル:行エリアの各値が、その行にフィルターを適用。Region = North と Region = South は異なるフィルターコンテキストを作成し、North 行の各セルは North の売上のみを参照;
- 列ラベル:列エリアの各値が第2のフィルターディメンションを追加。行ラベルと組み合わせることで、各セルは2つの独立したフィルターの交点に位置;
- スライサー:スライサーの選択は、ピボットテーブル内のすべてのセルに同時にフィルターを適用。月スライサーで January を選択すると、すべてのセルが行や列の位置に関係なく January のデータに限定;
- ピボットテーブルフィルター:ピボットテーブルのフィルターエリアで直接適用されたフィルターも、すべてのセルのフィルターコンテキストに寄与し、既存の行・列・スライサーフィルターの上に積み重なる。
タスク
ステップ 1 — 行コンテキストの実験
-
ワークブックを開き、Power Pivot → 管理 → データビュー → Sales タブへ移動。
-
Order Size 計算列を確認。各行の Quantity 値に基づき、Large または Small が表示。
-
次に、Sales テーブルに以下の数式で2つ目の計算列を追加:
= Sales[Quantity] * Sales[UnitPrice]
-
列名を
Row Revenueに変更。 -
列をスクロールし、各行がその行固有の Quantity と UnitPrice の積になっていることを確認。
ステップ 2 — 次の質問に回答
- DAX が各行の Row Revenue を評価する際に使用されるコンテキストの種類は?
- Row Revenue は Sales テーブルに既にある Total 列と同じか?
- Row Revenue を計算列ではなくメジャーとして作成するのは妥当か?
フィードバックありがとうございます!
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください