GENERATE 関数 (DAX)
table1 の各行と、table1 の現在行のコンテキストで table2 を評価することによって得られたテーブルとのデカルト積を含んだテーブルを返します。
構文
GENERATE(<table1>, <table2>)
パラメーター
table1
テーブルを返す任意の DAX 式。table2
テーブルを返す任意の DAX 式。
戻り値
table1 の各行と、table1 の現在行のコンテキストで table2 を評価することによって得られたテーブルとのデカルト積を含んだテーブル。
説明
table1 の現在の行に関して table2 を評価して得られたのが空のテーブルであった場合、結果のテーブルに、table1 の現在の行は格納されません。 この点は GENERATEALL() とは異なります。GENERATEALL() では、table1 の現在の行が結果に含まれ、その行で table2 に対応する列には Null 値が割り当てられます。
table1 の列名と table2 の列名はすべて異なっている必要があります。そのようになっていない場合、エラーが返されます。
使用例
再販業者による売上を地域と製品カテゴリごとに示した次のような概要テーブルが必要になったとします。
SalesTerritory[SalesTerritoryGroup] |
ProductCategory[ProductCategoryName] |
[Reseller Sales] |
Europe |
Accessories |
$ 142,227.27 |
Europe |
Bikes |
$ 9,970,200.44 |
Europe |
Clothing |
$ 365,847.63 |
Europe |
Components |
$ 2,214,440.19 |
North America |
Accessories |
$ 379,305.15 |
North America |
Bikes |
$ 52,403,796.85 |
North America |
Clothing |
$ 1,281,193.26 |
North America |
Components |
$ 8,882,848.05 |
Pacific |
Accessories |
$ 12,769.57 |
Pacific |
Bikes |
$ 710,677.75 |
Pacific |
Clothing |
$ 22,902.38 |
Pacific |
Components |
$ 108,549.71 |
このようなテーブルは、次のコードによって生成されます。
GENERATE(
SUMMARIZE(SalesTerritory, SalesTerritory[SalesTerritoryGroup])
,SUMMARIZE(ProductCategory
, [ProductCategoryName]
, "Reseller Sales", SUMX(RELATEDTABLE(ResellerSales_USD), ResellerSales_USD[SalesAmount_USD])
)
)
1 つ目の SUMMARIZE ステートメント SUMMARIZE(SalesTerritory, SalesTerritory[SalesTerritoryGroup]) では、地域グループのテーブルが生成されます。次のように、それぞれの行には地域グループが格納されます。
SalesTerritory[SalesTerritoryGroup]
North America
Europe
Pacific
NA
2 つ目の SUMMARIZE ステートメント SUMMARIZE(ProductCategory, [ProductCategoryName], "Reseller Sales", SUMX(RELATEDTABLE(ResellerSales_USD), ResellerSales_USD[SalesAmount_USD])) では、製品カテゴリ グループのテーブルが生成されます。次のように、製品カテゴリ グループごとの再販業者の売上が格納されます。
ProductCategory[ProductCategoryName]
[Reseller Sales]
Bikes
$ 63,084,675.04
Components
$ 11,205,837.96
Clothing
$ 1,669,943.27
Accessories
$ 534,301.99
このテーブルを、地域グループ テーブルの各行のコンテキストで評価すると、地域ごとの異なる結果が得られます。