行コンテキストについて学習する
計算列の作成が済んだので、それらの数式がどのように評価されるかを学習できます。
計算列の数式は、テーブルの行ごとに評価されます。 さらに、"現在の行" を意味する行コンテキスト内で評価されます。 Due Fiscal Year 計算列の定義について考えます。
Due Fiscal Year =
"FY"
& YEAR('Due Date'[Due Date])
+ IF(
MONTH('Due Date'[Due Date]) <= 6,
1
)
行ごとに数式が評価されるとき、'Due Date'[Due Date]
の列参照により、"その行" に対する列の値が返されます。 Microsoft Excel では、Excel テーブルの数式を処理するために同じ概念が使用されることがわかります。
ただし、行コンテキストがテーブルを超えて拡張されることはありません。 数式で他のテーブルの列を参照する必要がある場合は、次の 2 つの方法があります。
- テーブルが直接的または間接的に関連する場合は、DAX 関数の
RELATED
またはRELATEDTABLE
を使用できます。RELATED
関数では、リレーションシップの 1 側の値が取得され、RELATEDTABLE
テーブルでは多側の値が取得されます。RELATEDTABLE
関数によりテーブル オブジェクトが返されます。 - テーブルが関連しない場合は、
LOOKUPVALUE
DAX 関数を使用できます。
通常は、できるだけ RELATED
関数を使用するようにします。 リレーションシップおよび列のデータが格納およびインデックス付けされる方法のため、通常、LOOKUPVALUE
関数よりパフォーマンスが向上します。
ここで、次の計算列の定義を Sales テーブルに追加します。
Discount Amount =
(
Sales[Order Quantity]
* RELATED('Product'[List Price])
) - Sales[Sales Amount]
計算列の定義により、Discount Amount 列が Sales テーブルに追加されます。 Power BI によって、Sales テーブルの各行に対する計算列の数式が評価されます。
Order Quantity 列と Sales Amount 列の値は、行コンテキスト内で取得されます。 ただし、List Price 列は Product テーブルに属しているので、"販売製品に対する" 定価の値を取得するには、RELATED
関数を使用する必要があります。
行コンテキストは、計算列の数式が評価されるときに使用されます。 また、"反復子関数" と呼ばれる関数のクラスが使用されるときにも使用されます。 反復子関数を使用すると、高度な集計を柔軟に作成できます。 反復子関数については、後のモジュールで説明します。