Selasa, 30 Agustus 2011

Surat untuk Bapak Thomas Djamaluddin

Assalamu’alaikum

Saya hanya seorang awam tentang Astronomi dan ilmu falaq. Dari bangku sekolah dulu saya mengetahui bahwa pergerakan bulan dapat digambarkan seperti gelombang. Karena dalam perhitungan astronomi 00 itu garis ufuk (bukan pandangan mata), maka saya gambarkan seperti berikut :

Muhammadiyah menganut wujud hilal, maka grafiknya seperti diatas. Satu gelombang sempurna.

Jika memakai kriteria hilal harus terlihat, atau harus diatas 20, maka menurut logika saya perjalan bulan akan menjadi 4 kemungkinan :

1. Sempurna seperti diatas :

2. Awalnya tidak menyentuh nol, karena ada hilal dibawah 20 tidak dihitung
3. Akhir bulan lebih, karena hilal di bawah 20 tidak dihitung, berarti hari itu bukan bulan baru, ini terjadi seperti bulan romadhan tahun ini.
4. Kedua ujungnya tidak menyentuh 00

Dari grafik diatas sudah terlihat jelas bahwa metode wujud hilal lebih pasti dan lebih konsisten. Selama 1 bulan, bulan selalu tenggelam terlebih dahulu sebelum matahari tenggelam, suatu saat bulan tenggelam setelah matahari tenggelam, mengapa hari itu tidak dianggap bulan baru? Mengapa hari itu tidak dikelompokkan kepada bulan berikutnya? Lebih ilmiah yang mana mengelompokkan sesuatu karena ciri dan sifatnya sama dari pada mengelompokkan sesuatu padahal sifat dan cirinya berbeda?

Pemerintah Arab Saudi membangun jam tertinggi dan terbesar didunia, dan bercita-cita menjadikan mekah sebagai pusat waktu dunia menggantikan GMT. Jika mengandalkan hilal harus terlihat maka grafiknya tidak akan konsisten, tidak ada kepastian disana. Maka jangan pernah berharap dan bermimpi untuk menjadikan mekah sebagai pusat waktu dunia. Apalagi tanggal 1 di undur hanya karena terhalang oleh mendung.

Saya juga berpikir begini. Islam itu agama universal metode yang dipakai seharusnya dapat dipakai diseluruh tempat dimuka bumi. Apakah metode hilal harus terlihat bisa diterapkan di eropa, selandia baru, atau bahkan dikutub?

Kelemahan kedua dari kreteria hilal harus terlihat adalah : banyaknya hari dalam satu bulan bisa 28 hari atau 31 hari (ini menurut logika saya yang tak pernah mengerti hitung-hitungan astronomi) kejadiannya adalah :

Awal bulan masih dibawah 20 berarti tidak dihitung bulan baru, dihari ke 29 bulan sudah diatas 20 berarti sudah dihitung bulan baru jadilah dibulan itu hanya 28 hari.
Atau kejadian seperti berikut : Awal bulan sudah diatas hilal 20, dihari ke 30 hilal masih dibawah 20, jadilah dibulan itu menjadi 31 hari

Demikianlah analisa saya, analisa dari seorang yang buta ilmu astronomi. Analisa yang keluar dari logika yang pas-pasan. Terima kasih.

Wassalamualaikum

Senin, 12 Juli 2010

Pivot Tabel dalam SQL #1

Pivot adalah memutar, jadi kalo pivot tabel berarti memutar tabel. Jika kita punya data dalam satu kolom dan akan dijadikan kolom tersendiri, berarti kita perlu memutar tabel ini. Pivot tabel dapat dilakukan dengan bantuan fungsi decode.
Tak perlu panjang lebar, kita langsung ke contoh saja. Misalnya kita punya tabel seperti berikut :



kita akan menampilkannya dengan cara mengelompokkan pembayaran perbulan pada kolom sendiri, seperti berikut ini :

NAMA | JAN | FEB | MAR | APR | MEI | JUN | JUL | AGT | SEP | OKT | NOP | DES

Untuk mengelompokkan semua pembayaran pada kolom bulan tersendiri maka kita perlu mengubah bulan tertentu dengan kolom pembayaran.

select nama, sum(decode(bulan,1,bayar,0)) jan,
sum(decode(bulan,2,bayar,0)) feb,
sum(decode(bulan,3,bayar,0)) mar,
sum(decode(bulan,4,bayar,0)) apr,
sum(decode(bulan,5,bayar,0)) mei,
sum(decode(bulan,6,bayar,0)) jun,
sum(decode(bulan,7,bayar,0)) jul,
sum(decode(bulan,8,bayar,0)) agt,
sum(decode(bulan,9,bayar,0)) sep,
sum(decode(bulan,10,bayar,0)) okt,
sum(decode(bulan,11,bayar,0)) nop,
sum(decode(bulan,12,bayar,0)) des
from tabel_1
group by nama

Penjelasan :
sum(decode(bulan,1,bayar,0)) Jan, maksudnya sistem akan mencari data bulan 1 dan mengubahnya menjadi data pembayaran, yang bulan lain akan diubah menjadi nol. kemudian menjumlahkannya, nama kolom diubah menjadi JAN.

Filter
Jika hanya butuh data pembayaran hanya tiga bulan, sebaiknya harus difilter dengan perintah where bulan in (1,2,3). Tujuannya, agar data yang keluar adalah nama-nama yang mempunyai data pembayaran di bulan itu saja. Jika tidak difilter, seluruh nama yang ada dalam tabel_1 akan tampil, nama-nama yang tidak mempunyai pembayaran dibulan Januari, Februari, dan Maret akan terisi nol.

Menjumlahkan data pembayaran dalam setahun
Bagaimana cara menambah kolom jumlah? kita modifikasi script-nya menjadi bertingkat seperti berikut ini :

select nama,jan,feb,mar,apr,mei,jun,jul,agt,sep,okt,nop,des,
jan+feb+mar+apr+mei+jun+jul+agt+sep+okt+nop+des jumlah
from tabel_1,
(select noreg reg,sum(decode(bulan,1,bayar,0)) jan,
sum(decode(bulan,2,bayar,0)) feb,
sum(decode(bulan,3,bayar,0)) mar,
sum(decode(bulan,4,bayar,0)) apr,
sum(decode(bulan,5,bayar,0)) mei,
sum(decode(bulan,6,bayar,0)) jun,
sum(decode(bulan,7,bayar,0)) jul,
sum(decode(bulan,8,bayar,0)) agt,
sum(decode(bulan,9,bayar,0)) sep,
sum(decode(bulan,10,bayar,0)) okt,
sum(decode(bulan,11,bayar,0)) nop,
sum(decode(bulan,12,bayar,0)) des
from tabel_1
group by noreg) a
where noreg=a.reg

Perintah select dalam select digunakan untuk menyederhanakan script, bisa dibayangkan seperti apa panjangnya script diatas jika kita tidak mengelompokkan pembayaran tiap bulan dan mengubah nama kolomnya.

Kamis, 08 Juli 2010

Mengenal Fungsi Decode dalam SQL

Dalam praktek sehari-hari dalam menampilkan data sering kali kita harus berhadapan dengan kondisi percabangan, jika ini maka begini, jika itu maka begitu. Kondisi seperti itu dapat ditampilkan dengan bantuan fungsi decode. fungsi ini mirip dengan fungsi if jika di spreadsheet.

Format penerapannya dalam SQL adalah :
decode(nama_kolom, variable_1, nilai_1, variable_2, nilai_2, nilai_3)

penjelasan : Jika dalam suatu kolom veriabel_1 terpenuhi, maka akan dipilih nilai_1, jika yang dipenuhi variabel_2 maka nilai_2 yang akan ditampilkan, dan jika semua variabel tidak dipenuhi, maka yang ditampilkan nilai_3. Variabel dan nilai dapat ditambah sesuai dengan kebutuhan.

Contoh :
misalnya kita punya tabel berikut :
Jika kita akan menampilkan tabel tersebut dengan menambah kolom keterangan, nilai 9 berarti sangat baik, 7 baik, 5 kurang, 4 jelek




maka script SQL-nya adalah :
select nama, nilai, decode(nilai,4,'jelek',5,'kurang',7,'baik',9,'baik_sekali) keterangan from tabel_1

Hasil dari script diatas adalah :
Kelemahan dari fungsi decode adalah kita tidak dapat memakai fungsi logika dalam variabel. Jika kita punya kondisi : 1-4 jelek, 5-6 kurang, 7-9 baik, 10 baik sekali, berarti kita tetap harus memasukkan satu-satu nilai tiap variabel. decode memang berfungsi mengganti nilai suatu kolom apa adanya.

Nilai dari Kolom Lain
Nilai yang ingin ditampilkan dapat di ambil dari kolom lain, misalnya kita punya tabel pembayaran seperti berikut ini :


Kita ingin menampilkan pembayaran bulan mei, dengan struktur tabel NAMA | BULAN
kolom bulan berisi jumlah uang yang dibayar, maka script nya adalah :

select nama, decode(bulan,5,jumlah) bulan
from tabel_2
where bulan=5

Kita perlu memfilter hanya bulan 5 yang dipanggil dengan perintah where agar data yang keluar hanya nama-nama yang mempunyai pembayaran bulan 5. jika kita tidak memfilternya maka seluruh data akan tampil, tetapi yang bukan pembayaran bulan 5 akan kosong.


Ini adalah tampilan dari script diatas
hanya dua nama yang muncul karena telah difilter bulan 5 saja.



Jika tidak difilter maka seluruh data akan ditampilkan, tapi yang bukan bukan 5 akan kosong.

Demikianlah penjelasan singkat tentang fungsi decode, pada prakteknya nanti fungsi ini dapat dipakai untuk pivot tabel, dll.