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 ono kontekst zdefiniowany w zewnętrznym wyrażeniu zestawu. W przeciwnym razie oceniane są zarówno wewnętrzne, jak i zewnętrzne wyrażenia zestawu.
Przykład 1: Wewnętrzne wyrażenie zestawu z identyfikatorem zestawu
W powyższym wyrażeniu wewnętrzne wyrażenie zestawu Count({1} distinct OrderNumber) zawiera identyfikator zestawu {1}. Gdy to wewnętrzne wyrażenie zestawu jest obliczane, zakres zdefiniowany w zewnętrznym wyrażeniu zestawu {<Year={2023}>} nie jest stosowany.
Przykład 2: Wewnętrzne wyrażenia zestawu bez identyfikatorów zestawu
W powyższym wyrażeniu wewnętrzne wyrażenia zestawu Sum ({<Status={'Confirmed'}>} Sales_Stream1) i Sum ({<UpdatedStatus={'Confirmed'}>} Sales_Stream2) nie zawierają identyfikatora zestawu. Dlatego zewnętrzne wyrażenie zestawu {<Year={2023}>} i oba wewnętrzne wyrażenia zestawu są stosowane podczas obliczania wyniku.
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.
Dziedziczenie łańcuchów wewnętrznych i zewnętrznych wyrażeń zestawu
Istnieją dodatkowe względy dotyczące dziedziczenia podczas używania wielu wyrażeń zestawu w złożonych łańcuchach, szczególnie gdy po zewnętrznym wyrażeniu zestawu następują inne zewnętrzne wyrażenia zestawu lub wewnętrzne wyrażenie zestawu. Aby uzyskać szczegółowe informacje, zobacz temat Łańcuchy wielu zewnętrznych i wewnętrznych wyrażeń zestawu.
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.
Łańcuchy wielu zewnętrznych i wewnętrznych wyrażeń zestawu
Należy pamiętać, że można mieć więcej niż jedno zewnętrzne wyrażenie zestawu. W tym przykładzie mamy dwa zewnętrzne wyrażenia zestawu i jedno wewnętrzne:
Wyrażenia zestawu będą stosowane od lewej do prawej. Oznacza to, że jeśli dwa wyrażenia zestawu używają kolidujących zestawów, pierwszeństwo będzie miało wyrażenie znajdujące się najbardziej na prawo.
Chociaż nie ma ograniczeń co do liczby zewnętrznych wyrażeń zestawu połączonych w ten sposób, liczba wewnętrznych wyrażeń zestawu jest ograniczona do jednego. Występowanie więcej niż jednego zewnętrznego wyrażenia zestawu obok siebie nie spowoduje żadnego błędu, ale tylko to znajdujące się najbardziej na prawo zostanie użyte podczas oceny.
Dziedziczenie wyrażenia zestawu
Gdy wyrażenie agregacji zawiera więcej niż jedno wyrażenie zestawu jako część łańcucha, wyrażenia zestawu będą oceniane jedno po drugim od lewej do prawej. Wynikiem każdego wyrażenia zestawu jest grupa zestawów, potencjalnie po jednym dla każdego wymiaru. Zestawy są przekazywane do następnego wyrażenia zestawu, które może dokonać dalszych zmian przed przekazaniem do następnego.
Dopóki każde wyrażenie zestawu działa na różnych wymiarach, nie będzie między nimi konfliktów, a wszystkie zestawy zostaną zachowane do końca łańcucha (i zastosowane podczas agregacji). Istnieje jeden wyjątek od tej reguły, który czasami ma zastosowanie, gdy wymiar w wyrażeniu zestawu dał pusty zestaw. Więcej informacji podano poniżej:
Puste zestawy wyboru
Gdy wymiar w wyrażeniu zestawu jest oceniany, zestaw może nie zawierać żadnych danych. Nazywa się to zestawem pustym. Zestawy puste mogą występować w wielu sytuacjach, takich jak:
Nieprawidłowa definicja wyrażenia. Na przykład przy próbie wyszukania wartości 2025 za pomocą wyrażenia zestawu {<OrderYear={‘2025’}>}, wyrażenie jest zapisywane jako {<OrderYear={‘0025’}>}.
Podczas analizy dokonuje się wyboru w innym wymiarze niż ten, do którego odwołuje się wyrażenie, a wybór ten skutkuje brakiem dostępnych danych dla wymiaru wyrażenia zestawu. Na przykład użytkownik dokonuje wyboru dla Region='Europe', a wyrażenie zestawu filtruje według {<ProductCategory={‘Shirts’}>} Sum (Sales). Jeśli żadne koszule nie są sprzedawane w Europie, wyrażenie zestawu zawiera pusty zestaw.
Pusty zestaw jest jawnie zdefiniowany w wyrażeniu. Nie jest to powszechne ani użyteczne, ale technicznie możliwe. Na przykład: {<Year={}>}
Niejawne czyszczenie zestawu wyboru
Jeśli wynikiem zastosowania wyrażenia zestawu jest pusty zestaw dla jednego z wymiarów (Puste zestawy wyboru), a po nim zostanie zastosowane jeszcze jedno wyrażenie zestawu, wówczas zestaw wyboru dla tego wymiaru zostanie wyczyszczony (zostanie przywrócony pełny zestaw) tuż przed zastosowaniem kolejnego wyrażenia zestawu. Wyczyszczony zestaw wyboru oznacza, że wszystkie wartości są uwzględnione. Należy jednak pamiętać, że to czyszczenie odbywa się tylko wtedy, gdy po wyrażeniu zestawu, które daje pusty zestaw, stosowane jest jeszcze jedno zewnętrzne wyrażenie zestawu.
Oto przykład sytuacji, w której wystąpi wyczyszczony zestaw wyboru:
{<Year={}>} {<Region={"Europe"}>} Sum( Sales )
Year={} utworzy pusty zestaw dla wymiaru Year. Oznacza to, że zestaw wyboru dla Year jest czyszczony, gdy zestaw jest przekazywany do następnego wyrażenia zestawu, które zawiera Region={Europe}. Należy pamiętać, że czyszczenie wyboru odbywa się tylko dla pojedynczego wymiaru. Zestawy w innych wymiarach — w tym zestawy w ramach tego samego wyrażenia zestawu — będą nadal przekazywane bez modyfikacji.
Oto kolejny przykład wyczyszczonego zestawu wyboru:
{<Year={}, Product={"XI345"}>} {<Region={"Europe"}>} Sum(Sales)
W powyższym przykładzie zachodzi następująca sytuacja:
Są stosowane zestawy wyboru Product={"XI345"} i Region={"Europe"}.
Wybór Year={} nie jest stosowany. Dzieje się tak, ponieważ zestaw ten jest czyszczony po zastosowaniu ostatniego wyrażenia zestawu — {<Region={"Europe"}>}.
Przeniesienie składnika wyrażenia zestawu do ostatniego zewnętrznego wyrażenia zestawu zapobiegnie niejawnemu czyszczeniu. Rozważmy ten przykład:
{<Product={"XI345"}>} {<Year={}, Region={"Europe"}>} Sum(Sales)
Przenieśliśmy wyrażenie Year do ostatniego wyrażenia zestawu w łańcuchu. Zapobiegnie to niejawnemu czyszczeniu, a pusty wybór dla wymiaru Year zostanie faktycznie użyty do agregacji Sum.
W każdym przypadku może dojść do niepożądanego działania podczas czyszczenia zestawów wyboru. Aby poprawić jakość analizy i ułatwić sobie pisanie łańcuchów wyrażeń zestawu, należy użyć flagi zachowania zestawu pustego. Więcej informacji zawiera temat Flaga zachowania zestawu pustego (zewnętrzne wyrażenia zestawu).
Flaga zachowania zestawu pustego (zewnętrzne wyrażenia zestawu)
Użyj symbolu & (flaga zachowania zestawu pustego), aby uprościć model oceny zewnętrznych wyrażeń zestawu. Na przykład:
{& <Year={}, Product={XI345}>} {<Region={Europe}>} Sum( Sales )
W tym przykładzie Year={} definiuje pusty zestaw wyboru dla Year. Bez symbolu & wyrażenie {<Region={Europe}>} spowodowałoby wyczyszczenie pustego zestawu wyboru Year, co skutkowałoby użyciem wszystkich danych w obliczeniach agregacji. Symbol & zmusza agregację do uwzględniania pustego zestawu wyboru Year, co skutkuje bardziej zrozumiałym wynikiem.
Aby uzyskać szczegółowe informacje na temat flagi zachowania pustego zestawu, zobacz temat Flaga zachowania pustego zestawu.