Funkce elektronického výkaznictví ORDERBY
Funkce ORDERBY
vrátí zadaný seznam jako hodnotu typu seznam záznamů poté, co byl seřazen podle zadaných argumentů. Tyto argumenty lze definovat jako výrazy.
Syntaxe 1
ORDERBY (list, expression 1[, expression 2, …, expression N])
Syntaxe 2
ORDERBY (location, list, expression 1[, expression 2, …, expression N])
Poznámka
Tato syntace je podporována Microsoft Dynamics 365 Finance verze 10.0.25 a novější.
Argumenty
location
: Řetězec
Místo, kde se má řazení spustit. Platné jsou tyto možnosti:
- "Query"
- "InMemory"
list
: Seznam záznamů
Platná cesta ke zdroji dat typu seznam záznamů.
expression 1
: Pole
Platná cesta k poli zdroje dat, na který odkazuje argument list
volané funkce. Odkazované pole musí být primitivního datového typu. Tento argument je povinný.
expression N
: Pole
Platná cesta k poli zdroje dat, na který odkazuje argument list
volané funkce. Odkazované pole musí být primitivního datového typu. Tyto další argumenty jsou nepovinné.
Vrácené hodnoty
Seznam záznamů
Výsledný seznam záznamů.
Poznámky k použití
Syntaxe 1
Řazení dat se vždy provádí v paměti aplikačního serveru. Další podrobnosti viz příklad 1.
Syntaxe 2
Řazení v paměti
Když je argument location
je specifikován jako InMemory, řazení dat se provádí v paměti aplikačního serveru. Další podrobnosti viz příklad 2.
Řazení v databázi
Když je argument location
specifikován jako Dotaz, řazení dat se provádí na úrovni databáze. V tomto případě argument list
musí ukazovat na jeden z následujících zdrojů dat elektronického vykazování (ER), který specifikuje zdroj aplikace, pro který lze vytvořit přímý databázový dotaz:
- Zdroj dat typu Záznamy tabulky
- Vztah zdroje dat typu Záznamy tabulky
- Zdroj dat typu Pole výpočtu
Argumenty expression 1
a expression N
musí ukazovat na pole zdroje dat ER, které specifikuje příslušná pole zdroje aplikace, pro který lze vytvořit přímý databázový dotaz:
Pokud nelze navázat přímý dotaz na databázi, dojde v návrháři mapování modelu ER k chybě ověření. Zpráva, kterou obdržíte, uvádí, že výraz ER obsahující funkci ORDERBY
nelze spustit za běhu programu.
Pro lepší výkon doporučujeme používat možnost Dotaz, když je řazení nakonfigurováno pro aplikační zdroje dat, které mohou obsahovat velký počet záznamů (například pro transakční aplikační tabulky).
Poznámka
Samotnou funkci ORDEBY
nelze převést na přímý databázový dotaz. Proto zdroj dat ER, který obsahuje tuto funkci, nelze dotazovat. Rovněž ho nelze použít v rámci funkcí ER, jako je např. FILTER a ALLITEMSQUERY, kde lze použít pouze dotazovatelné zdroje dat.
Další podrobnosti viz příklad 3 a příklad 4.
Srovnatelnost
Protože databázový modul SQL a aplikační server Finance mohou pro jeden znak používat různé hodnoty hodnocení, může se výsledek řazení stejného seznamu záznamů lišit, když se pro řazení používá pole Řetězec. Další podrobnosti viz příklad 5.
Příklad 1: Výchozí spuštění v paměti
Pokud zadáte zdroj dat DS typu vypočítané pole a ten obsahuje výraz SPLIT ("C|B|A", "|")
, výraz FIRST( ORDERBY( DS, DS. Value)).Value
vrátí textovou hodnotu "A".
Příklad 2: Explicitní spuštění v paměti
Jestliže Dodavatel nakonfigurován jako zdroj dat ER typu Záznamy tabulky, který odkazuje na tabulku VendTable, výraz ORDERBY (Vendor, Vendor.'name()')
i výraz ORDERBY ("InMemory", Vendor, Vendor.'name()')
vrátí seznam dodavatelů seřazených podle názvu ve vzestupném pořadí.
Když nakonfigurujete výraz ORDERBY ("Query", Vendor, Vendor.'name()')
v návrháři mapování modelu ER, chyba ověření se vyskytuje v době návrhu, protože cesta Vendor.'name()'
odkazuje na metodu aplikace, která má logiku, kterou nelze převést na přímý databázový dotaz.
Příklad 3: Databázový dotaz
Pokud je TaxTransaction nakonfigurováno jako zdroj dat ER typu Záznamy tabulky, který odkazuje na tabulku TaxTrans, výraz ORDERBY ("Query", TaxTransaction, TaxTransaction.TaxCode)
seřadí záznamy na úrovni databáze aplikace a vrátí seznam daňových transakcí, který je seřazen vzestupně podle kódu daně.
Příklad 4: Dotazovatelné zdroje dat
Pokud je TaxTransaction nakonfigurováno jako zdroj dat ER typu Záznamy tabulky, který odkazuje na tabulku TaxTrans, zdroj dat ER TaxTransactionFiltered lze nakonfigurovat tak, aby obsahoval výraz FILTER(TaxTransaction, TaxCode="VAT19")
, který načte transakce pro zadaný daňový kód. Protože nakonfigurovaný zdroj dat ER TaxTransactionFiltered je dotazovatelný, výraz ORDERBY ("Query", TaxTransactionFiltered, TaxTransactionFiltered.TransDate)
lze nakonfigurovat tak, aby vracel seznam filtrovaných daňových transakcí seřazený podle data transakce ve vzestupném pořadí.
Pokud nakonfigurujete TaxTransactionOrdered jako zdroj dat ER typu Počítané pole, který obsahuje výraz ORDERBY ("Query", TaxTransaction, TaxTransaction.TransDate)
, a zdroj dat ER typu Počítané pole, který obsahuje výraz FILTER(TaxTransactionOrdered, TaxCode="VAT19")
, dojde k chybě ověření v době návrhu v návrháři mapování modelu ER. K této chybě dochází, protože první argument funkce FILTER musí odkazovat na dotazovatelný zdroj dat ER, ale zdroj dat TaxTransactionOrdered , který obsahuje funkci ORDERBY
není dotazovatelný.
Příklad 5: Srovnatelnost
Předpoklady
- Zadejte zdroj dat DS1 typu Vypočítané pole, který obsahuje výraz
SPLIT ("D1|_D2|D3", "|")
. - Otevřete stránku Hodnoty finanční dimenze a vyberte dimenzi CostCenter.
- Zadejte následující hodnoty dimenzí: D1, _D2 a D3.
Řazení v paměti
- Nakonfigurujte zdroj dat DS2 typu Počítané pole, který obsahuje výraz
ORDERBY("InMemory", DS1, DS1.Value)
. - Všimněte si, že výraz
FIRST(DS2).Value
vrátí textovou hodnotu "D1", výrazINDEX(DS2, COUNT(DS2)).Value
vrátí textovou hodnotu "_D2" a výrazSTRINGJOIN(DS2, DS2.Value, "|")
vrátí textovou hodnotu "D1|D3|_D2".
Řazení v databázi
- Zadejte zdroj dat DS3 typu Záznamy tabulky, který odkazuje na entitu FinancialDimensionValueEntity.
- Nakonfigurujte zdroj dat DS4 typu Počítané pole, který obsahuje výraz
FILTER(DS3, DS3.FinancialDimension="CostCenter")
. - Nakonfigurujte zdroj dat DS5 typu Počítané pole, který obsahuje výraz
ORDERBY(DS4, DS4.DimensionValue)
. - Všimněte si, že výraz
FIRST(DS5).Value
vrátí textovou hodnotu "_D2", výrazINDEX(DS5, COUNT(DS5)).Value
vrátí textovou hodnotu "D3" a výrazSTRINGJOIN(DS5, DS5.Value, "|")
vrátí textovou hodnotu "_D2|D1|D3".