GENERATE
применяется:вычисляемый столбец
вычисляемой таблицы
измерение
визуального вычисления
Возвращает таблицу с декартовским продуктом между каждой строкой в таблице1 и таблицей, которая приводит к оценке таблицы 2 в контексте текущей строки из таблицы 1.
Синтаксис
GENERATE(<table1>, <table2>)
Параметры
Срок | Определение |
---|---|
table1 |
Любое выражение DAX, возвращающее таблицу. |
table2 |
Любое выражение DAX, возвращающее таблицу. |
Возвращаемое значение
Таблица с декартовским продуктом между каждой строкой в таблице1 и таблицей, которая приводит к оценке таблицы 2 в контексте текущей строки из таблицы 1
Замечания
Если оценка таблицы 2 для текущей строки в таблице1 возвращает пустую таблицу, то результющая таблица не будет содержать текущую строку из таблицы 1. Это отличается от GENERATEALL(), где текущая строка из таблицы 1 будет включена в результаты и столбцы, соответствующие таблице 2 будут иметь значения NULL для этой строки.
Все имена столбцов из таблицы 1 и таблицы 2 должны отличаться или возвращается ошибка.
Эта функция не поддерживается для использования в режиме DirectQuery при использовании в вычисляемых столбцах или правилах безопасности на уровне строк (RLS).
Пример
В следующем примере пользователь хочет сводную таблицу продаж по регионам и категории продуктов для канала торговых посредников, например следующую таблицу:
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])
)
)
Первый оператор SUMMARIZE,
SUMMARIZE(SalesTerritory, SalesTerritory[SalesTerritoryGroup])
, создает таблицу групп территорий, где каждая строка является группой территорий, как показано ниже:SalesTerritory[SalesTerritoryGroup] Северная Америка Европа Тихоокеанский NA Второй оператор 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 Однако при получении приведенной выше таблицы и ее оценке в контексте каждой строки из таблицы групп территорий вы получаете разные результаты для каждой территории.