行コンテキストとフィルターコンテキストの理解
メニューを表示するにはスワイプしてください
すべての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つを試してチャットを始めてください