APEX: Etkilesimli Grafikler

Merhaba,

Bu yazimda sizlere APEX grafik raporlarindan bahsedecegim.

Bildiginiz gibi, interaktif olarak hazirladiginiz raporlariniz icin Action menusu yardimiyla analiz sayfanizda anlik rapor gorselleri alabiliyorsunuz.

Fakat veri setimizi kalici bir rapor olarak da; pasta dilimi ya da bar seklinde kullanicilarimiza sunmak isteyebiliriz.

Bunun yaninda kullanicinin raporda gordugu alanlara tiklamasi ile ilgili alani olusturan data setini ayni ekranda ya da ikinci bir tab ‘da verebiliriz.

Bu sekilde son kullanicilariniza tum detay kirilimlari bir seferde vererek koca bir set cikmak yerine, ise ozet ve bir bakista anlasilan bir gorsel sunarak baslamis oluruz.

Kullanici, yapacagi analiz dogrultusunda raporu dig edebilir, bir alt kirilima inebilir, raw data icinde bogulmamis olur.

Alttaki ornegimizi inceleyelim:

Elimizde farkli urun tipleri ve doviz cinsleri var. Para turlerine gore urun hacimlerimizi gruplayarak grafik haline getiriyoruz.

Sekil.1: Ornek Grafik

Simdi biraz basa donelim.

Page Region ‘imiza sag tiklayarak Create secenegini secelim,

Gelen secenekler arasindan Chart ‘i isaretleyelim

Sonra ne tur bir grafik olusturmak istedigimizi secelim. Benim ornegim 3d Stacked Column.

Gerekli secimleri yapip grafigimize bir isim verdikten sonra sistem bizden Query isteyecek.
Aslinda alttaki gibi bir sonuc donduren basit bir SQL sorgu yazmamiz gerekiyor.
Veri yapimizi taniyorsak ve ne istedigimizi biliyorsak oldukca kolay:)
Tek yapmaniz gereken uygun bir sekilde veri setinizi gruplara ayirmak.. Ustteki ornegi inceleyerek kendi ihtiyaclariniza gore uyarlamayi deneyin.
Grafik raporlar icin hazirladigimiz sorgularin belirli bir desene gore donmesi gerekiyor. Sistem sizden ilk sirada Link kolonunu gondermenizi bekleyecek.
Bu kolonu:
  1. Hic kullanmayabiliriz, yani NULL gondeririz. Kullanici rapordaki barlara ya da pasta dilimlerine tiklayinca hic bir sey olmaz.
  2. Kullaniciyi baska bir sayfaya yonlendirecek sekilde kullanabiliriz. Bu durumda Link kolonuna yine NULL gonderiyoruz, fakat rapor ayarlarimizdan bir takim ayarlar yapmamiz gerekiyor.
  3. Link kolonuna URL gonderebiliriz. Bunu yapmak icin kucuk bazi dinamik sql cumleleri yazmamiz gerekiyor.
Bu yazimda 2. madde uzerinden gidelim, bir dahaki yazimda da 3. maddeyi orneklerle aciklamaya calisayim.
Oncelikle grafigimizdeki barlardan birine tiklandiginda acilmasini bekledigimiz detay rapor nedir, buna karar vermemiz gerekiyor.
Madem grafigimiz farkli doviz cinslerine gore urun hacimlerimizi gosteriyor dedik, o halde detay raporun da soyle bir sey oldugunu kabul edelim.

Bu sorgu calisinca sistem kullanicidan :pv_currency degiskenini bekleyecek. Bu sorguyu yeni bir interaktif rapor olarak kaydedelim.

Tabii ki :pv_currency icin bu yeni interaktif rapor sayfamizda Page Item, Page Item Button olusturmamiz gerekecek, bunlari da atlamalayim.

Simdi tekrar Grafigimize donuyoruz..

 

Chart Series olarak hazirladigimiz sorguya cift tiklayalim, ustte gordugunuz alani bulalim.
Dikkat ederseniz Target olarak Page in this Application sectik. Dolayisiyla artik grafigimiz, uzerine tikladigimizda o esnada calismakta oldugumuz Application icinden farkli bir sayfayi calistirmasi gerektigini biliyor.
Page menusunden detay olarak hazirladigimiz sorguyu deploy ettigimiz sayfayi gosterelim.
Alttaki Item seceneklerinden de bu “farkli” raporu hangi parametrelerle calistiracagini soyleyelim.
Ornek sorgumuzu hatirlayin: Sorgumuz bizden :pv_currency degiskenini bekliyordu.
Item 1 kutusunun yanindaki arama ikonuna tikladiginizda PV_CURRENCY degiskenini goreceksiniz.. Tabii Page menusunden detay sorgunuzun sayfa numarasini dogru vermisseniz. :)
ITEM 1 olarak PV_CURRENCY degiskenini isaret ettik.. Simdi de grafigimizdeki hangi degeri PV_CURRENCY item ‘ina Value olarak gonderecegimizi belirtelim:
Elimizde Link, Label ve Value kolonlari oldugunu hatirlayin. Benim ornegimde Label kolonunda doviz kodlarini siralamistim, zaten raporum da doviz kodlarina gore gruplanmis hacimleri gosteriyordu.
Bu nedenle ben Value olarak LABEL kolonunu seciyorum.
Bu sekilde kaydedip raporu calistirin ve farkli para kodlarina gore olusmus barlardan birine tiklayin.
Gelen sayfada yalnizca o doviz kodu icin filtrelenmis detaylari goreceksiniz.

Iyi calismalar :)

Advertisements

APEX: Coklu Secim

Evet.. Raporlama, data analizi, monitoring gibi ihtiyaclarimiz icin Oracle ‘in Application Express ‘ini kullaniyorsunuz.

Simdi kullaniciya bolum kodu secebilecegi bir menu verdiginizi ve buna gore sorgunuzun calistigini dusunun.

 

WHERE bolum_kodu = :pv_bolumkodu

 

Peki, kullanicimizin ayni anda birden fazla bolum kodu secebilmesini istersek?
Elbette

 

WHERE bolum_kodu in (:pv_bolumkodu_1, :pv_bolumkodu2, :pv_bolumkodu3)

 

gibi degiskenlerimizi cogaltabiliriz. Ama ortada onlarca ya da daha fazla secenek varsa her olasilik icin bir degisken tanimlayacak degiliz :)

Ekrana bir Shuttle ya da coklu secime izin veren bir Select List koyarak kullanicidan birden fazla input parameter almak istedigimizi ve bu listenin n secenek icerdigini dusunelim.

Ornek.1 ‘deki gibi, Interaktif raporunuza sag tiklayarak Create Page Item secenegi ile bir Shuttle ekledigimizi varsayalim..

Ornek.1

olusturdugumuz Page Item ‘in adini, sorgumuzda kullandigimiz degisken gibi PV_BOLUMKODU olarak verelim.

Ardindan Static ya da Dynamic menu icerigi hazirlamamiz gerekecek.

Bunlari da tamamladiktan sonra yine Ornek.1 ‘de gorulen Create Page Item Button secenegi ile bu kez de sayfamiza bir buton yerlestirelim.

Tum bu temel hazirliklarin ardin, raporumuzu calistirmak icin

butona basildiktan hemen sonra, ama raporun execute edilmesinden de hemen once 

calisacak sekilde bir page process yazmamiz gerekecek.

O halde uygulamamiza Ornek.2 ‘de gorulecegi gibi bir Page Process ekleyelim.

Ornek.2

Temelde ihtiyacimiz olan sey kullanicinin secimlerini not edip, bu bilgiyi query ‘miz her calistiginda kosul olarak sorgumuza “soyleyebilmek”..

Bunu yapmak icin aklimiza bir cok -pratik ya da kompleks- ozgun cozum gelebilir. Fakat Oracle ‘in bu tur istekleri karsilamak uzere sundugu yapiyi da kullanabiliriz..

Bunun icin Page Process ‘imizin PLSQL blogunda string ‘imizi table ‘a donusturmek uzere bir seyler yazmayi deneyelim..

 

DECLARE

pv_secim apex_application_global.vc_arr2;

BEGIN       

pv_secim := apex_util.string_to_table (:pv_bolumkodu);

apex_collection.create_or_truncate_collection (‘pv_shuttle’);

apex_collection.add_members (‘pv_shuttle’, pv_secim );

END;

 

 

Ben bu islemi yalnizca menu secimini “hatirlamak” icin kullanmak istiyorum.. O yuzden secimi gercek bir tabloya yazmak yerine APEX_COLLECTION ile biriktirmeyi tercih ettim.
pv_secim degiskenimiz APEX_COLLECTION sayesinde, ekranda pv_bolumkodu ile gelen bind variable ‘lari row by row saklayacak.
Shuttle menunuzden:
  • a
  • b
  • c
  • d

 

olmak uzere 4 satir secmisseniz, secimleriniz a:b:c:d seklinde siralanacaktir.

Ustte yazdigimiz BEGIN END blogumuzu calistiralim ve PV_BOLUMKODU soruldugunda a:b:c:d girelim.

Statement calistiktan sonra
SELECT *
   FROM apex_collections;
tablosundan sonucu izledigimizde Ornek.3 ‘teki gibi bir goruntu aliyor olmaliyiz.
Ornek.3
Ne yapmaya calistigimizi anlamissinizdir :) Sonrasi oldukca kolay:
WHERE bolum_kodu = :pv_bolumkodu
demek yerine, artik
WHERE bolum_kodu in (SELECT c001 FROM apex_collections WHERE collection_name = ‘PV_SHUTTLE’)

diyebiliriz.