GENERATE DAX Function (Table manipulation)

The second table expression will be evaluated for each row in the first table. Returns the crossjoin of the first table with these results.

Syntax

GENERATE ( <Table1>, <Table2> )
Parameter Attributes Description
Table1
Iterator

The base table in Generate.

Table2
Row Context

A table expression that will be evaluated for each row in the first table.

Return values

Table An entire table or a table with one or more columns.

Remarks

  • If the evaluation of table2 for the current row in table1 returns an empty table, then the current row from table1 will not be included in the results. This is different than GENERATEALL() where the current row from table1 will be included in the results and columns corresponding to table2 will have null values for that row.
  • All column names from table1 and table2 must be different or an error is returned.
» 6 related articles
» 1 related function

Examples

--  GENERATE is an iterator: the second argument is evaluated in a row context
DEFINE
VAR Dates = 
    UNION ( 
        ROW ( "FirstDate", DATE ( 2007, 1, 1 ), "LastDate", DATE ( 2007, 1, 3 ) ),
        ROW ( "FirstDate", DATE ( 2007, 1, 9 ), "LastDate", DATE ( 2007, 1, 12 ) )
    )
VAR DatesExpanded = 
    GENERATE ( 
        Dates,
        DATESBETWEEN ( 'Date'[Date], [FirstDate], [LastDate] )
    )

EVALUATE Dates

EVALUATE DatesExpanded
FirstDate LastDate
2007-01-01 2007-01-03
2007-01-09 2007-01-12
FirstDate LastDate Date
2007-01-01 2007-01-03 2007-01-01
2007-01-01 2007-01-03 2007-01-02
2007-01-01 2007-01-03 2007-01-03
2007-01-09 2007-01-12 2007-01-09
2007-01-09 2007-01-12 2007-01-10
2007-01-09 2007-01-12 2007-01-11
2007-01-09 2007-01-12 2007-01-12
--  If the second argument returns an empty table, GENERATE skips the row.
--  GENERATEALL returns ALL the rows of the first argument, even 
--  though the second expression returns an empty table.
--  GENERATE is similar to CROSS APPLY in SQL
--  GENERATEALL is similar to OUTER APPLY in SQL
DEFINE
VAR Dates = 
    UNION ( 
        ROW ( "FirstDate", DATE ( 2007, 1, 6 ), "LastDate", DATE ( 2007, 1, 3 ) ),
        ROW ( "FirstDate", DATE ( 2007, 1, 9 ), "LastDate", DATE ( 2007, 1, 12 ) )
    )
VAR DatesExpanded = 
    GENERATE ( 
        Dates,
        DATESBETWEEN ( 'Date'[Date], [FirstDate], [LastDate] )
    )

VAR DatesExpandedAll = 
    GENERATEALL ( 
        Dates,
        DATESBETWEEN ( 'Date'[Date], [FirstDate], [LastDate] )
    )

EVALUATE Dates

EVALUATE DatesExpanded

EVALUATE DatesExpandedAll
    

FirstDate LastDate
2007-01-06 2007-01-03
2007-01-09 2007-01-12
FirstDate LastDate Date
2007-01-09 2007-01-12 2007-01-09
2007-01-09 2007-01-12 2007-01-10
2007-01-09 2007-01-12 2007-01-11
2007-01-09 2007-01-12 2007-01-12
FirstDate LastDate Date
2007-01-06 2007-01-03 (Blank)
2007-01-09 2007-01-12 2007-01-09
2007-01-09 2007-01-12 2007-01-10
2007-01-09 2007-01-12 2007-01-11
2007-01-09 2007-01-12 2007-01-12

Related articles

Learn more about GENERATE in the following articles:

Related functions

Other related functions are:

Last update: Oct 3, 2024   » Contribute   » Show contributors

Contributors: Alberto Ferrari, Marco Russo, Kenneth Barber,

Microsoft documentation: https://docs.microsoft.com/en-us/dax/generate-function-dax

2018-2024 © SQLBI. All rights are reserved. Information coming from Microsoft documentation is property of Microsoft Corp. » Contact us   » Privacy Policy & Cookies

Context Transition

This function performs a Context Transition if called in a Row Context. Click to read more.

Row Context

This expression is executed in a Row Context. Click to read more.

Iterator

Not recommended

The use of this function is not recommended. See Remarks and Related functions for alternatives.

Not recommended

The use of this parameter is not recommended.

Deprecated

This function is deprecated. Jump to the Alternatives section to see the function to use.

Volatile

A volatile function may return a different result every time you call it, even if you provide the same arguments. Click to read more.

Deprecated

This parameter is deprecated and its use is not recommended.

DirectQuery compatibility

Limitations are placed on DAX expressions allowed in measures and calculated columns.
The state below shows the DirectQuery compatibility of the DAX function.

Contribute

Want to improve the content of GENERATE? Did you find any issue?
Please, report it us! All submissions will be evaluated for possible updates of the content.


This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.