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