Wewnętrzne i zewnętrzne wyrażenia zestawu
Wyrażenia zestawów mogą być używane wewnątrz i na zewnątrz funkcji agregacji oraz są ujęte w nawiasy klamrowe.
Wyrażenie zestawu użyte w funkcji agregacji może wyglądać tak:
Przykład: Wewnętrzne wyrażenie zestawu
Sum( {$<Year={2021}>} Sales )
Jeśli masz wyrażenia z kilkom agregacjami i chcesz uniknąć konieczności pisania tego samego wyrażenia zestawu w każdej funkcji agregacji, użyj wyrażenia zestawu na zewnątrz funkcji agregacji.
Zewnętrzne wyrażenie zestawu musi znajdować się na początku zakresu.
Przykład: Zewnętrzne wyrażenie zestawu
{<Year={2021}>} Sum(Sales) / Count(distinct Customer)
Jeśli używasz wyrażenia zestawu na zewnątrz funkcji agregacji, to możesz ją zastosować także do istniejących miar głównych.
Przykład: Zewnętrzne wyrażenie zestawu zastosowane do miary głównej
{<Year={2021}>} [Master Measure]
Wyrażenie zestawu użyte na zewnątrz funkcji agregacji ma wpływ na całe wyrażenie, chyba że zostanie ujęte w nawias, który określa zakres dostępności. W poniższym przykładzie leksykalnego zakresu wyrażenie zestawu jest stosowane tylko do agregacji w nawiasie.
Przykład: Leksykalne ograniczenie zakresu
( {<Year={2021}>} Sum(Amount) / Count(distinct Customer) ) – Avg(CustomerSales)
Reguły
Zakres leksykalny
Wyrażenie zestawu ma wpływ na całe wyrażenie, chyba że znajduje się w nawiasie. W takim przypadku nawias określa zakres leksykalny.
pozycja;
Wyrażenie zestawu należy umieścić na początku zakresu leksykalnego.
Kontekst
Kontekstem jest selekcja odpowiednia dla danego wyrażenia. Zwyczajowo kontekstem zawsze jest domyślny stan obecnej selekcji. Jeśli jednak obiekt zostanie ustawiony na alternatywny stan, kontekstem jest stan alternatywny obecnej selekcji.
Ponadto kontekst można zdefiniować w postaci zewnętrznego wyrażenia zestawu.
Dziedziczenie
Wewnętrzne wyrażenia zestawów mają pierwszeństwo przed zewnętrznymi wyrażeniami zestawów. Jeśli wewnętrzne wyrażenie zestawu zawiera identyfikator zestawu, to zastępuje kontekst. W przeciwnym razie kontekst i wyrażenie zestawu są łączone.
-
{$<SetExpression>} – przesłania zewnętrzne wyrażenie zestawu
-
{<SetExpression>} – scalenie z zewnętrznym wyrażeniem zestawu
Przypisanie zestawu elementów
Przypisanie zestawu elementów określa sposób scalania dwóch selekcji. Jeśli użyty jest normalny znak równości, to pierwszeństwo ma wewnętrzne wyrażenie zestawu. W przeciwnym przypadku zostanie użyty niejawny operator zestawu.
-
{<Field={value}>} – ta wewnętrzna selekcja zastępuje selekcję zewnętrzną w “Field”.
-
{<Field+={value}>} – ta selekcja wewnętrzna zostaje scalona za pomocą operatora sumy z selekcją zewnętrzną w “Field”.
-
{<Field*={value}>} – ta selekcja wewnętrzna zostaje scalona za pomocą operatora przecięcia z selekcją zewnętrzną w “Field”.
Dziedziczenie w przypadku wielu kroków
Dziedziczenie może wystąpić w przypadku wielu kroków. Przykłady:
-
Bieżący wybór → Sum(Amount)
Funkcja agregacji użyje kontekstu, którym w tym przypadku jest aktualna selekcja.
-
Obecna selekcja → {<Set1>} Sum(Amount)
Set1 odziedziczy po obecnej selekcji, a wynikiem będzie kontekst dla funkcji agregacji.
-
Obecna selekcja → {<Set1>} ({<Set2>} Sum(Amount))
Set2 odziedziczy po Set1, która z kolei dziedziczy z obecnej selekcji, a wynikiem będzie kontekst dla funkcji agregacji.
Funkcja Aggr()
Funkcja Aggr() tworzy zagnieżdżoną agregację, która ma dwie niezależne agregacje. W poniższym przykładzie Count() jest obliczana dla każdej wartości Dim, a tablica wynikowa jest agregowana przy użyciu funkcji Sum().
Przykład:
Sum(Aggr(Count(X),Dim))
Count() jest wewnętrzną agregacją, a Sum() jest zewnętrzną agregacją.
-
Agregacja wewnętrzna nie dziedziczy żadnego kontekstu z agregacji zewnętrznej.
-
Agregacja wewnętrzna dziedziczy kontekst z funkcji Aggr(), która może zawierać wyrażenie zestawu.
-
Zarówno funkcja Aggr(), jak i zewnętrzna funkcja agregacji, dziedziczą kontekst z zewnętrznego wyrażenia zestawu.