Udostępnij za pośrednictwem


GENERATE, funkcja (język DAX)

Zwraca tabelę zawierającą iloczyn kartezjański każdego wiersza w tabeli table1 i w tabeli będącej wynikiem obliczenia wyrażenia table2 w kontekście bieżącego wiersza z tabeli table1.

Składnia

GENERATE(<table1>, <table2>)

Parametry

  • table1
    Dowolne wyrażenie języka DAX zwracające tabelę danych.

  • table2
    Dowolne wyrażenie języka DAX zwracające tabelę danych.

Wartość zwracana

Tabela zawierająca iloczyn kartezjański każdego wiersza w tabeli table1 i w tabeli będącej wynikiem obliczenia wyrażenia table2 w kontekście bieżącego wiersza z tabeli table1.

Uwagi

  • Jeśli w wyniku obliczenia wyrażenia table2 dla bieżącego wiersza w tabeli table1 zostanie zwrócona pusta tabela, wynikowa tabela nie będzie zawierać bieżącego wiersza z tabeli table1. Jest to zachowanie odmienne od zachowania funkcji GENERATEALL(), w przypadku której bieżący wiersz z tabeli table1 będzie umieszczony w wynikach, a kolumny odpowiadające tabeli table2 będą miały dla niego wartości null.

  • Wszystkie nazwy kolumn z tabel table1 i table2 muszą być unikatowe; w przeciwnym razie zostanie zwrócony błąd.

Przykład

W poniższym przykładzie użytkownik chce uzyskać tabelę podsumowania sprzedaży wg regionów i kategorii produktów dla kanału odsprzedawców, która będzie podobna do następującej tabeli:

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

Powyższa tabela została utworzona za pomocą następującego kodu:

GENERATE(
SUMMARIZE(SalesTerritory, SalesTerritory[SalesTerritoryGroup])
,SUMMARIZE(ProductCategory 
, [ProductCategoryName]
, "Reseller Sales", SUMX(RELATEDTABLE(ResellerSales_USD), ResellerSales_USD[SalesAmount_USD])
)
)
  1. Pierwsza instrukcja SUMMARIZE (SUMMARIZE(SalesTerritory, SalesTerritory[SalesTerritoryGroup])) tworzy tabelę grup terytoriów, gdzie każdy wiersz jest grupą terytoriów, tak jak pokazano poniżej:

    SalesTerritory[SalesTerritoryGroup]

    North America

    Europe

    Pacific

    ND

  2. Druga instrukcja SUMMARIZE (SUMMARIZE(ProductCategory, [ProductCategoryName], "Reseller Sales", SUMX(RELATEDTABLE(ResellerSales_USD), ResellerSales_USD[SalesAmount_USD]))) tworzy tabelę grup kategorii produktów ze sprzedażą odsprzedawców dla każdej grupy, tak jak pokazano poniżej:

    ProductCategory[ProductCategoryName]

    [Reseller Sales]

    Bikes

    $ 63,084,675.04

    Components

    $ 11,205,837.96

    Clothing

    $ 1,669,943.27

    Accessories

    $ 534,301.99

  3. Jednak wykonanie obliczeń na powyższej tabeli w kontekście każdego wiersza z tabeli grup terytoriów spowoduje uzyskanie innych wyników dla każdego terytorium.