Поделиться через


Функция GENERATEALL (DAX)

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

Синтаксис

GENERATEALL(<table1>, <table2>)

Параметры

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

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

Возвращаемое значение

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

Замечания

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

  • Все имена столбцов из таблиц 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

Н/Д

Bikes

Н/Д

Clothing

Н/Д

Components

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

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

В следующем коде создается таблица, описанная выше:

GENERATEALL(
SUMMARIZE(SalesTerritory, SalesTerritory[SalesTerritoryGroup])
,SUMMARIZE(ProductCategory 
, [ProductCategoryName]
, "Reseller Sales", SUMX(RELATEDTABLE(ResellerSales_USD), ResellerSales_USD[SalesAmount_USD])
)
)
  1. Первая инструкция SUMMARIZE создает таблицу групп территорий, где каждая строка представляет собой группу территорий, как показано ниже.

    SalesTerritory[SalesTerritoryGroup]

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

    Европа

    Pacific

    Н/Д

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

    ProductCategory[ProductCategoryName]

    [Reseller Sales]

    Bikes

    $ 63,084,675.04

    Components

    $ 11,205,837.96

    Clothing

    $ 1,669,943.27

    Accessories

    $ 534,301.99

  3. Однако при использовании таблицы, приведенной выше, и ее оценки в контексте каждой строки в таблице групп территорий будут получены различные результаты для каждой территории.