FirstSortedValue
Funkcja FirstSortedValue() zwraca wartość z wyrażenia podanego argumentem value, która odpowiada wynikowi posortowania według argumentu sort_weight z uwzględnieniem argumentu rank (jeśli został podany). W przypadku uzyskania więcej niż jednej wartości o takim samym wyniku sort_weight dla podanej wartości argumentu rank funkcja zwraca NULL.
Składnia:
FirstSortedValue([{SetExpression}] [DISTINCT] [TOTAL [<fld {,fld}>]] value, sort_weight [,rank])
Typ zwracanych danych: podwójny
Argumenty:
- value: Pole danych wyjściowych Funkcja znajduje wartość wyrażenia value odpowiadającą wynikowi sortowania argumentu sort_weight.
- sort_weight: Pole wejściowe Wyrażenie zawierające dane do sortowania. Znajdowana jest pierwsza (najniższa) wartość argumentu sort_weight, na podstawie której określana jest wartość wyrażenia podanego argumentem value. Jeśli przed argumentem sort_weight zostanie podany znak minusa, funkcja zwróci ostatnią (najwyższą) wartość z sortowania.
- rank: Podanie dla parametru rank wartości „n” większej niż 1 spowoduje zwrócenie n-tej wartości w kolejności sortowania.
- SetExpression: Funkcja agregacji będzie domyślnie dokonywać agregacji na zbiorze możliwych rekordów zdefiniowanym przez daną selekcję. Alternatywny zestaw wierszy można zdefiniować za pomocą wyrażenia analizy zestawów.
- DISTINCT: Jeśli przed argumentami funkcji występuje słowo DISTINCT, wówczas duplikaty wynikające z wyników obliczenia argumentów funkcji są pomijane.
- TOTAL: Jeśli słowo TOTAL występuje przed argumentami funkcji, wówczas obliczenie jest wykonywane względem wszystkich możliwych wartości z uwzględnieniem bieżących selekcji, nie tylko tych należących do bieżącej wartości wymiaru, to znaczy z pominięciem wymiarów wykresu. Po kwalifikatorze TOTAL może następować lista zawierająca co najmniej jedną nazwę pola w nawiasach trójkątnych <fld>. Te nazwy pól powinny być podzbiorem zmiennych wymiaru wykresu.
Przykłady:
Przykład | Wynik |
---|---|
firstsortedvalue (Product, UnitPrice) |
BB, czyli Product z najniższą wartością w kolumnie UnitPrice(9). |
firstsortedvalue (Product, UnitPrice, 2) |
BB, czyli Product z drugą najniższą wartością w kolumnie UnitPrice(10). |
firstsortedvalue (Customer, -UnitPrice, 2) |
Betacab, czyli Customer, który ma Product z drugą najwyższą wartością w kolumnie UnitPrice(20). |
firstsortedvalue (Customer, UnitPrice, 3) |
NULL, ponieważ są dwie wartości w kolumnie Customer (Astrida i Canutility) z tą samą wartością rank (trzecia najniższa wartość) w kolumnie UnitPrice(15). Aby zapewnić, że nie zostaną niespodziewanie zwrócone wartości null, należy skorzystać z kwalifikatora distinct. |
firstsortedvalue (Customer, -UnitPrice*UnitSales, 2) |
Canutility, czyli Customer z drugą najwyższą wartością w kolumnie UnitPrice pomnożoną przez wartość w kolumnie UnitSales (120). |
Dane zastosowane w przykładach:
ProductData:
LOAD * inline [
Customer|Product|UnitSales|UnitPrice
Astrida|AA|4|16
Astrida|AA|10|15
Astrida|BB|9|9
Betacab|BB|5|10
Betacab|CC|2|20
Betacab|DD||25
Canutility|AA|8|15
Canutility|CC||19
] (delimiter is '|');
Customer | Product | UnitSales | UnitPrice |
---|---|---|---|
Astrida | AA | 4 | 16 |
Astrida | AA | 10 | 15 |
Astrida | BB | 9 | 9 |
Betacab | BB | 5 | 10 |
Betacab | CC | 2 | 20 |
Betacab | DD | - | 25 |
Canutility | AA | 8 | 15 |
Canutility | CC | - | 19 |