GENERATE 函数 (DAX)
返回一个表以及一个笛卡尔积,后者是在 table1 中的每行与通过在 table1 中的当前行的上下文中计算 table2 所得到的表之间计算获得的。
语法
GENERATE(<table1>, <table2>)
参数
table1
任何返回表的 DAX 表达式。table2
任何返回表的 DAX 表达式。
返回值
一个表以及一个笛卡尔积,后者是在 table1 中的每行与通过在 table1 中的当前行的上下文中计算 table2 所得到的表之间计算获得的
注释
如果针对 table1 中的当前行计算 table2 时返回了一个空表,则结果表将不包含 table1 中的当前行。 这一点与 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])
)
)
第一条 SUMMARIZE 语句 SUMMARIZE(SalesTerritory, SalesTerritory[SalesTerritoryGroup]) 生成有关区域组的表,其中每行是一个区域组,如下所示:
SalesTerritory[SalesTerritoryGroup]
North America
Europe
Pacific
不适用
第二个 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
但是,当您采用上述表并在区域组表中每一行的上下文中对其进行计算时,您将对于每个区域获得不同的结果。