OLAP (Online Analytical Processing) adalah teknologi yang berada di atas Data Warehouse untuk melakukan analisis data multi-dimensi dengan kecepatan tinggi. Kalau Star Schema dan Snowflake Schema adalah cara kita menyusun "rumah" (struktur data), maka OLAP adalah mesin pencari canggih untuk menjelajahi isi rumah tersebut.
Isi Catatan
Di kelompok, saya (Raihan Daris Ramadhan) kebagian membahas dan mempraktikkan 4 operasi OLAP: Roll-up, Slice, Pivot A/B, dan Drill Across. Berikut catatan lengkapnya, termasuk query SQL dan hasil uji coba.
Persiapan Database
Sebelum masuk ke operasi, saya siapkan dulu tabel penjualan_olap sebagai data dasar.
Roll-up adalah proses meringkas/mengelompokkan data dengan bergerak naik ke hierarki dimensi yang lebih tinggi. Operasi ini mengurangi tingkat detail untuk memberi gambaran yang lebih luas ("helicopter view").
Contoh konsep: Data penjualan per kota (Jakarta, Bandung, Surabaya) di-roll-up menjadi total penjualan per provinsi (DKI Jakarta, Jawa Barat, Jawa Timur).
a. Roll-up berdasarkan Tanggal
SELECT tanggal, SUM(pendapatan) AS total_pendapatan
FROM penjualan_olap
GROUP BY tanggal;
tanggal
total_pendapatan
2024-01-01
5700
2024-02-01
6400
Pendapatan yang awalnya terpisah berdasarkan produk dan lokasi dijumlahkan menjadi total pendapatan per tanggal.
b. Roll-up berdasarkan Produk
SELECT produk, SUM(pendapatan) AS total_pendapatan
FROM penjualan_olap
GROUP BY produk;
produk
total_pendapatan
Produk A
5500
Produk B
6600
c. Roll-up berdasarkan Lokasi
SELECT lokasi, SUM(pendapatan) AS total_pendapatan
FROM penjualan_olap
GROUP BY lokasi;
lokasi
total_pendapatan
Kota X
6300
Kota Y
5800
Intinya: Roll-up = agregasi (SUM/GROUP BY) untuk naik level, dari detail ke ringkasan.
2. Slice (Mengiris)
Slice berarti "memotong" kubus data berdasarkan satu nilai spesifik pada satu dimensi untuk menghasilkan kubus data yang lebih kecil, tapi dimensi lain tetap utuh.
a. Slice by Tanggal
SELECT tanggal, produk, lokasi, pendapatan
FROM penjualan_olap
WHERE tanggal = '2024-01-01';
tanggal
produk
lokasi
pendapatan
2024-01-01
Produk A
Kota X
1000
2024-01-01
Produk A
Kota Y
1500
2024-01-01
Produk B
Kota X
2000
2024-01-01
Produk B
Kota Y
1200
Hanya data pada 2024-01-01 yang ditampilkan, tapi semua produk dan lokasi tetap muncul.
b. Slice by Produk
SELECT tanggal, produk, lokasi, pendapatan
FROM penjualan_olap
WHERE produk = 'Produk A';
tanggal
produk
lokasi
pendapatan
2024-01-01
Produk A
Kota X
1000
2024-01-01
Produk A
Kota Y
1500
2024-02-01
Produk A
Kota X
1200
2024-02-01
Produk A
Kota Y
1800
c. Slice by Lokasi
SELECT tanggal, produk, lokasi, pendapatan
FROM penjualan_olap
WHERE lokasi = 'Kota X';
tanggal
produk
lokasi
pendapatan
2024-01-01
Produk A
Kota X
1000
2024-01-01
Produk B
Kota X
2000
2024-02-01
Produk A
Kota X
1200
2024-02-01
Produk B
Kota X
2100
Intinya: Slice = WHERE dengan satu kondisi pada satu dimensi.
3. Pivot A/B (Rotasi)
Pivot (Rotate) mengubah orientasi visual laporan dengan menukar sumbu dimensi — misalnya nilai baris dijadikan kolom. Operasi ini tidak mengubah angka data, hanya tata letaknya, agar lebih mudah dibaca dan dibandingkan.
a. Pivot Kota X vs Kota Y
SELECT
tanggal,
produk,
SUM(CASE WHEN lokasi = 'Kota X' THEN pendapatan ELSE 0 END) AS Pendapatan_Kota_X,
SUM(CASE WHEN lokasi = 'Kota Y' THEN pendapatan ELSE 0 END) AS Pendapatan_Kota_Y
FROM penjualan_olap
GROUP BY tanggal, produk
ORDER BY tanggal, produk;
tanggal
produk
Pendapatan_Kota_X
Pendapatan_Kota_Y
2024-01-01
Produk A
1000
1500
2024-01-01
Produk B
2000
1200
2024-02-01
Produk A
1200
1800
2024-02-01
Produk B
2100
1300
Nilai lokasi (Kota X, Kota Y) yang tadinya berupa baris kini dijadikan kolom terpisah.
b. Pivot Table Produk A/B (kombinasi Kota x Bulan)
SELECT
CASE
WHEN produk = 'Produk A' THEN 'A'
WHEN produk = 'Produk B' THEN 'B'
END AS Product,
SUM(CASE WHEN lokasi = 'Kota X' AND MONTH(tanggal) = 1
THEN pendapatan ELSE 0 END) AS KotaX_Bulan1,
SUM(CASE WHEN lokasi = 'Kota X' AND MONTH(tanggal) = 2
THEN pendapatan ELSE 0 END) AS KotaX_Bulan2,
SUM(CASE WHEN lokasi = 'Kota Y' AND MONTH(tanggal) = 1
THEN pendapatan ELSE 0 END) AS KotaY_Bulan1,
SUM(CASE WHEN lokasi = 'Kota Y' AND MONTH(tanggal) = 2
THEN pendapatan ELSE 0 END) AS KotaY_Bulan2
FROM penjualan_olap
GROUP BY produk;
Product
KotaX_Bulan1
KotaX_Bulan2
KotaY_Bulan1
KotaY_Bulan2
A
1000
1200
1500
1800
B
2000
2100
1200
1300
Query ini membuat tabel pivot dengan Produk sebagai baris, lalu pendapatan dipecah menjadi kolom berdasarkan kombinasi Kota X/Kota Y dan Bulan 1/Bulan 2.
Intinya: Pivot = menggunakan CASE WHEN di dalam SUM() untuk mengubah nilai suatu dimensi menjadi kolom-kolom baru.
4. Drill Across (Menyeberang)
Drill-across melibatkan analisis data yang melintasi dua tabel fakta yang berbeda, dengan syarat kedua tabel tersebut terhubung oleh dimensi yang sama (conformed dimension) — di sini dimensinya adalah tanggal, produk, dan lokasi.
Tujuannya: menyandingkan data penjualan dengan data stok, untuk melihat apakah penurunan penjualan suatu produk disebabkan oleh stok gudang yang kosong.
a. Membuat tabel stok
CREATE TABLE stok_olap (
tanggal DATE,
produk VARCHAR(50),
lokasi VARCHAR(50),
stok INT
);
SELECT
p.tanggal,
p.produk,
p.lokasi,
p.pendapatan,
s.stok
FROM penjualan_olap p
JOIN stok_olap s
ON p.tanggal = s.tanggal
AND p.produk = s.produk
AND p.lokasi = s.lokasi;
tanggal
produk
lokasi
pendapatan
stok
2024-01-01
Produk A
Kota X
1000
50
2024-01-01
Produk A
Kota Y
1500
40
2024-01-01
Produk B
Kota X
2000
60
2024-01-01
Produk B
Kota Y
1200
35
2024-02-01
Produk A
Kota X
1200
55
2024-02-01
Produk A
Kota Y
1800
45
2024-02-01
Produk B
Kota X
2100
65
2024-02-01
Produk B
Kota Y
1300
38
Query ini menggabungkan tabel penjualan_olap dan stok_olap berdasarkan tanggal, produk, dan lokasi yang sama. Hasilnya menampilkan pendapatan dan stok produk secara bersamaan, sehingga bisa dianalisis apakah stok gudang mempengaruhi penjualan.
Intinya: Drill Across = JOIN antar dua tabel fakta yang punya dimensi bersama (conformed dimension).
Ringkasan
Operasi
Fungsi Utama
Teknik SQL
Roll-up
Meringkas data ke level lebih tinggi
GROUP BY + SUM
Slice
Memotong data berdasarkan 1 dimensi
WHERE (1 kondisi)
Pivot A/B
Mengubah baris jadi kolom, tanpa ubah nilai data
CASE WHEN di dalam SUM()
Drill Across
Menganalisis lintas 2 tabel fakta dengan dimensi sama