Pivot dengan Range-Date

Soeleman 14 Agustus 2017

Pivot dengan Range-Date

Membuat laporan selalu menjadi hal yang kadang terlihat mudah tapi merepotkan. Apalagi bila datanya memang tidak lengkap karena memang di rancang seperti itu.

Dalam kasus ini, ada data harian yang tidak di masukkan lengkap. Maksudnya dari tanggal 1 sampai tanggal 8, data yang ada bisa bervariasi. Untuk sebuah report tentu lebih mudah di baca apabila deretan tanggalnya lengkap.

Table

Kita buat sederhana saja. Untuk ini kita hanya perlu satu table.

Table SessionLogs

Di sini ada dua Item yang memiliki jumlah data harian yang berbeda. Dan juga tanggal yang bervariasi.

alt text

Resulset

Yang di inginkan mendapatkan data yang sebanyak 8 tanggal. Di sini di artikan 8 column, yang berarti ini pivot. Apabila tidak ada data di tanggal(contoh tanggal 6), maka colum tetap ada hanya isinya kosong. Bagi penguna laporan ini data ini akan kebanyakkan di buat dalam chart.

alt text

MySQL

Yang pertama kita lakukan adalah membuat tanggal sesuai dengan jarak yang di tentukan. Disini kita menggunakan Table Numbers (CodePolitan: Membuat Table Numbers untuk SQL).

Dari situ kita gabungkan data dengan deretan tanggal tersebut. Selanjutnya kita pivot-kan sesuai dengan yang di perlukan.

alt text

Yang kita lakukan di atas adalah static dan manual. Kenyataanya range tanggal-nya berubah-ubah. Dan yang kita bisa lakukan adalah membuat dynamic-sql seperti pada query di bawah.

alt text

SQL Server

Untuk SQL Server, tidak banyak berbeda. Hanya penyesuaian beberapa fungsi-nya, terutama kita memanfaatkan pivot keyword.

alt text

Dalam melakukan dynamic-sql setiap database punya caranya masing-masing. Tapi tidak sulit juga dilakukan.

alt text

Penutup

Membuat deretan tanggal adalah kunci membuat solusi ini. Realisasinya dalam aplikasi akan cenderung ke dalam dynamic-sql dan tidak sulit juga dilakukan. Optimasi adalah langkah berikut untuk solusi ini.

Referensi

Perhatian! Code yang ditampilkan dalam tulisan ini merupakan ilustrasi dari yang ingin dipaparkan dan bukan production ready code. Sudah banyak kejadian karena asal meng-copy-and-paste tanpa mengerti code yang diambil itu ke dalam production. Selain itu perlu ada tambahan code dan test sebelum siap untuk digunakan secara utuh.