Translation not up to date
W przypadku niektórych operacji istotna jest kolejność zdarzeń.
Aplikacja umożliwia pracę z następującymi sekwencjami rekordów:
- Sekwencje i szeregi czasowe
- Funkcje sekwencji
- Indeksowanie rekordów
- Uśrednianie, sumowanie i porównywanie wartości
- Monitorowanie zmiany-różnicowanie
@SINCE
- Wartości przesunięcia
- Dodatkowe narzędzia kolejności
W wielu przypadkach każdy rekord w strumieniu można uznać za pojedynczą obserwację, niezależną od wszystkich innych. Zazwyczaj w takich sytuacjach kolejność rekordów nie jest ważna.
Jednak w niektórych klasach problemów kolejność rekordów jest niezwykle istotna. Dotyczy to głównie szeregów czasowych, w przypadku których kolejność rekordów odzwierciedla uszeregowaną sekwencję zdarzeń lub wystąpień. Każdy rekord to obraz stanu w danej chwili. Wiele najistotniejszych informacji może jednak być zawartych nie w wartościach chwilowych, ale w sposobie, w jaki te wartości się zmieniają i zachowują w czasie.
Oczywiście kluczowym parametrem nie zawsze musi być czas. Przykładowo: rekordy mogą odzwierciedlać analizy wykonane w określonych odległościach na linii.
Funkcje specjalne i dotyczące kolejności można rozpoznać dzięki następującym wyznacznikom:
- Wszystkie te elementy są poprzedzane przedrostkiem
@
- Ich nazwy są podane wielkimi literami.
Funkcje sekwencji mogą się odnosić do rekordu aktualnie przetwarzanego przez węzeł, rekordów, które przeszły przez węzeł, a nawet (w jednym przypadku) rekordów, które dopiero przejdą przez węzeł. Funkcje sekwencji mogą być dowolnie mieszane z innymi komponentami wyrażeń CLEM, chociaż niektóre mają ograniczenia co do tego, co może być użyte jako ich argumenty.
Przykłady
Niekiedy chcemy uzyskać informację na temat czasu, który upłynął od danego zdarzenia lub spełnienia warunku. Tych informacji może dostarczyć funkcja @SINCE
, np.:
@SINCE(Income > Outgoings)
Ta funkcja zwraca przesunięcie ostatniego rekordu, w którym warunek był spełniony, tj. liczbę rekordów przed tym, w którym warunek był spełniony. Jeśli warunek nigdy nie
był prawdziwy, funkcja @SINCE
zwraca @INDEX + 1
.
Niekiedy użytkownik może chcieć się odnieść do wartości bieżącego rekordu w wyrażeniu użytym przez
@SINCE
. Tę operację można wykonać za pomocą funkcji @THIS
, która określa,
że nazwa zmiennej zawsze odnosi się do bieżącego rekordu. Aby znaleźć przesunięcie ostatniego rekordu, w którym wartość zmiennej Concentration
jest większa niż dwukrotna wartość bieżącego rekordu, można użyć wyrażenia:
@SINCE(Concentration > 2 * @THIS(Concentration))
Niekiedy warunek dodany do @SINCE
jest z definicji prawdziwy w przypadku bieżącego rekordu,
np.:
@SINCE(ID == @THIS(ID))
Z tego powodu program @SINCE
nie ocenia jego stanu dla bieżącego rekordu. Należy użyć podobnej funkcji (@SINCE0
), aby ocenić warunek w przypadku bieżącego
rekordu oraz poprzednich rekordów; jeśli warunek jest prawdziwy w przypadku bieżącego rekordu, funkcja
@SINCE0
zwraca wartość 0
.
Funkcja | Wynik | Opis |
---|---|---|
MEAN(FIELD) |
Liczba rzeczywista | Zwraca średnią wartości dla określonej ZMIENNEJ lub ZMIENNYCH. |
@MEAN(FIELD, EXPR) |
Liczba rzeczywista | Zwraca średnią wartości dla ZMIENNEJ wobec ostatnich rekordów WYR odebranych przez bieżący węzeł, w tym bieżący rekord. ZMIENNA musi być nazwą zmiennej numerycznej. WYR może być dowolnym wyrażeniem rozwijanym do liczby całkowitej większej niż 0. Jeśli parametr WYR. zostanie pominięty lub jeśli przekracza liczbę odebranych do tej pory rekordów, zwracana jest średnia ze wszystkich odebranych do tej pory rekordów. |
@MEAN(FIELD, EXPR, INT) |
Liczba rzeczywista | Zwraca średnią wartości dla ZMIENNEJ wobec ostatnich rekordów WYR odebranych przez bieżący węzeł, w tym bieżący rekord. ZMIENNA musi być nazwą zmiennej numerycznej. WYR może być dowolnym wyrażeniem rozwijanym do liczby całkowitej większej niż 0. Jeśli parametr WYR. zostanie pominięty lub jeśli przekracza liczbę odebranych do tej pory rekordów, zwracana jest średnia ze wszystkich odebranych do tej pory rekordów. LCAŁK określa maksymalną liczbę wartości sprawdzanych w tył. Takie rozwiązanie jest znacznie bardziej wydajne niż korzystanie z dwóch argumentów. |
@DIFF1(FIELD) |
Liczba rzeczywista | Zwraca pierwszą różniczkę ZMIENNEJ. Jednoargumentowa postać zwraca różnicę pomiędzy bieżącą wartością a poprzednią wartością zmiennej. Zwraca wartość $null$, jeśli prawidłowe, poprzednie rekordy nie istnieją. |
@DIFF1(FIELD1, FIELD2) |
Liczba rzeczywista | Postać dwuargumentowa zwraca pierwszą różniczkę ZMIENNEJ1 względem
ZMIENNEJ2. Zwraca wartość
$null$, jeśli prawidłowe, poprzednie rekordy nie istnieją. Zwracana wartość jest obliczana jako @DIFF1(FIELD1)/@DIFF1(FIELD2) . |
@DIFF2(FIELD) |
Liczba rzeczywista | Zwraca drugą różniczkę ZMIENNEJ. Jednoargumentowa postać
zwraca różnicę pomiędzy bieżącą wartością a poprzednią wartością zmiennej. Zwraca wartość
$null$, jeśli prawidłowe, poprzednie rekordy nie istnieją. Wartość @DIFF2 jest obliczana jako @DIFF(@DIFF(FIELD)) . |
@DIFF2(FIELD1, FIELD2) |
Liczba rzeczywista | Postać dwuargumentowa zwraca drugą różniczkę ZMIENNEJ1 względem
ZMIENNEJ2. Zwraca wartość
$null$, jeśli prawidłowe, poprzednie rekordy nie istnieją. To jest złożone obliczenie – @DIFF1(FIELD1)/@DIFF1(FIELD2) -
@OFFSET(@DIFF1(FIELD1),1)/@OFFSET(@DIFF1(FIELD2))) / @DIFF1(FIELD2) . |
@INDEX |
Liczba całkowita | Zwraca indeks bieżącego rekordu. Indeksy są alokowane w rekordach zgodnie z ich przybyciem w bieżącym węźle. Pierwszemu rekordowi jest nadawany indeks 1, a numery indeksów w przypadku wszystkich kolejnych rekordów zwiększają się o 1. |
@LAST_NON_BLANK(FIELD) |
Dowolne | Zwraca ostatnią wartość ZMIENNEJ, która nie była pusta, zgodnie z węzłem źródłowym
lub wprowadzania danych. Jeśli nie istnieją niepuste wartości ZMIENNEJ w odczytanych do tej pory rekordach, zwracana jest wartość $null$ . Wartości puste (nazywane również brakującymi wartościami użytkownika) można definiować oddzielnie dla każdej zmiennej. |
@MAX(FIELD) |
Liczba | Zwraca wartość maksymalną określonej ZMIENNEJ. |
@MAX(FIELD, EXPR) |
Liczba | Zwraca maksymalną wartość ZMIENNEJ w ostatnich rekordach WYR odebranych do tej pory z uwzględnieniem bieżącego rekordu. ZMIENNA musi być nazwą zmiennej numerycznej. WYR może być dowolnym wyrażeniem rozwijanym do liczby całkowitej większej niż 0. |
@MAX(FIELD, EXPR, INT) |
Liczba | Zwraca maksymalną wartość ZMIENNEJ w ostatnich rekordach WYR odebranych do tej pory z uwzględnieniem bieżącego rekordu. ZMIENNA musi być nazwą zmiennej numerycznej. WYR może być dowolnym wyrażeniem rozwijanym do liczby całkowitej większej niż 0. Jeśli parametr WYR. zostanie pominięty lub jeśli przekracza liczbę odebranych do tej pory rekordów, zwracana jest maksymalna wartość dla wszystkich odebranych do tej pory rekordów. LCAŁK określa maksymalną liczbę wartości sprawdzanych w tył. Takie rozwiązanie jest znacznie bardziej wydajne niż korzystanie z dwóch argumentów. |
@MIN(FIELD) |
Liczba | Zwraca wartość minimalną określonej ZMIENNEJ. |
@MIN(FIELD, EXPR) |
Liczba | Zwraca minimalną wartość dla ZMIENNEJ wobec ostatnich rekordów WYR odebranych do tej pory z uwzględnieniem bieżącego rekordu. ZMIENNA musi być nazwą zmiennej numerycznej. WYR może być dowolnym wyrażeniem rozwijanym do liczby całkowitej większej niż 0. |
@MIN(FIELD, EXPR, INT) |
Liczba | Zwraca minimalną wartość dla ZMIENNEJ wobec ostatnich rekordów WYR odebranych do tej pory z uwzględnieniem bieżącego rekordu. ZMIENNA musi być nazwą zmiennej numerycznej. WYR może być dowolnym wyrażeniem rozwijanym do liczby całkowitej większej niż 0. Jeśli parametr WYR. zostanie pominięty lub jeśli przekracza liczbę odebranych do tej pory rekordów, zwracana jest minimalna wartość dla wszystkich odebranych do tej pory rekordów. LCAŁK określa maksymalną liczbę wartości sprawdzanych w tył. Takie rozwiązanie jest znacznie bardziej wydajne niż korzystanie z dwóch argumentów. |
@OFFSET(FIELD, EXPR) |
Dowolne | Zwraca wartość ZMIENNEJ w rekordzie przesuniętym względem bieżącego rekordu o wartość
WYR. Przesunięcie dodatnie odnosi się do rekordu, który już przeszedł ("spojrzenie w tył"), a
przesunięcie ujemne określa "spojrzenie w przód” względem rekordu, który dopiero nadejdzie. Przykładowo:
funkcja @OFFSET(Status, 1) zwraca wartość zmiennej Status w poprzednim rekordzie, natomiast @OFFSET(Status, –4) "spogląda w przód" w zakresie czterech rekordów w
sekwencji (czyli rekordów, które jeszcze nie przeszły przez ten węzeł). Przesunięcie ujemne ("spojrzenie w przód") należy określić jako stałą. W przypadku dodatnich przesunięć tylko wartość WYR może być również dowolnym wyrażeniem CLEM, które jest wartościowane dla bieżącego rekordu w celu nadania przesunięcia. W takim przypadku trzyargumentowa wersja tej funkcji
powinna zwiększyć wydajność działania (patrz następna funkcja). Jeśli wyrażenie zwraca wynik inny niż
nieujemna liczba całkowita, wyświetlany jest błąd. Oznacza to, że nie można uzyskać obliczenia przesunięcia
w przód. Należy zauważyć, że funkcja referencyjna @OFFSET nie może używać funkcji wyszukiwania literału w przód. Na przykład w węźle wypełniania nie można zastąpić wartości field1 przy użyciu wyrażenia, takiego jak @OFFSET(field1,-2) . W węźle wypełniającym, wypełniając pole, istnieją dwie różne wartości tego pola, a mianowicie wartość wstępnie wypełniona i wypełniona po wypełnieniu pola. Gdy funkcja @OFFSET
odnosi się do samej siebie, odnosi się ona do wartości po wypełnieniu. Wartość po wypełnieniu istnieje tylko w przypadku
minionych wierszy, więc odnosząca się do samej siebie funkcja @OFFSET może się odnosić tylko do minionych wierszy. Ponieważ samodzielny referencja @OFFSET nie może odnosić się do przyszłości, wykonuje następujące sprawdzenia przesunięcia:
|
@OFFSET(FIELD, EXPR, INT) |
Dowolne | Wykonuje taką samą operację jak funkcja @OFFSET , jednak dodawany jest
trzeci argument (LCAŁK), który określa maksymalną liczbę wartości do przeszukania w tył. W sytuacjach
kiedy przesunięcie jest obliczane na podstawie wyrażenia, dodanie trzeciego argumentu powinno zwiększyć wydajność. Przykładowo: w wyrażeniu, takim jak @OFFSET(Foo, Month, 12) system wie, że należy zachować tylko ostatnich dwanaście wartości Foo ; w przeciwnym razie na wszelki wypadek
przechowywane są wszystkie wartości. W sytuacjach kiedy wartość przesunięcia jest stałą (dotyczy to też ujemnych przesunięć w przód,
które muszą być wartościami stałymi), stosowanie trzeciego argumentu nie ma uzasadnienia i należy stosować
dwuargumentową wersję tej funkcji. Użytkownik powinien również zapoznać się z funkcjami odnoszącymi się do samych siebie w wersji dwuargumentowej opisanej wcześniej. Należy pamiętać, że użycie zarówno funkcji lookahead, jak i lookback w obrębie jednego węzła nie jest obsługiwane. |
@SDEV(FIELD) |
Liczba rzeczywista | Zwraca odchylenie standardowe wartości dla określonej ZMIENNEJ lub ZMIENNYCH. |
@SDEV(FIELD, EXPR) |
Liczba rzeczywista | Zwraca odchylenie standardowe wartości ZMIENNEJ z ostatnich rekordów WYR odebranych przez bieżący węzeł z uwzględnieniem bieżącego rekordu. ZMIENNA musi być nazwą zmiennej numerycznej. WYR może być dowolnym wyrażeniem rozwijanym do liczby całkowitej większej niż 0. Jeśli parametr WYR. zostanie pominięty lub jeśli przekracza liczbę odebranych do tej pory rekordów, zwracane jest odchylenie standardowe dla wszystkich odebranych do tej pory rekordów. |
@SDEV(FIELD, EXPR, INT) |
Liczba rzeczywista | Zwraca odchylenie standardowe wartości ZMIENNEJ z ostatnich rekordów WYR odebranych przez bieżący węzeł z uwzględnieniem bieżącego rekordu. ZMIENNA musi być nazwą zmiennej numerycznej. WYR może być dowolnym wyrażeniem rozwijanym do liczby całkowitej większej niż 0. Jeśli parametr WYR. zostanie pominięty lub jeśli przekracza liczbę odebranych do tej pory rekordów, zwracane jest odchylenie standardowe dla wszystkich odebranych do tej pory rekordów. LCAŁK określa maksymalną liczbę wartości sprawdzanych w tył. Takie rozwiązanie jest znacznie bardziej wydajne niż korzystanie z dwóch argumentów. |
@SINCE(EXPR) |
Dowolne | Zwraca liczbę rekordów, które przeszły od WYR, dowolnego wyrażenia CLEM, było prawdziwe. |
@SINCE(EXPR, INT) |
Dowolne | Dodanie drugiego argumentu (LCAŁK) określa maksymalną liczbę rekordów, które są badane w tył. Jeśli WYR nigdy nie było prawdziwe, funkcją LCAŁK jest @INDEX+1 . |
@SINCE0(EXPR) |
Dowolne | Uwzględnia bieżący rekord, natomiast funkcja @SINCE nie uwzględnia go.
Funkcja @SINCE0 zwraca 0, jeśli WYR jest prawdziwe dla bieżącego rekordu. |
@SINCE0(EXPR, INT) |
Dowolne | Dodanie drugiego argumentu (LCAŁK) określa maksymalną liczbę rekordów, które są badane w tył. |
@SUM(FIELD) |
Liczba | Zwraca sumę wartości dla określonej ZMIENNEJ lub ZMIENNYCH. |
@SUM(FIELD, EXPR) |
Liczba | Zwraca sumę wartości dla ZMIENNEJ wobec ostatnich rekordów WYR odebranych przez bieżący węzeł z uwzględnieniem bieżącego rekordu. ZMIENNA musi być nazwą zmiennej numerycznej. WYR może być dowolnym wyrażeniem rozwijanym do liczby całkowitej większej niż 0. Jeśli parametr WYR. zostanie pominięty lub jeśli przekracza liczbę odebranych do tej pory rekordów, zwracana jest suma wszystkich odebranych do tej pory rekordów. |
@SUM(FIELD, EXPR, INT) |
Liczba | Zwraca sumę wartości dla ZMIENNEJ wobec ostatnich rekordów WYR odebranych przez bieżący węzeł z uwzględnieniem bieżącego rekordu. ZMIENNA musi być nazwą zmiennej numerycznej. WYR może być dowolnym wyrażeniem rozwijanym do liczby całkowitej większej niż 0. Jeśli parametr WYR. zostanie pominięty lub jeśli przekracza liczbę odebranych do tej pory rekordów, zwracana jest suma wszystkich odebranych do tej pory rekordów. LCAŁK określa maksymalną liczbę wartości sprawdzanych w tył. Takie rozwiązanie jest znacznie bardziej wydajne niż korzystanie z dwóch argumentów. |
@THIS(FIELD) |
Dowolne | Zwraca wartość zmiennej o nazwie ZMIENNA w bieżącym rekordzie. Używane tylko w wyrażeniach
@SINCE . |