はじめに
反復子関数を知るために、次のビデオをご覧ください。
Data Analysis Expressions (DAX) には、"反復子関数" と呼ばれる関数のファミリが含まれています。 反復子関数は、指定されたテーブルのすべての行を列挙し、指定された式で各行を評価します。 これらによって、モデルの計算でデータを集計する方法を柔軟に制御できます。
ここまで、SUM
、COUNT
、MIN
、MAX
などの単一列の概要作成関数については十分に説明しました。 これらの各関数には、サフィックス "X" によって識別される、同等の反復子関数 (SUMX
、COUNTX
、MINX
、MAXX
など) があります。 さらに、フィルター処理、順位付け、時間の経過に伴う準加法計算などを実行する特別な反復子関数が存在します。
すべての反復子関数の特性として、テーブルと式を渡す必要があります。 テーブルには、モデル テーブル参照またはテーブル オブジェクトを返す式を指定できます。 式は、スカラー値に評価される必要があります。
単一列の概要作成関数 (SUM
など) は、ショートハンド関数です。 内部的には、Microsoft Power BI によって SUM
関数が SUMX
に変換されます。 その結果、次の 2 つのメジャー定義では、同じパフォーマンスで同じ結果が生成されます。
Revenue = SUM(Sales[Sales Amount])
Revenue =
SUMX(
Sales,
Sales[Sales Amount]
)
重要なのは、反復子関数でコンテキストがどのように機能するかを理解することです。 反復子関数ではテーブルの行が列挙されるので、式は、各行に対して行コンテキストで評価されます。これは計算列の式に似ています。 テーブルはフィルター コンテキストで評価されるので、前の Revenue メジャー定義の例を使用しているときに、レポート ビジュアルが会計年度 FY2020 によってフィルター処理された場合、Sales テーブルには "その年度" で順序付けされた売上行が含まれます。 フィルター コンテキストについては、フィルター コンテキストのモジュールに説明があります。
重要
反復子関数を使用する場合は、広範な DAX 関数を使用する式が含まれる大きな (行の) テーブルを使用しないようにしてください。 テキスト値をスキャンして特定の文字やテキストを検索する一部の関数 (SEARCH
DAX 関数など) では、パフォーマンスが遅くなる場合があります。 また、LOOKUPVALUE
DAX 関数では、値が行単位で取得される時間がかかる処理になる場合があります。 この 2 番目のケースでは、できる限り RELATED
DAX 関数を使用してください。