SQL Server Indonesia User Groups Community July 2009 - Posts - drowned in code

SQL Server Indonesia User Groups Community

SQL Server Indonesia User Groups Community
Welcome to SQL Server Indonesia User Groups Community Sign in | Join | Help
in Search

drowned in code

eat, sleep, breath, SQL

July 2009 - Posts

  • How I Build My Code

    Beberapa hari terakhir ini saya mendapat tugas untuk melakukan review sebuah project BI di salah satu client. Project tersebut dikerjakan oleh sebuah vendor dan telah berusia satu tahun. Akan tetapi, project-nya belum selesai dan memiliki performance yang buruk.

    Pada hari pertama melakukan review saya cukup terkagum-kagum demi melihat code-nya yang kompleks dan tidak optimal. Tidak heran apabila project-nya belum selesai, dan memiliki performance yang tidak acceptable. Biasanya code yang kompleks akan menyebabkan bugs bermunculan, dan membuat code menjadi sulit untuk diperbaiki.

    Saya jadi teringat dengan sebuah artikel yang saya baca beberapa tahun lalu tentang banyaknya project IT yang waktu pengerjaannya molor, dan beberapa diantaranya bahkan dianggap sebagai project gagal. Persentase project IT yang gagal tadi cukup tinggi, mencapai lebih dari 50%, dan menyebabkan company mengalami kerugian pada investasi yang dilakukan pada project tersebut.

    Tentu ada banyak faktor yang dapat menyebabkan kegagalan. Bisa jadi memang requirement yang terlalu banyak dan selalu berubah-ubah, atau karena waktu pengerjaan yang sempit, atau -dan ini yang sering membuat saya sedih- karena ada team member yang tidak tahan dengan project yang dikerjakannya dan memilih untuk keluar di tengah jalan.

    Saya sendiri sadar apabila project yang telah saya kerjakan sering molor dan jauh dari sempurna. Tetapi, pada saat saya mengerjakannya, ada beberapa pakem yang selalu saya lakukan agar tidak terlalu molor atau gagal.

    Yang pertama adalah saya harus memahami problem, dan tujuan dari project. Dengan memahaminya berarti mengetahui apa yang harus dikerjakan untuk menyelesaikannya.

    Selalu memikirkan kemungkinan terburuk agar dapat menghasilkan solusi terbaik. Saya gak pernah mau membuat project yang asal jadi, karena saya ingin hasil project yang saya buat digunakan dan dinikmati untuk waktu yang lama.

    Be a smart worker, not a hard worker. Ini berarti kita harus tahu bagaimana cara mengerjakannya, dan bukan berusaha keras mengerjakannya. Ada orang yang bekerja sangat keras sampai tidak sadar apakah yang dikerjakannya itu benar atau tidak. Biasanya saya akan menghabiskan waktu beberapa hari untuk melakukan research apabila tidak tahu bagaimana mengerjakan sebuah code. Selain itu juga saya akan berhenti sejenak, entah itu dengan membuat kopi, atau pulang ke rumah untuk mengistirahatkan pikiran dan tubuh saya. Dengan pikiran yang sedikit teralihkan dari project dan istirahat yang cukup akan membuat kita kembali dengan ide-ide segar.

    Mengerjakan project adalah kerja tim. Selalu berbagi knowledge dengan team member yang lain tentu akan membantu team member lain berkembang dan mendapatkan experience. Selain itu juga jangan membiasakan diri untuk tergantung dengan team member lain, sebab setiap team member sudah memiliki task list nya sendiri-sendiri. Apabila kita menggantungkan diri, tentu akan membuat team member yang lain tidak dapat mengerjakan task nya tepat waktu.

    Selalu ingat bahwa ada banyak orang yang tergantung dari keberhasilan project. Ada stake holder, user,  dan masih banyak lagi. Keterlambatan project tentu akan mengecewakan mereka semua, dan sedikit banyak berpengaruh pada KPI-nya masing-masing. Selain itu juga, selalu ingat dengan besarnya dana yang dikucurkan untuk project. Entah untuk membeli server, license, meng-hire consultant, dan hal-hal lainnya. Akan sangat disayangkan apabila dana yang sudah dikeluarkan tadi terbuang sia-sia.

    Setelah selesai sebuah project, biasanya saya akan melakukan review terhadap project saya tadi agar project selanjutnya lebih baik dari project yang sebelumnya.

    Code saya adalah kebanggaan saya. Saya selalu berusaha melakukannya dengan sepenuh hati dan memberikan yang terbaik agar hasilnya maksimal dan sesuai dengan harapan. Memang terkadang saya harus bekerja hingga larut malam selama beberapa waktu, tapi tidak ada yang dapat melebihi kepuasan sebuah project yang selesai dengan baik.

    How about you? How do you build your code?

  • Menggunakan Expression Untuk Mengatur Task yang Boleh Dieksekusi

    Download sample code

    Terkadang saat mengerjakan sebuah SSIS project, saya menemui case dimana suatu task hanya boleh dieksekusi apabila memenuhi kondisi tertentu. Salah satu case-nya adalah task yang hanya boleh dieksekusi pada akhir bulan atau setiap tanggal satu saja setiap bulannya.

    Di SSIS, kita mengenal precedence constraint -yang bentuknya seperti anak panah-, yang menghubungkan antara executable, container, dan task dalam control flow. Di dalam precedence constraint tersebut kita dapat memasang kondisi dengan menggunakan expression untuk menentukan apakah task-nya dapat dieksekusi atau tidak. Untuk mempermudah contoh yang saya ceritakan tadi, saya akan menggunakan package yang telah saya buat pada post sebelumnya.

    Pertama, saya menambahkan sebuah variable dengan nama LogicalDate dengan tipe data Datetime yang expression-nya berupa konversi variable ModifiedDate kedalam tipe data DT_DATE.

    image

    Kemudian saya menambahkan dua buah script task kedalam control flow dengan nama Daily Task dan Monthly Task, lalu menghubungkan Daily Task dengan Monthly Task.

    image

    Klik ganda pada precedence contraint yang menghubungkan antara kedua task tadi untuk menampilkan Precedence Constraint Editor. Pada Evaluation Expression pilih Expression and Constraint. Berhubung kita akan mengisi kondisi agar Monthly Task hanya boleh berjalan pada tanggal satu saja, isi Expression-nya dengan expression Day(@[User::LogicalDate]) == 1 lalu klik OK. Anda dapat mengklik tombol Test untuk mengecek apakah expression yang Anda masukkan sudah benar atau belum.

    image

    Sekarang, apabila kita mengisi variable UserModifiedDate dengan 2009-07-20 lalu mengeksekusi package-nya, hanya Daily Task yang dieksekusi. Hal ini dapat Anda lihat dari warna Daily Task yang berwarna hijau, sedangkan Monthly Task-nya tetap berwarna putih.

    image

    Bandingkan jika Anda mengeksekusi package dengan mengisi nilai variable UserModifiedDate dengan 2009-08-01, kedua task tadi akan berwarna hijau yang artinya keduanya dieksekusi.

    image

  • Menggunakan Expression di Variable

    Download sample code

    Inilah sebuah case yang biasa diminta client pada saya: "Saya ingin sebuah SSIS yang dapat mengambil data berdasarkan tanggal Audit yang terdapat di setiap baris data. Apabila SSIS-nya dijalankan menggunakan job, secara default data yang diambil adalah data H-1. Tetapi apabila SSIS-nya dijalankan secara manual, data diambil berdasarkan tanggal yang saya inputkan."

    Pada case seperti inilah Expression dapat digunakan untuk membantu proses development dengan mudah. Solusinya sederhana, dengan menggunakan dua buah variable.

    Variable pertama, biasanya saya beri nama UserModifiedDate dengan tipe data String, adalah variable yang akan digunakan user untuk menginputkan tanggal yang diinginkan.

    image

    Variable kedua saya beri nama ModifiedDate dengan tipe data String. Buka properti variable ModifiedDate, lalu isi properti EvaluateAsExpression dengan True. Kemudian klik tombol … yang terdapat pada properti Expression yang akan membuka dialog Expression Builder.

    image

    Untuk case tadi, saya harus membuat syntax untuk mengecek apakah variable UserModifiedDate berisi sebuah nilai atau tidak. Apabila berisi nilai, maka nilai ModifiedDate akan diisi dengan UserModifiedDate. Apabila tidak ada isinya, maka nilai ModifiedDate akan diisi dengan tanggal hari kemarin yang tipe datanya telah dikonversi menjadi string.

    Untuk mengecek nilai Variable UserModifiedDate, gunakan conditional operator «boolean_expression» ? «when_true» : «when_false» yang fungsinya seperti If Then Else di T-SQL. Silakan buka Book Online dengan keyword ? : (Conditional) (SSIS) untuk keterangan yang lebih detail.

    Untuk mengisi nilai ModifiedDate dengan tanggal H-1, kita dapat menggunakan fungsi GETDATE() dan DATEADD( «datepart», «number», «date» )

    Notasi expression nya akan seperti ini:

    <cek nilai UserModifiedDate> ? <apabila tidak ada isinya, isi dengan H-1> : <apabila ada isinya, isi dengan UserModifieDate>

    Dan isi expression-nya:

    @[User::UserModifiedDate] == "" ? SUBSTRING((DT_WSTR,29)  GETDATE(),1,10) :  @[User::UserModifiedDate]

    Agar solusi ini dapat berhasil dengan baik, pastikan format UserModifiedDate yang diisi user dengan format yyyy-mm-dd

    image

    Mungkin Anda akan bertanya-tanya, kenapa tipe data ModifiedDate String dan bukannya DateTime. Apabila mengisinya dengan DateTime, akan muncul error pada saat expression-nya di-evaluate karena SSIS gagal mem-parsing expression (DT_DATE) @[User::UserModifiedDate] apabila nilai UserModifiedDate berisi string kosong.

  • Berkenalan dengan Expression di SSIS

    Apakah Anda sudah menggunakan expression dalam SSIS package yang Anda buat? Apabila belum, gunakanlah, karena Expression akan sangat membantu proses pembuatan SSIS. Saya sendiri belum pernah mengerjakan sebuah project SSIS yang tidak ada expression di dalamnya.

    Mungkin pada saat pertama kali menggunakannya Anda akan mengalami kesulitan, but practise makes perfect. Setelah beberapa waktu, Anda akan terbiasa dan terkagum-kagum sendiri dengan expression, dan tidak dapat hidup tanpanya. Expression dapat berupa kombinasi variable, column (apabila menggunakannya dalam Data Flow Task), dan SSIS built-in function yang menghasilkan sebuah nilai.  Nilai keluaran expression dapat berupa integer/numeric, string, boolean, atau datetime. It's easy, simple, and sexy. Expression dapat digunakan dalam variable, precedence constraint, Execute SQL Task, Derived Column, Conditional Split, dan masih banyak lagi.

    Syntax Expression hampir sama dengan syntax yang digunakan bahasa pemgrograman C dan C# dan T-SQL, dengan panjang expression dibatasi sampai 4000 karakter. Pada beberapa bagian di SSIS kita akan dibantu dengan kehadiran Expression Builder yang mempermudah pembuatan expression. Anda dapat men-drag sebuah variable atau function dan men-drop nya di Expression Editor. Untuk mengecek apakah nilai yang Anda masukkan sudah benar dan sesuai dengan yang diinginkan, klik tombol Evaluate Expression.

     Expression Builder

    Berikut adalah beberapa syntax Expression sederhana yang sering saya gunakan:

    GetDate() : built-in function yang akan menghasilkan tanggal saat ini dengan tipe data datetime, syntax nya seperti function GetDate() yang terdapat di T-SQL

    Apabila ingin mengubah suatu nilai kedalam tipe data yang lain, kita dapat melakukan cast nilai tersebut dengan tipe data yang baru. Expression (DT_WSTR, 29) GETDATE() akan menghasilkan nilai dengan tipe data unicode string dengan panjang 29 karakter.

    Untuk mengambil nilai variable, gunakan @ ditambah dengan nama variable-nya. Contohnya @[System::UserName] atau @UserName akan mengambil nilai pada system variable UserName.

  • The Story Behind The Award

    Butuh lebih dari seminggu bagi saya untuk kembali menjejakkan kaki ke bumi dan meletakkan jari-jari tangan saya diatas keyboard untuk kembali menulis, setelah euforia yang menyelimuti pada 1 Juli lalu ketika nama saya tercantum dalam daftar MVP yang diumumkan Narenda di blog-nya.
    Semuanya berawal sekitar setahun yang lalu saat Hendra bercerita tentang event Monthly Meeting yang biasa di-host-nya bersama Pak Kiki. Menurutnya, event tersebut di-suspend selama beberapa waktu agar audience-nya tidak bosan karena yang menjadi speaker hanya dia dan Pak Kiki. Sebagai teman yang  baik, saya tentu ingin membantu teman yang sedang kesusahan. Pada saat diajak untuk ikut menjadi speaker, saya pun mengiyakan, walaupun pada saat itu saya adalah Developer .NET yang baru bertransformasi menjadi Developer Business Intelligence yang sedang belajar SQL Server dan BI selama kurang dari setahun dengan Custom SSIS Component sebagai satu-satunya topik yang saya kuasai.
    Dan walaupun session yang saya bawakan cukup mengecewakan karena saya terlalu gugup sampai-sampai suaranya tidak terdengar dan lupa dengan materi yang telah disiapkan, hari itu selalu menjadi sebuah hari yang menyenangkan karena saya dapat bertemu dengan banyak orang yang memiliki passion yang sama pada teknologi.
    Setelah event itu, SQLServer-Indo.org di launch. Pada awalnya, seperti hampir semua orang, saya juga mengalami kesulitan pada saat pertama kali menulis blog. Apabila Anda perhatikan, selama beberapa bulan pertama saya tidak memiliki materi tulisan dan tidak tahu apa yang harus saya tulis. Tapi seiring dengan berjalannya waktu, dan hal-hal baru tentang SQL Server yang saya pelajari di pekerjaan, bahan blog pun bermunculan.
    Tidak berapa lama, Pak Kasim Wirama mengajak saya dalam pembuatan E-Book yang sedianya menjadi E-Book pertama SQLServer-Indo. Saya sangat tersanjung dan antusias dengan ajakannya, dan berhubung topik yang saya kuasai baru SSIS dan SSRS, saya hanya dapat menyanggupi menulis dua topik tadi.
    Ketika Microsoft menominasikan saya menjadi MVP (untuk menjadi MVP, kita harus dinominasikan oleh Microsoft Indonesia atau oleh MVP), awalnya saya menolak karena saya sadar bahwa saya masih jauh dari sempurna untuk menjadi MVP. Ditambah apa yang saya lakukan selama ini saya anggap sebagai sebuah hobi yang menyenangkan yang biasa saya kerjakan pada saat mempelajari teknologi baru.
    Yang membuat saya berubah pikiran dan menerima nominasi adalah ingatan saya pada percakapan dengan Hendra tentang sedikitnya speaker untuk event SQLServer-Indo, dan sedikitnya kontributor untuk menulis di SQLServer-Indo.org. Saya percaya Indonesia memiliki banyak SQL Server expert, tetapi mereka belum memiliki waktu atau kesempatan untuk men-share-nya dengan rekan-rekan yang lain.
    Semoga dengan penghargaan yang saya terima dapat menggugah SQLServer expert lain untuk men-share knowledge-nya tentang SQL Server dan ikut membantu community ini terus berkembang dan tetap exist, sebab Microsoft menghargai keahlian dan sharing rekan-rekan dengan menganugerahkan penghargaan MVP.
    Untuk saya pribadi, tidak ada yang lebih menyenangkan selain membuka SQLServer-Indo.org di pagi hari dan melihat banyak sharing baru dari para member-nya.

  • Mengetes Koneksi ke SQL Server dari Komputer Client

    Ada cara sederhana yang biasa saya lakukan untuk mengetes koneksi ke SQL Server dari computer client, yaitu dengan menggunakan file Universal Data Link (UDL).

    Pertama buka Windows Explorer, dan tambahkan sebuah text file dengan nama connection.txt di drive c

    image

    Kemudian ubah extension .txt dengan .udl. Apabila tampil confirmation dialog, klik Yes

    image

     

    Apabila dibelakang nama file tidak terdapat .txt Anda dapat menggunakan command prompt dan mengubah extensionnya dengan command ren untuk mengubahnya seperti ini

    image

    Setelah selesai klik ganda file Connection.udl. Pada saat Data Link Properties tampil, pilih tab Provider lalu pilih Microsoft OLE DB Provider for SQL Server

    image

    Klik tab Connection, isi server name, User name dan Password

    image.png" width="371" height="464" />

    Klik tombol Test Connection untuk mengetes koneksinya. Apabila berhasil, maka akan tampil pesan berikut ini.

    image

More Posts
Powered by Community Server (Commercial Edition), by Telligent Systems