生成

适用于:计算列计算表度量值视觉计算

返回一个表,其中包含 table1 中每一行之间的笛卡尔积和表,该表在 table1的当前行的上下文中计算 table2

语法

GENERATE(<table1>, <table2>)  

参数

术语 定义
table1 返回表的任何 DAX 表达式。
table2 返回表的任何 DAX 表达式。

返回值

表 1 中每一行之间具有笛卡尔积的表,以及从表 1 table 1 当前行上下文中 计算表 2 而得出的表

言论

  • 如果 table1 中当前行的 table2 求值返回空表,则结果表将不包含 table1中的当前行。 这不同于 GENERATEALL(),其中来自 table1 的当前行将包含在结果中,对应于 table2 的列将具有该行的 null 值。

  • table1table2 中的所有列名都必须不同或返回错误。

  • 在计算列或行级别安全性 (RLS) 规则中使用时,不支持在 DirectQuery 模式下使用此函数。

在以下示例中,用户希望按“区域”和“产品类别”为经销商渠道的销售汇总表,如下表所示:

SalesTerritory[SalesTerritoryGroup] ProductCategory[ProductCategoryName] [经销商销售]
欧洲 辅料 $ 142,227.27
欧洲 自行车 $ 9,970,200.44
欧洲 服装 $ 365,847.63
欧洲 组件 $ 2,214,440.19
北美洲 辅料 $ 379,305.15
北美洲 自行车 $ 52,403,796.85
北美洲 服装 $ 1,281,193.26
北美洲 组件 $ 8,882,848.05
太平洋 辅料 $ 12,769.57
太平洋 自行车 $ 710,677.75
太平洋 服装 $ 22,902.38
太平洋 组件 $ 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]
    北美洲
    欧洲
    太平洋
  2. 第二个 SUMMARIZE 语句 SUMMARIZE(ProductCategory, [ProductCategoryName], "Reseller Sales", SUMX(RELATEDTABLE(ResellerSales_USD), ResellerSales_USD[SalesAmount_USD]))生成一个产品类别组表,其中包含每个组的经销商销售额,如下所示:

    ProductCategory[ProductCategoryName] [经销商销售]
    自行车 $ 63,084,675.04
    组件 $ 11,205,837.96
    服装 $ 1,669,943.27
    辅料 $ 534,301.99
  3. 但是,在采用上述表并在区域组表中每行的上下文下对其进行评估时,会为每个区域获取不同的结果。