跳至主要內容

09 · 排序與前 N 名

情境

依續約金額由大到小列出前 10 筆。或多鍵排序:先依地區(字母順序),再依金額(由大到小)。

@sort

{{ @sort [續約金額] desc }}
{{ [客戶] }} | {{ [續約金額] }}

方向是 asc(預設)或 desc@sort穩定排序 — 排序鍵相等的列維持原本(首次出現)的順序。

多鍵排序

{{ @sort [地區] asc }}
{{ @sort [續約金額] desc }}
{{ [客戶] }} | {{ [地區] }} | {{ [續約金額] }}

第一個 @sort主鍵;後續的 @sort 指示子是 tiebreaker(Excel / SQL 慣例)。上例:列先依地區字母順序分組,每個地區內再依續約金額由大到小排。

@top

{{ @sort [續約金額] desc }}
{{ @top 10 }}
{{ [客戶] }} | {{ [續約金額] }}

@top N 在所有 filter 與 sort 之後保留前 N 列。把 @top 放在 @sort 之後 — 先排序,再取前 N。

如果 N 大於可用列數,@top 等於 no-op(回傳全部列)。負數或 0 會產生空區塊。

@filter 組合

{{ @filter [續約金額] > 1000 }}
{{ @sort [續約金額] desc }}
{{ @top 5 }}
{{ [客戶] }} | {{ [續約金額] }}

順序:filter → sort → top。多個 @filter 以 AND 串接(鄰近 ADR-0029;清單篩選請見 食譜 05)。

比較語意

@sort 採 XTL 的標準比較:

  • 數字或數值字串:數值比較。
  • 布林:false < true
  • 日期:時間戳比較。
  • 其他:正規字串形式以 Unicode 碼點順序比較。不套用語系排序。 "Z" < "a"(ASCII 中大寫 < 小寫)。

如果操作員需要符合語系的排序,請在來源端先排好,或加一個排序鍵欄位。

備註

  • 「穩定排序」表示相等鍵保持插入順序 — 多個 @sort 作為 tiebreaker 時非常關鍵。
  • @top 接在 @sort 之後」是正規的「前 N」模式。單獨 @top(不接 sort)會以來源順序取前 N 列。
  • 規格參考:spec/language.md 的「Sort」與「Top」;ADR-0016。