Capaian Pembelajaran
Setelah minggu ini kamu bisa:
- Menjelaskan karakteristik data warehouse (subject-oriented, integrated, time-variant, non-volatile).
- Merancang star schema dan snowflake schema dari data transaksi.
- Menjelaskan proses ETL (Extract, Transform, Load).
- Melakukan operasi OLAP: roll-up, drill-down, slice, dice, pivot dengan Pandas dan SQL.
- Membedakan ukuran (measure) distributif, aljabar, dan holistik.
1. Apa itu Data Warehouse?
Definisi klasik W. H. Inmon:
Data warehouse adalah kumpulan data yang berorientasi subjek, terintegrasi, bervariasi waktu, dan tidak mudah berubah (non-volatile) untuk mendukung pengambilan keputusan manajemen.
| Karakteristik | Arti | Contoh |
|---|---|---|
| Subject-oriented | Disusun per subjek bisnis, bukan per aplikasi | Subjek: penjualan, pelanggan, produk |
| Integrated | Data dari banyak sumber diseragamkan | Kode gender "L/P" dan "M/F" disatukan |
| Time-variant | Menyimpan histori (5–10 tahun) | Penjualan per bulan sejak 2018 |
| Non-volatile | Hanya load & read, jarang di-update | Data kemarin tidak diubah lagi |
Arsitektur tiga lapis
Sumber (OLTP, CSV, API) ──ETL──► [Data Warehouse] ──► [OLAP Server] ──► Dashboard / BI / Data Mining
bawah tengah (penyimpanan) tengah atas (front-end)
Data mart = bagian kecil warehouse untuk satu departemen (mis. data mart pemasaran).
2. ETL — Extract, Transform, Load
| Tahap | Aktivitas |
|---|---|
| Extract | Ambil data dari sistem sumber (DB kasir, aplikasi, file log) |
| Transform | Bersihkan (Minggu 2), seragamkan kode, hitung atribut turunan, buat surrogate key, agregasi |
| Load | Masukkan ke tabel dimensi dulu, lalu tabel fakta; refresh berkala (harian/jam-an) |
Varian modern: ELT — data mentah dimuat dulu ke data lake/warehouse cloud, transformasi dilakukan di dalamnya (SQL).
3. Model Data Multidimensi
- Tabel fakta (fact table): menyimpan measure (angka yang dianalisis) + foreign key ke dimensi. Contoh measure:
jumlah,total. - Tabel dimensi (dimension table): menyimpan konteks deskriptif — siapa, apa, di mana, kapan. Contoh: produk, toko, waktu.
- Grain (butiran): tingkat detail satu baris fakta. Contoh: "satu baris = satu item produk dalam satu transaksi".
3.1 Star Schema
dim_waktu
(id_waktu, tanggal, bulan, kuartal, tahun)
│
dim_produk ──── fakta_penjualan ──── dim_toko
(id_produk, (id_transaksi, (id_toko, nama_toko,
nama_produk, id_waktu, id_produk, kota, wilayah)
kategori, id_toko, jumlah,
harga) total)
Satu tabel fakta di tengah, setiap dimensi satu tabel denormalisasi. Kueri cepat (sedikit JOIN), mudah dipahami.
3.2 Snowflake Schema
Dimensi dinormalisasi menjadi beberapa tabel:
dim_produk(id_produk, nama_produk, id_kategori) ──► dim_kategori(id_kategori, nama_kategori)
dim_toko(id_toko, nama_toko, id_kota) ──► dim_kota(id_kota, kota, id_wilayah) ──► dim_wilayah(...)
Hemat ruang & mudah dirawat, tetapi kueri butuh lebih banyak JOIN.
3.3 Fact Constellation (Galaxy Schema)
Beberapa tabel fakta berbagi dimensi yang sama. Contoh: fakta_penjualan dan fakta_pengiriman sama-sama memakai dim_waktu dan dim_produk.
| Aspek | Star | Snowflake | Constellation |
|---|---|---|---|
| Normalisasi dimensi | Tidak | Ya | Campuran |
| Jumlah JOIN | Sedikit | Banyak | Tergantung |
| Kecepatan kueri | Cepat | Lebih lambat | — |
| Kompleksitas | Rendah | Sedang | Tinggi |
4. Hierarki Konsep
Dimensi memiliki hierarki yang memungkinkan agregasi bertingkat:
- Waktu:
tanggal → bulan → kuartal → tahun - Lokasi:
toko → kota → wilayah → negara - Produk:
produk → kategori
5. Kubus Data (Data Cube) & Operasi OLAP
Bayangkan data penjualan sebagai kubus 3D: sumbu waktu × produk × lokasi, isi sel = total penjualan.
Dengan n dimensi (tanpa hierarki) terdapat 2ⁿ cuboid (kombinasi group-by), dari apex cuboid (total keseluruhan, 0-D) sampai base cuboid (n-D).
| Operasi | Arti | SQL / Pandas |
|---|---|---|
| Roll-up | Naik hierarki / kurangi dimensi → lebih ringkas | bulan → kuartal: GROUP BY kuartal |
| Drill-down | Turun hierarki → lebih detail | kuartal → bulan: GROUP BY kuartal, bulan |
| Slice | Pilih satu nilai pada satu dimensi → sub-kubus | WHERE tahun = 2025 / df[df.kategori == "Fashion"] |
| Dice | Pilih beberapa nilai pada beberapa dimensi | WHERE kategori IN (...) AND kota IN (...) |
| Pivot (rotate) | Putar sumbu tampilan | pivot_table(index=..., columns=...) |
Contoh angka: penjualan Elektronik Q1 = 120 jt, Q2 = 150 jt, Q3 = 90 jt, Q4 = 140 jt. Roll-up ke tahun → 500 jt. Drill-down Q2 ke bulan (April 40, Mei 60, Juni 50) → total tetap 150 jt.
6. Jenis Measure
| Jenis | Definisi | Contoh | Bisa digabung dari sub-agregat? |
|---|---|---|---|
| Distributif | Hasil agregat = agregat dari agregat bagian | SUM, COUNT, MIN, MAX |
Ya |
| Aljabar | Dihitung dari beberapa measure distributif | AVG = SUM/COUNT, std |
Ya (simpan SUM & COUNT) |
| Holistik | Tidak bisa dari sub-agregat | MEDIAN, MODE, rank |
Tidak |
Contoh jebakan: rata-rata per toko 100 (10 transaksi) dan 200 (30 transaksi). Rata-rata gabungan bukan (100+200)/2 = 150, melainkan (100·10 + 200·30)/40 = 175.
7. OLAP Server: ROLAP, MOLAP, HOLAP
| Jenis | Penyimpanan | Kelebihan | Kekurangan |
|---|---|---|---|
| ROLAP | Tabel relasional (star schema di RDBMS) | Skala besar, fleksibel | Lebih lambat |
| MOLAP | Array multidimensi pra-agregasi | Sangat cepat | Boros ruang, kurang skalabel |
| HOLAP | Gabungan | Seimbang | Kompleks |
Warehouse cloud modern (BigQuery, Snowflake, Redshift) pada dasarnya ROLAP kolumnar yang sangat cepat.
Ringkasan
- Data warehouse: subject-oriented, integrated, time-variant, non-volatile.
- Fakta = angka + foreign key; dimensi = konteks deskriptif.
- Star schema paling umum: cepat & sederhana; snowflake menormalisasi dimensi.
- Roll-up meringkas, drill-down merinci, slice = 1 dimensi 1 nilai, dice = banyak dimensi, pivot = rotasi.
- AVG harus dihitung ulang dari SUM dan COUNT, bukan rata-rata dari rata-rata.
Bacaan
- Han, Kamber & Pei — Bab 4 (Data Warehousing and Online Analytical Processing).
- Kimball & Ross — The Data Warehouse Toolkit (dimensional modeling).
Tugas Minggu Ini
- Kerjakan
lab.ipynbsampai selesai (termasuk diagram skema). - Kerjakan kuis (di web, atau baca
quiz.json). - Isi
exercise.py, lalu cek:python check.py 3