集計反復子関数を使用する
単一列の概要作成関数には、それぞれに同等の反復子関数があります。 以下のセクションでは、反復子関数が役に立つ、複雑な概要作成と粒度の高い概要作成という 2 つの集計シナリオについて検討します。
複雑な概要作成
このセクションでは、反復子関数を使用する初めてのメジャーを作成します。 まず、Adventure Works DW 2020 M05.pbix ファイルをダウンロードして開きます。 次に、下のメジャー定義を追加します。
Revenue =
SUMX(
Sales,
Sales[Order Quantity] * Sales[Unit Price] * (1 - Sales[Unit Price Discount Pct])
)
Revenue メジャーを小数点以下 2 桁の通貨として書式設定し、それをレポートのページ 1 にあるテーブル ビジュアルに追加します。
反復子関数を使用することで、Revenue メジャーの式で 1 つの列の値以外の値も集計されます。 各行で、3 つの列の行コンテキスト値を使用して、収益額が生成されます。
次に、別のメジャーを追加します。
Discount =
SUMX(
Sales,
Sales[Order Quantity]
* (
RELATED('Product'[List Price]) - Sales[Unit Price]
)
)
Discount メジャーを小数点以下 2 桁の通貨として書式設定し、それをテーブル視覚化に追加します。
この数式では、RELATED
関数が使用されていることに注目します。 行コンテキストはテーブルを超えて拡張されないことを忘れないでください。 数式で他のテーブルの列を参照する必要があるときに、テーブル間にモデル リレーションシップが存在する場合は、1 側のリレーションシップには RELATED
関数を、多側のリレーションシップでは RELATEDTABLE
関数を使用します。
粒度の高い概要作成
次の例では、平均収益を報告するための要件について検討します。 下のメジャーを追加します。
Revenue Avg =
AVERAGEX(
Sales,
Sales[Order Quantity] * Sales[Unit Price] * (1 - Sales[Unit Price Discount Pct])
)
Revenue Avg メジャーを小数点以下 2 桁の通貨として書式設定し、それをテーブル視覚化に追加します。
"平均" とは、値の合計を値の数で除算したことを意味していると考えてください。 しかし、この理論には、値の数は何を表しているのかという疑問が生じます。 ここでは、値の数とは、空白に評価されなかった式の数です。 また、反復子関数では Sales テーブルの行が列挙されるので、平均は "行ごとの収益" も意味します。 このロジックをもう一歩進めます。Sales テーブルの各行には販売注文明細が記録されているため、より厳密には "注文明細ごとの収益" と説明できます。
したがって、平均ベースとして何が使用されているかをユーザーに明確に報告できるように、Revenue Avg メジャーの名前を Revenue Avg Order Line に変更する必要があります。
次の例では、反復子関数を使用して、販売注文レベルに粒度を上げる新しいメジャーを作成します (1 件の販売注文は 1 つ以上の注文明細で構成されます)。 下のメジャーを追加します。
Revenue Avg Order =
AVERAGEX(
VALUES('Sales Order'[Sales Order]),
[Revenue]
)
Revenue Avg Order メジャーを小数点以下 2 桁の通貨として書式設定し、それをテーブル視覚化に追加します。
予想どおり、1 件の注文の平均収益は、常に 1 行の注文明細の平均収益よりも高くなります。
数式では、VALUES
DAX 関数が使用されていることに注意してください。 この関数を使用すると、フィルター コンテキストの値を数式で決定できます。 ここでは、この AVERAGEX
関数によって、各販売注文が "フィルター コンテキストで" 反復処理されます。 つまり、月の各販売注文に対する反復処理が行われます。 フィルター コンテキストと VALUES
関数については、フィルター コンテキストのモジュールで紹介します。