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
PARENTIDalanında0ya daNULLbekler; 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 —SORTkomutu 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
SORTile hiyerarşik veriyi "gruplamaya" çalışmak — sadecePARENTIDkolonuna göre normalSORTyapmak çocukları ebeveynin yanına getirmez, sadece aynıPARENTIDdeğerine sahip satırları yan yana toplar; gerçek ağaç sırası için mutlakaHIERARCHICALmodu 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.
Yorumlar (0)
Yorum Yaz