Basit sıralama yetmediğinde

Bir tabloyu tutar veya tarihe göre sıralamak günlük işin bir parçası, ama ERP verisinin önemli bir kısmı doğası gereği ağaç yapısındadır: bir hesap planı, bir malzeme ağacı (BOM), bir organizasyon şeması. Bu tür veriyi düz bir SORT ile sıralamaya çalışırsanız üst-alt ilişkisi kaybolur, çocuklar ebeveynlerinin hemen altında görünmez. TROIA bu ihtiyaç için ayrı bir sıralama modu sunuyor: hierarchical sort.

Basit sıralama

SORT {tabloadi} ON [DESC] {kolon1}, [DESC] {kolon2};

DESC her kolon için ayrı ayrı belirtilebilir, yani bir kolonu artan, diğerini azalan sıralayabilirsiniz:

SORT SIPARISLER ON DESC TARIH, MUSTERIADI;

Hiyerarşik sıralama

SORT {tablo} HIERARCHICAL IDCOLUMN {idkolonu} PARENTIDCOLUMN {ebeveynidkolonu};

Bu komut, tabloyu ağaç yapısına saygı göstererek sıralar — bir ebeveyn satırı, tüm çocukları hemen ardından (ve çocukların da kendi çocukları varsa onların ardından) gelecek şekilde dizilir. Sonuç, ekranda bir tree/tablo kontrolünde girintili şekilde gösterime hazır bir sıra haline gelir.

Gerçek bir örnek: malzeme ağacını göstermeye hazırlamak

/* Bir malzeme ağacı tablosunu hiyerarşik sıralar. */
LOCAL:
    TABLE AGACI(ID INTEGER, PARENTID INTEGER, MALZEMEKODU CHAR(30), MIKTAR DECIMAL);

SELECT ID, PARENTID, MALZEMEKODU, MIKTAR FROM MALZEME_AGACI
    WHERE URUNKODU = 'URN-1001' INTO AGACI;

SORT AGACI HIERARCHICAL IDCOLUMN 'ID' PARENTIDCOLUMN 'PARENTID';

/* Artık AGACI tablosu, kök malzemeden başlayarak alt bileşenleri
   doğru sırada içeriyor; bir tree kontrolüne doğrudan bağlanabilir. */

Sık yapılan hatalar

  • Kendine referans veren (döngüsel) veriyle hiyerarşik sıralamayı denemek — veri modelinde bir satırın, dolaylı olarak kendi alt öğesi olarak işaretlendiği bozuk kayıtlar varsa (veri göçü hatası, elle düzeltme sırasında oluşan hata gibi), sıralama beklenmedik davranabilir. Büyük/eski veri setlerinde hiyerarşik sıralamadan önce döngüsel referans olup olmadığını ayrıca kontrol etmek iyi bir alışkanlıktır.
  • Kök satırın PARENTID'sini yanlış değerle doldurmak — kök öğeler genelde PARENTID alanında 0 ya da NULL bekler; bu değer tutarsızsa (bazı kök satırlarda 0, bazılarında NULL) aynı seviyedeki öğeler farklı gruplara düşebilir.
  • Sıralamadan sonra ACTIVEROW'un sıfırlandığını unutmak — SORT komutu tablodaki fiziksel satır sırasını değiştirdiği için, sıralama öncesi tuttuğunuz bir satır indeksi artık farklı bir satırı gösterebilir; sıralamadan sonra aktif satırı yeniden konumlandırmanız gerekebilir.
  • Basit SORT ile hiyerarşik veriyi "gruplamaya" çalışmak — sadece PARENTID kolonuna göre normal SORT yapmak çocukları ebeveynin yanına getirmez, sadece aynı PARENTID değerine sahip satırları yan yana toplar; gerçek ağaç sırası için mutlaka HIERARCHICAL modu gerekir.

Sıradaki adım

Sıralamayı, verinin farklı tablolar arasında nasıl taşındığını (COPY TABLE, MOVE-CORRESPONDING, MERGETABLE) ele alan bir sonraki yazıyla tamamlayacağım.