GENERATE, función (DAX)

Devuelve una tabla con el producto cartesiano entre cada fila de table1 y la tabla que resulta de la evaluación de table2 en el contexto de la fila actual de table1.

Sintaxis

GENERATE(<table1>, <table2>)

Parámetros

  • table1
    Cualquier expresión de DAX que devuelve una tabla.

  • table2
    Cualquier expresión de DAX que devuelve una tabla.

Valor devuelto

Una tabla con el producto cartesiano entre cada fila de table1 y la tabla que resulta de la evaluación de table2 en el contexto de la fila actual de table1.

Comentarios

  • Si la evaluación de table2 de la fila actual de table1 devuelve una tabla vacía, la tabla de resultados no contendrá la fila actual de table1. Este comportamiento es diferente del de GENERATEALL(), en que la fila actual de table1 se incluirá en los resultados y las columnas correspondientes a table2 tendrán valores NULL para esa fila.

  • Todos los nombres de columna de table1 y table2 deben ser diferentes o se devuelve un error.

Ejemplo

En el siguiente ejemplo, el usuario desea obtener una tabla de resumen de las ventas por región y categoría de producto del canal de distribuidores, como la tabla siguiente:

SalesTerritory[SalesTerritoryGroup]

ProductCategory[ProductCategoryName]

[Reseller Sales]

Europe

Accessories

$ 142,227.27

Europe

Bikes

$ 9,970,200.44

Europe

Clothing

$ 365,847.63

Europe

Components

$ 2,214,440.19

North America

Accessories

$ 379,305.15

North America

Bikes

$ 52,403,796.85

North America

Clothing

$ 1,281,193.26

North America

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

El código siguiente genera la tabla anterior:

GENERATE(
SUMMARIZE(SalesTerritory, SalesTerritory[SalesTerritoryGroup])
,SUMMARIZE(ProductCategory 
, [ProductCategoryName]
, "Reseller Sales", SUMX(RELATEDTABLE(ResellerSales_USD), ResellerSales_USD[SalesAmount_USD])
)
)
  1. La primera instrucción SUMMARIZE, SUMMARIZE(SalesTerritory, SalesTerritory[SalesTerritoryGroup]), genera una tabla de grupos de territorios, donde cada fila es un grupo de territorios, como se muestra a continuación:

    SalesTerritory[SalesTerritoryGroup]

    North America

    Europe

    Pacific

    N/D

  2. La segunda instrucción SUMMARIZE, SUMMARIZE(ProductCategory, [ProductCategoryName], "Reseller Sales", SUMX(RELATEDTABLE(ResellerSales_USD), ResellerSales_USD[SalesAmount_USD])), genera una tabla de grupos de categorías de producto con las ventas de los distribuidores de cada grupo, como se muestra a continuación:

    ProductCategory[ProductCategoryName]

    [Reseller Sales]

    Bikes

    $ 63,084,675.04

    Components

    $ 11,205,837.96

    Clothing

    $ 1,669,943.27

    Accessories

    $ 534,301.99

  3. Sin embargo, si la tabla anterior se evalúa en el contexto de cada fila de la tabla de grupos de territorios, se obtienen resultados diferentes para cada territorio.