ORDERBY, funkcja ER
Funkcja ORDERBY
zwraca określoną listę jako wartość typu Lista rekordów po jej posortowaniu zgodnie z określonymi argumentami. Te argumenty można zdefiniować jako wyrażenia.
Składnia 1
ORDERBY (list, expression 1[, expression 2, …, expression N])
Składnia 2
ORDERBY (location, list, expression 1[, expression 2, …, expression N])
Banknot
Ta składnia jest obsługiwana przez Microsoft Dynamics 365 Finance w wersji 10.0.25 i nowszych.
Argumenty
location
: Ciąg
Lokalizacja, w której ma być uruchamiane sortowanie. Poprawne są następujące opcje:
- "Query"
- "InMemory"
list
: Lista rekordów
Prawidłowa ścieżka elementu źródła danych o typie danych Lista rekordów.
expression 1
: Pole
Prawidłowa ścieżka pola źródła danych, do której odwołuje się argument list
wywoływanej funkcji. Przywoływane pole musi być polem typu danych pierwotnych. Ten argument jest wymagany.
expression N
: Pole
Prawidłowa ścieżka pola źródła danych, do której odwołuje się argument list
wywoływanej funkcji. Przywoływane pole musi być polem typu danych pierwotnych. Te dodatkowe argumenty są opcjonalne.
Wartości zwracane
Lista rekordów
Wynikowa lista rekordów.
Uwagi dotyczące użytkowania
Składnia 1
Sortowanie danych jest zawsze wykonywane w pamięci serwera aplikacji. Aby uzyskać więcej szczegółów, zobacz przykład 1.
Składnia 2
Sortowanie w pamięci
Jeśli argument location
jest określony jako InMemory, sortowanie danych jest wykonywane w pamięci serwera aplikacji. Aby uzyskać więcej szczegółów, zobacz przykład 2.
Sortowanie w bazie danych
Jeśli argument location
zostanie określony jako Zapytanie, sortowanie danych jest wykonywane na poziomie bazy danych. W tym przypadku argument list
musi wskazać jedno z następujących źródeł danych raportowania elektronicznego (ER), które określa źródło aplikacji, dla których może zostać utworzone bezpośrednie zapytanie bazy danych:
- Źródło danych typu Rekordy tabeli
- Relacja źródła danych typu Rekordy tabeli
- Typ źródła danych typu Pole obliczeniowe
Argumenty expression 1
i expression N
muszą wskazywać na pola źródła danych ER, które określają odpowiednie pola źródła aplikacji, dla których można również utworzyć bezpośrednie zapytanie do bazy danych.
Jeśli nie można utworzyć bezpośredniego zapytania do bazy danych, w projektancie odwzorowania modelu ER pojawia się błąd walidacji. Odebrany komunikat stwierdza, że wyrażenie ER zawierające funkcję ORDERBY
nie może zostać uruchomione w czasie wykonywania.
Dla lepszej wydajności zalecamy użycie opcji Query, gdy sortowanie jest skonfigurowane dla źródeł danych aplikacji, które mogą zawierać dużą liczbę rekordów (na przykład dla tabel aplikacji transakcyjnych).
Banknot
Sama funkcja ORDEBY
nie może być przetłumaczona na bezpośrednie zapytanie do bazy danych. Dlatego źródło danych ER, które zawiera tę funkcję, nie może być przedmiotem zapytań. Nie może być również użyty w zakresie funkcji ER takich jak FILTER i ALLITEMSQUERY, gdzie mogą być użyte tylko źródła danych, które można odpytywać.
Aby uzyskać więcej informacji, zobacz przykład 3 i przykład 4.
Porównywalność
Ponieważ silnik bazy danych SQL i serwer aplikacji Finanse mogą używać różnych wartości rankingu dla pojedynczego znaku, wynik sortowania tej samej listy rekordów może się różnić, gdy do sortowania używane jest pole String. Aby uzyskać więcej szczegółów, zobacz przykład 5.
Przykład 1: Domyślne wykonywanie w pamięci
Jeśli wprowadzisz źródło danych DS typu Pole obliczeniowe i zawiera ono wyrażenie SPLIT ("C|B|A", "|")
, wyrażenie FIRST( ORDERBY( DS, DS. Value)).Value
zwraca wartość tekstową "A".
Przykład 2: Wyraźne wykonywanie w pamięci
Jeśli opcja Vendor jest skonfigurowana jako źródło danych raportowania elektronicznego (ER) typu Rekordy tabeli, odwołujące się do tabeli VendTable, zarówno wyrażenie ORDERBY (Vendor, Vendor.'name()')
, jak i ORDERBY ("InMemory", Vendor, Vendor.'name()')
zwracają listę dostawców posortowaną według nazw w porządku rosnącym.
Kiedy konfigurujesz wyrażenie ORDERBY ("Query", Vendor, Vendor.'name()')
w projektancie odwzorowania modelu ER, pojawia się błąd walidacji w czasie projektowania, ponieważ ścieżka Vendor.'name()'
odnosi się do metody aplikacji, która posiada logikę, która nie może być przetłumaczona na bezpośrednie zapytanie do bazy danych.
Przykład 3: Kwerenda bazy danych
Jeśli TaxTransaction jest skonfigurowane jako źródło danych ER typu Rekordy tabeli, które odwołuje się do tabeli TaxTrans, wyrażenie ORDERBY ("Query", TaxTransaction, TaxTransaction.TaxCode)
rekordy na poziomie aplikacji bazy danych i zwraca listę transakcji podatkowych posortowanych rosnąco według kodu podatkowego.
Przykład 4: Źródła danych, które można przeszukiwać
Jeśli TaxTransaction jest skonfigurowane jako źródło danych ER typu Rekordy tabeli, które odwołuje się do tabeli TaxTrans, źródło danych ER TaxTransactionFiltered może być skonfigurowane tak, aby zawierało wyrażenie FILTER(TaxTransaction, TaxCode="VAT19")
, które będzie pobierać transakcje dla określonego kodu podatkowego. Ponieważ skonfigurowane źródło danych TaxTransactionFiltered ER jest możliwe do przeszukania, wyrażenie ORDERBY ("Query", TaxTransactionFiltered, TaxTransactionFiltered.TransDate)
może być skonfigurowane tak, aby zwrócić listę przefiltrowanych transakcji podatkowych posortowanych według daty transakcji w porządku rosnącym.
Jeśli skonfigurujesz TaxTransactionOrdered jako źródło danych ER typu Pole kalkulowane zawierające wyrażenie ORDERBY ("Query", TaxTransaction, TaxTransaction.TransDate)
oraz źródło danych ER typu Pole kalkulowane zawierające wyrażenie FILTER(TaxTransactionOrdered, TaxCode="VAT19")
, pojawia się błąd błąd w czasie projektowania w projektancie odwzorowania modelu ER. Ten błąd pojawia się, ponieważ pierwszy argument funkcji FILTER musi odwoływać się do źródła danych ER, ale źródło danych TaxTransactionOrdered, które zawiera funkcję ORDERBY
, nie jest dostępne dla zapytań.
Przykład 5: Porównywaność
Wymagania wstępne
- Wprowadź źródło danych DS1 typu Pole obliczeniowe, które zawiera wyrażenie
SPLIT ("D1|_D2|D3", "|")
. - Otwórz stronę Wartości wymiaru finansowego i wybierz wymiar CostCenter.
- Wprowadź następujące wartości rozmiaru: D1, _D2 i D3.
Sortowanie w pamięci
- Skonfiguruj źródło danych DS2 o typie Pole kalkulowane, które zawiera wyrażenie
ORDERBY("InMemory", DS1, DS1.Value)
. - Zauważmy, że wyrażenie
FIRST(DS2).Value
zwraca wartość tekstową "D1", wyrażenieINDEX(DS2, COUNT(DS2)).Value
zwraca wartość tekstową "_D2", a wyrażenieSTRINGJOIN(DS2, DS2.Value, "|")
zwraca wartość tekstową "D1D3D2".
Sortowanie w bazie danych
- Podaj źródło danych DS3 typu Rekordy tabeli, które odnosi się do encji FinancialDimensionValueEntity.
- Skonfiguruj źródło danych DS4 o typie Pole kalkulowane, które zawiera wyrażenie
FILTER(DS3, DS3.FinancialDimension="CostCenter")
. - Skonfiguruj źródło danych DS5 o typie Pole kalkulowane, które zawiera wyrażenie
ORDERBY(DS4, DS4.DimensionValue)
. - Zauważmy, że wyrażenie
FIRST(DS5).Value
zwraca wartość tekstową "_D2", wyrażenieINDEX(DS5, COUNT(DS5)).Value
zwraca wartość tekstową "D3", a wyrażenieSTRINGJOIN(DS5, DS5.Value, "|")
zwraca wartość tekstową "_D2D1D3".