Função GENERATE (DAX)
Retorna uma tabela com o produto cartesiano entre cada linha em table1 e a tabela que resulta da avaliação de table2 no contexto da linha atual de table1.
Sintaxe
GENERATE(<table1>, <table2>)
Parâmetros
table1
Qualquer expressão DAX que retorna uma tabela.table2
Qualquer expressão DAX que retorna uma tabela.
Valor de retorno
Uma tabela com o produto cartesiano entre cada linha em table1 e a tabela que resulta da avaliação de table2 no contexto da linha atual de table1
Comentários
Se a avaliação de table2 para a linha atual em table1 retornar uma tabela vazia, a tabela de resultados não conterá a linha atual de table1. Isso é diferente de GENERATEALL(), em que a linha atual de table1 será incluída nos resultados e as colunas correspondentes a table2 terão valores nulos para essa linha.
Todos os nomes de coluna de table1 e table2 devem ser diferentes; caso contrário, um erro será retornado.
Exemplo
No seguinte exemplo, o usuário deseja uma tabela resumida das vendas por Região e Categoria de Produto para o canal de Revendedores, como esta tabela:
SalesTerritory[SalesTerritoryGroup] |
ProductCategory[ProductCategoryName] |
[Reseller Sales] |
Europa |
Acessórios |
$ 142,227.27 |
Europa |
Bikes |
$ 9,970,200.44 |
Europa |
Roupas |
$ 365,847.63 |
Europa |
Componentes |
$ 2,214,440.19 |
North America |
Acessórios |
$ 379,305.15 |
North America |
Bikes |
$ 52,403,796.85 |
North America |
Roupas |
$ 1,281,193.26 |
North America |
Componentes |
$ 8,882,848.05 |
Pacific |
Acessórios |
$ 12,769.57 |
Pacific |
Bikes |
$ 710,677.75 |
Pacific |
Roupas |
$ 22,902.38 |
Pacific |
Componentes |
$ 108,549.71 |
O seguinte código gera a tabela anterior:
GENERATE(
SUMMARIZE(SalesTerritory, SalesTerritory[SalesTerritoryGroup])
,SUMMARIZE(ProductCategory
, [ProductCategoryName]
, "Reseller Sales", SUMX(RELATEDTABLE(ResellerSales_USD), ResellerSales_USD[SalesAmount_USD])
)
)
A primeira instrução SUMMARIZE, SUMMARIZE(SalesTerritory, SalesTerritory[SalesTerritoryGroup]), gera uma tabela de grupos de territórios, em que cada linha é um grupo de territórios, conforme mostrado abaixo:
SalesTerritory[SalesTerritoryGroup]
North America
Europe
Pacific
NA
A segunda instrução SUMMARIZE, SUMMARIZE(ProductCategory, [ProductCategoryName], "Reseller Sales", SUMX(RELATEDTABLE(ResellerSales_USD), ResellerSales_USD[SalesAmount_USD])), gera uma tabela de grupos de Categorias de Produtos com as vendas de Revendedor para cada grupo, conforme mostrado abaixo:
ProductCategory[ProductCategoryName]
[Reseller Sales]
Bikes
$ 63,084,675.04
Componentes
$ 11,205,837.96
Roupas
$ 1,669,943.27
Acessórios
$ 534,301.99
Porém, quando você avalia a tabela anterior considerando o contexto de cada linha da tabela de grupos de territórios, obtém resultados diferentes para cada território.