Partilhar via


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])
)
)
  1. 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

  2. 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

  3. 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.