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])
)
)
  1. 第一条 SUMMARIZE 语句 SUMMARIZE(SalesTerritory, SalesTerritory[SalesTerritoryGroup]) 生成有关区域组的表,其中每行是一个区域组,如下所示:

    SalesTerritory[SalesTerritoryGroup]

    North America

    Europe

    Pacific

    不适用

  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

  3. 但是,当您采用上述表并在区域组表中每一行的上下文中对其进行计算时,您将对于每个区域获得不同的结果。