GENERATE (DAX), функция

Возвращает таблицу с декартовым произведением всех строк в таблице table1 и таблице, являющейся результатом вычисления table2 в контексте текущей строки из table1.

GENERATE(<table1>, <table2>)
table1

Любое выражение DAX, возвращающее таблицу.

table2

Любое выражение DAX, возвращающее таблицу.

Таблица с декартовым произведением всех строк в таблице table1 и таблице, являющейся результатом вычисления table2 в контексте текущей строки из table1.

  • Если вычисление table2 для текущей строки в таблице table1 возвращает пустую таблицу, таблица результатов не будет содержать текущую строку из table1. В этом заключается отличие от GENERATEALL(), где текущая строка из table1 будет включена в результаты, а столбцы, соответствующие table2, будут иметь значения NULL для этой строки.

  • Все имена столбцов из таблиц table1 и table2 должны быть уникальными. В противном случае будет возвращена ошибка.

В следующем примере пользователю необходима сводная таблица с данными о продажах, отсортированным по региону и категории продукта, включающая продажи через посредников, аналогичная следующей.

SalesTerritory[SalesTerritoryGroup]

ProductCategory[ProductCategoryName]

[Reseller Sales]

Европа

Accessories

$ 142,227.27

Европа

Bikes

$ 9,970,200.44

Европа

Clothing

$ 365,847.63

Европа

Components

$ 2,214,440.19

Северная Америка

Accessories

$ 379,305.15

Северная Америка

Bikes

$ 52,403,796.85

Северная Америка

Clothing

$ 1,281,193.26

Северная Америка

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]

    Северная Америка

    Европа

    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. Однако при использовании таблицы, приведенной выше, и ее оценки в контексте каждой строки в таблице групп территорий будут получены различные результаты для каждой территории.