GROUPBY
Note
この関数は、意味のない結果を返す可能性が高いため、ビジュアル計算で使用することは推奨されません。
GROUPBY 関数は、SUMMARIZE 関数に似ています。 ただし、GROUPBY では、追加する拡張列に対して暗黙的な CALCULATE が実行されません。 GROUPBY では、追加する拡張列の集計関数内で、新しい関数である CURRENTGROUP を使用できます。 GROUPBY は、1 つのテーブル スキャンで、複数の集計を実行するために使用されます。
構文
GROUPBY (<table> [, <groupBy_columnName> [, <groupBy_columnName> [, …]]] [, <name>, <expression> [, <name>, <expression> [, …]]])
パラメーター
用語 | 定義 |
---|---|
テーブル | データのテーブルを返す任意の DAX 式。 |
groupBy_columnName | データをグループ化するテーブル (または関連テーブル) の既存の列の名前。 このパラメーターを式にすることはできません。 |
name | GroupBy 列のリストに追加される新しい列に付けられる名前。二重引用符で囲みます。 |
expression | 最初の引数 CURRENTGROUP () が含まれる X 集計関数の 1 つ。 サポートされている X 集計関数の完全な一覧については、以下の「CURRENTGROUP を使用する場合」セクションを参照してください。 |
戻り値
groupBy_columnName 引数に対して選択された列と、name 引数で指定された拡張列が含まれるテーブル。
解説
GROUPBY 関数は、次のことを行います。
指定されたテーブル (および "対一" 方向のすべての関連テーブル) から開始します。
すべての GroupBy 列 (手順 1 のテーブルに存在する必要があります) を使用してグループ化を作成します。
各グループは結果には 1 行で表示されますが、元のテーブルでは一連の行を表します。
各グループについて、追加する拡張列を評価します。 SUMMARIZE 関数とは異なり、暗黙の CALCULATE は実行されず、グループはフィルター コンテキストに配置されません。
名前を定義する各列には、対応する式が必要です。そうでない場合は、エラーが返されます。 最初の引数 name では、結果の列の名前を定義します。 2 番目の引数 expression では、その列の各行の値を取得するために実行される計算を定義します。
groupBy_columnName は、テーブルまたは関連テーブルに存在する必要があります。
各 name は二重引用符で囲む必要があります。
この関数を使用すると、選択した一連の行が、1 つ以上の groupBy_columnName 列の値によって一連の概要行にグループ化されます。 グループごとに 1 行が返されます。
GROUPBY は主に、DAX テーブル式からの中間結果に対して集計を実行するために使用されます。 モデル内の物理テーブルに対して効率的に集計を行うには、SUMMARIZECOLUMNS 関数または SUMMARIZE 関数の使用を検討してください。
この関数は、計算列または行レベルのセキュリティ (RLS) ルールで使用される場合、DirectQuery モードでの使用はサポートされません。
CURRENTGROUP を使用する場合
CURRENTGROUP は、GROUPBY 関数内の拡張列を定義する式でのみ使用できます。 実質的に、CURRENTGROUP は、GROUPBY 結果の現在の行に属する GROUPBY の table 引数から行のセットを返します。 CURRENTGROUP 関数は引数を取らず、次の集計関数のいずれかに対する最初の引数としてのみサポートされます。AVERAGEX、COUNTAX、COUNTX、GEOMEANX、MAXX、MINX、PRODUCTX、STDEVX.S、STDEVX.P、SUMX、VARX.S、VARX.P。
例
次の例では、まず SUMMARIZECOLUMNS 関数を使用して、物理テーブルで国別および製品カテゴリ別にグループ化された売上合計を計算します。 次に、GROUPBY 関数を使用して、最初の手順の中間結果をスキャンし、製品カテゴリにおける各国の最大の売上を見つけます。
DEFINE
VAR SalesByCountryAndCategory =
SUMMARIZECOLUMNS(
Geography[Country],
Product[Category],
"Total Sales", SUMX(Sales, Sales[Price] * Sales[Qty])
)
EVALUATE
GROUPBY(
SalesByCountryAndCategory,
Geography[Country],
"Max Sales", MAXX(CURRENTGROUP(), [Total Sales])
)