πŸ“Š Data Modelling
πŸŽ“ Pertemuan
Pertemuan 11: Pengantar Data Warehouse & Analytical Modelling

MODUL PERTEMUAN 11

PENGANTAR DATA WAREHOUSE & ANALYTICAL MODELLING


A. INFORMASI UMUM MATA KULIAH

ItemKeterangan
Mata KuliahData Modelling
Kode MKSSD1019
Bobot3 SKS (Praktikum)
Semester4 (Empat)
Program StudiSains Data
FakultasEkonomi dan Bisnis Islam
UniversitasUIN K.H. Abdurrahman Wahid Pekalongan
Dosen PengampuMohammad Reza Maulana, M.Kom

B. INFORMASI PERTEMUAN

B.1 Sub-CPMK Pertemuan 11

Sub-CPMK 3.1: Mahasiswa mampu menjelaskan konsep data warehouse sebagai infrastruktur analitik, membedakan karakteristik OLTP dan OLAP secara fundamental, memahami alur proses ETL, dan mengidentifikasi kebutuhan data analitik yang tidak dapat dipenuhi oleh model operasional β€” sebagai landasan untuk merancang dimensional model di pertemuan berikutnya.

B.2 Tujuan Pembelajaran (Learning Objectives)

Setelah mengikuti pertemuan ini, mahasiswa akan mampu:

  1. Menjelaskan mengapa sistem OLTP yang sudah dirancang dengan baik tidak cukup untuk kebutuhan analitik skala besar dan pengambilan keputusan strategis (C2 – Memahami)
  2. Membandingkan OLTP dan OLAP dari berbagai dimensi: tujuan, pola query, skema, pengguna, volume data, dan frekuensi pembaruan (C2 – Memahami)
  3. Menjelaskan empat karakteristik data warehouse menurut definisi Inmon: subject-oriented, integrated, time-variant, dan non-volatile (C2 – Memahami)
  4. Membedakan data warehouse dengan data mart dan menentukan kapan masing-masing lebih tepat digunakan (C2 – Memahami)
  5. Menjelaskan tiga tahap proses ETL (Extract, Transform, Load) beserta tantangan dan keputusan desain di setiap tahap (C2 – Memahami)
  6. Mengidentifikasi pertanyaan-pertanyaan analitik bisnis (analytical queries) dari sebuah deskripsi sistem dan menentukan dimensi serta fakta yang dibutuhkan untuk menjawabnya (C4 – Menganalisis)
  7. Menjelaskan konsep dasar multi-dimensional analysis: slice, dice, drill-down, drill-up, dan pivot (C2 – Memahami)

B.3 Kompetensi yang Dikembangkan

DomainKompetensi
KognitifMemahami perbedaan OLTP vs OLAP (C2), Menganalisis kebutuhan analitik dari deskripsi bisnis (C4)
AfektifMembangun perspektif baru bahwa data modelling tidak berhenti di sistem operasional β€” data adalah aset analitik; menghargai pentingnya historical data untuk pengambilan keputusan
PsikomotorikMengidentifikasi dan mengklasifikasikan query sebagai transaksional vs analitik; brainstorming dimensi dan fakta dari narasi bisnis

B.4 Indikator Pencapaian

Setelah mengikuti pertemuan ini, mahasiswa diharapkan mampu:

  1. Menjelaskan minimal 5 perbedaan mendasar antara OLTP dan OLAP dengan contoh konkret
  2. Menyebutkan dan menjelaskan 4 karakteristik data warehouse (definisi Inmon) dengan ilustrasi nyata
  3. Membedakan data warehouse dari data mart dan menjelaskan hubungan keduanya
  4. Menjelaskan proses ETL dengan contoh transformasi data nyata dari sistem OLTP ke data warehouse
  5. Diberikan narasi bisnis, mengidentifikasi minimal 5 pertanyaan analitik dan menentukan dimensi/fakta yang diperlukan

B.5 Alokasi Waktu

NoKegiatanDurasiKeterangan
1Pembukaan & Jembatan dari Babak 1 ke Babak 210 menit"Apa yang sudah kita bangun? Apa batasannya?"
2Aktivitas Pemantik: "Query yang Tidak Bisa Dijawab"15 menitDemonstrasi keterbatasan OLTP
3Materi 1: OLTP vs OLAP β€” Dua Dunia yang Berbeda25 menitCeramah + tabel perbandingan
4Materi 2: Data Warehouse β€” Definisi, Karakteristik, dan Arsitektur20 menitCeramah + diagram arsitektur
5Break10 menit–
6Materi 3: Data Mart β€” Subset yang Fokus10 menitCeramah + perbandingan DW vs DM
7Materi 4: Proses ETL - Jembatan dari OLTP ke Warehouse20 menitOverview/pengantar - bukan implementasi mendalam; cukup dipahami sebagai konsep pipeline
8Materi 5: Multi-Dimensional Analysis β€” Cara Berpikir Analitik15 menitCeramah + latihan brainstorming
9Materi 6: Pengantar Dimensional Modelling β€” Koneksi ke P1210 menitPreview star schema
10Kuis Penutup, Diskusi & Briefing Tugas15 menitKuis + penjelasan tugas
Total150 menit

C. MATERI PEMBELAJARAN

C.1 Jembatan β€” Dari Babak 1 ke Babak 2

Refleksi Pembuka (10 menit): Selama pertemuan 1–10, kita telah membangun fondasi yang solid: dari ERD, normalisasi, DDL, hingga data quality. Sekarang waktunya bertanya: "Apakah sistem OLTP yang sudah kita rancang sudah cukup untuk semua kebutuhan data organisasi?"

APA YANG SUDAH KITA BANGUN (Pertemuan 1–10):

  Sistem OLTP Toko Batik Online:
  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
  β”‚  kategori ←── produk ←── item_pesanan                  β”‚
  β”‚  pelanggan ←── pesanan ←── item_pesanan                β”‚
  β”‚  pelanggan ←── ulasan ──→ produk                       β”‚
  β”‚                                                         β”‚
  β”‚  Dirancang untuk: INSERT, UPDATE, DELETE transaksi      β”‚
  β”‚  Kekuatan: cepat untuk operasional sehari-hari         β”‚
  β”‚  Normalisasi 3NF: data konsisten, tidak redundan       β”‚
  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

PERTANYAAN YANG MUNCUL DARI MANAJER:
  1. "Tunjukkan tren penjualan per kategori per bulan selama 2 tahun!"
  2. "Produk apa yang paling banyak dibeli bersamaan?"
  3. "Kota mana yang paling menguntungkan? Bandingkan Q1 vs Q2!"
  4. "Berapa revenue dari pelanggan yang bergabung sebelum 2023
      dibanding yang bergabung sesudahnya?"
  5. "Apakah ada pola hari dalam seminggu yang penjualannya lebih tinggi?"

MASALAH:
  Semua pertanyaan ini bisa dijawab dari database OLTP...
  tapi dengan harga yang sangat mahal:
  β†’ JOIN 4–5 tabel sekaligus
  β†’ Agregasi ratusan ribu hingga jutaan baris
  β†’ Query berjalan menit bahkan jam di tabel produksi
  β†’ Sementara itu, customer yang sedang checkout mengalami slowdown!

Rangkuman Dosen: "Inilah mengapa dunia data membagi tugas menjadi dua sistem yang berbeda: OLTP untuk operasional (write-heavy, real-time) dan OLAP untuk analitik (read-heavy, historical). Pertemuan 11–13 membawa kita ke babak baru: bagaimana merancang sistem data yang dirancang khusus untuk menjawab pertanyaan analitik."


C.2 Aktivitas Pemantik β€” "Query yang Tidak Bisa Dijawab dengan Nyaman"

Instruksi (15 menit): Dosen menampilkan dua query SQL. Mahasiswa diminta menganalisis dan mendiskusikan implikasinya.

Query A β€” Operasional (OLTP): Mengecek status pesanan

-- Query ini CEPAT β€” dirancang untuk ini
SELECT p.id_pesanan, p.status, p.tgl_pesanan,
       pl.nama AS nama_pelanggan
FROM pesanan p
JOIN pelanggan pl ON p.id_pelanggan = pl.id_pelanggan
WHERE p.id_pesanan = 10045;
 
-- Waktu eksekusi: < 10 ms
-- Baris yang discan: 1 (langsung via PK index)
-- Cocok untuk: tombol "Cek Status Pesanan" di website

Query B β€” Analitik (OLAP): Laporan tren penjualan bulanan

-- Query ini LAMBAT di database OLTP yang sedang dipakai customer!
SELECT
    YEAR(p.tgl_pesanan)  AS tahun,
    MONTH(p.tgl_pesanan) AS bulan,
    k.nama_kategori,
    COUNT(DISTINCT p.id_pesanan) AS jumlah_pesanan,
    SUM(ip.qty)          AS total_unit_terjual,
    SUM(ip.qty * ip.harga_saat_pesan) AS total_revenue
FROM pesanan p
JOIN item_pesanan ip ON p.id_pesanan = ip.id_pesanan
JOIN produk pr       ON ip.id_produk = pr.id_produk
JOIN kategori k      ON pr.id_kategori = k.id_kategori
WHERE p.status = 'selesai'
  AND p.tgl_pesanan BETWEEN '2023-01-01' AND '2024-12-31'
GROUP BY YEAR(p.tgl_pesanan), MONTH(p.tgl_pesanan), k.nama_kategori
ORDER BY tahun, bulan, total_revenue DESC;
 
-- Waktu eksekusi: bisa 30 detik – 5 menit (dengan 500.000+ baris!)
-- Baris yang discan: bisa JUTAAN baris sekaligus
-- JOIN 4 tabel, agregasi besar, tanpa bisa memanfaatkan PK index
-- Dampak: MEMPERLAMBAT transaksi customer yang sedang berjalan!

Pertanyaan Pemantik:

  1. Mengapa Query A jauh lebih cepat dari Query B?
  2. Apa dampaknya jika Query B dijalankan langsung di database OLTP saat jam sibuk?
  3. Bagaimana kamu menyimpan data historis 2 tahun di database OLTP yang terus di-update dan di-delete?
  4. Jika kamu harus menjawab Query B dengan cepat, bagaimana strukturnya harus berbeda dari OLTP?

Insight Kunci: Query B membutuhkan cara penyimpanan data yang BERBEDA β€” data yang sudah diagregasi sebagian, disusun untuk dibaca (bukan ditulis), dan menyimpan riwayat historis yang tidak berubah. Itulah data warehouse.


C.3 Materi 1: OLTP vs OLAP β€” Dua Dunia yang Berbeda

C.3.1 Definisi dan Tujuan Mendasar

OLTP β€” Online Transaction Processing
  "Sistem saraf operasional bisnis"
  Tujuan: Mendukung transaksi bisnis sehari-hari secara real-time
  Pertanyaan yang dijawab: "APA yang terjadi SEKARANG?"
  
  Contoh sistem OLTP:
  β†’ Sistem kasir (POS) saat pelanggan membayar
  β†’ Sistem perbankan saat nasabah transfer
  β†’ Sistem akademik saat mahasiswa mendaftar ulang
  β†’ E-commerce saat customer checkout

OLAP β€” Online Analytical Processing
  "Kacamata strategis manajemen"
  Tujuan: Mendukung analisis historis dan pengambilan keputusan
  Pertanyaan yang dijawab: "MENGAPA ini terjadi? APA tren-nya? BAGAIMANA ke depan?"
  
  Contoh sistem OLAP:
  β†’ Dashboard BI: penjualan per bulan vs target
  β†’ Analisis cohort pelanggan: siapa yang churn setelah 6 bulan?
  β†’ Laporan keuangan triwulanan dengan drill-down
  β†’ Model prediksi permintaan produk

C.3.2 Perbandingan OLTP vs OLAP β€” 12 Dimensi

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Dimensi            β”‚ OLTP                        β”‚ OLAP                         β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ TUJUAN UTAMA       β”‚ Proses transaksi harian      β”‚ Analisis & decision support  β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ OPERASI DOMINAN    β”‚ INSERT, UPDATE, DELETE       β”‚ SELECT (read-only / very few β”‚
β”‚                    β”‚ (write-heavy)                β”‚ writes) β€” read-heavy         β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ DATA               β”‚ Data terkini (current),      β”‚ Data historis bertahun-tahun,β”‚
β”‚                    β”‚ detail per transaksi         β”‚ teragregasi atau atom        β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ SKEMA              β”‚ Normalized β€” 3NF/BCNF        β”‚ Denormalized β€” Star Schema   β”‚
β”‚                    β”‚ (minimal redundansi)         β”‚ atau Snowflake (untuk performaβ”‚
β”‚                    β”‚                             β”‚ query analitik)              β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ QUERY TIPIKAL      β”‚ Sederhana, prediktif,        β”‚ Kompleks, ad-hoc, multi-tabelβ”‚
β”‚                    β”‚ lookup by PK/FK              β”‚ JOIN + GROUP BY + agregasi   β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ WAKTU QUERY        β”‚ Milidetik (< 100ms)          β”‚ Detik hingga menit (bisa     β”‚
β”‚                    β”‚                             β”‚ dipercepat dengan pre-agg)   β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ PENGGUNA           β”‚ Banyak pengguna konkuren     β”‚ Sedikit pengguna analis      β”‚
β”‚                    β”‚ (ratusan–ribuan serentak)    β”‚ (puluhan), tidak concurrent  β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ BARIS YANG DISCAN  β”‚ Sedikit (1–100 baris         β”‚ Sangat banyak (jutaan baris  β”‚
β”‚ PER QUERY          β”‚ per query via index)         β”‚ sekaligus)                   β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ UKURAN DATA        β”‚ GB hingga TB                 β”‚ TB hingga PB                 β”‚
β”‚                    β”‚ (data aktif/terkini)         β”‚ (akumulasi bertahun-tahun)   β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ FREKUENSI UPDATE   β”‚ Real-time (detik)            β”‚ Batch periodic (harian,      β”‚
β”‚                    β”‚                             β”‚ mingguan, bulanan via ETL)   β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ PRIORITAS DESAIN   β”‚ Integritas data (ACID),      β”‚ Performa baca query kompleks,β”‚
β”‚                    β”‚ konsistensi, normalisasi     β”‚ kemudahan analisis, historis β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ CONTOH SISTEM      β”‚ MySQL, PostgreSQL, Oracle,   β”‚ Snowflake, BigQuery, Redshiftβ”‚
β”‚                    β”‚ SQL Server (production DB)   β”‚ ClickHouse, SSAS, Apache Hiveβ”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

C.3.3 Mengapa Schema OLTP Buruk untuk Analitik?

Ini adalah pertanyaan kritis yang harus dipahami sebelum membahas data warehouse.

SKENARIO: Manajer ingin tahu revenue per kota per bulan.

DI DATABASE OLTP (3NF):
  Data tersebar di: pelanggan.alamat_kota, pesanan.tgl_pesanan,
                    item_pesanan.qty, item_pesanan.harga_saat_pesan

  Query yang diperlukan:
  SELECT pl.alamat_kota, YEAR(p.tgl_pesanan), MONTH(p.tgl_pesanan),
         SUM(ip.qty * ip.harga_saat_pesan) AS revenue
  FROM pesanan p
  JOIN item_pesanan ip ON p.id_pesanan = ip.id_pesanan
  JOIN pelanggan pl    ON p.id_pelanggan = pl.id_pelanggan
  WHERE p.status = 'selesai'
  GROUP BY pl.alamat_kota, YEAR(p.tgl_pesanan), MONTH(p.tgl_pesanan);

  MASALAH 1 β€” Performa:
  Database harus JOIN tiga tabel besar secara real-time.
  Setiap kali manajer refresh laporan β†’ query berat dijalankan ulang.
  Semakin banyak data, semakin lambat.

  MASALAH 2 β€” Historis:
  Jika pelanggan pindah kota dan kita UPDATE alamat_kota,
  SEMUA riwayat pesanan lama pun "berubah kota" secara retroaktif.
  Analisis historis menjadi tidak akurat!
  β†’ "Pesanan dari Semarang pada 2022" bisa tiba-tiba menjadi
    "pesanan dari Jakarta" setelah pelanggan pindah di 2024.

  MASALAH 3 β€” Kelengkapan Konteks:
  Analitik butuh konteks yang kaya: umur pelanggan saat pesan,
  segmen produk, label periode (Q1/Q2, weekday/weekend, dll.)
  Konteks ini tidak ada di tabel OLTP.

DI DATA WAREHOUSE:
  Data sudah dipra-proses dan disimpan dalam bentuk yang
  mengantisipasi kebutuhan analitik:
  
  Satu tabel fakta yang sudah "flat":
  fakta_penjualan(kunci_waktu, kunci_pelanggan, kunci_produk,
                  kota_pelanggan_saat_beli, kategori_produk,
                  qty, revenue, ...)
  
  β†’ JOIN sudah dilakukan saat ETL, bukan saat query
  β†’ Kota pelanggan "dibekukan" pada saat transaksi terjadi
  β†’ Atribut analitik siap pakai: nama_bulan, kuartal, segmen_usia, dll.
  β†’ Satu SELECT dengan GROUP BY yang sederhana menghasilkan laporan!

C.4 Materi 2: Data Warehouse β€” Definisi, Karakteristik, dan Arsitektur

C.4.1 Definisi Data Warehouse

Definisi klasik menurut W.H. Inmon (1992) β€” "Bapak Data Warehouse":

"A data warehouse is a subject-oriented, integrated, time-variant, and non-volatile collection of data in support of management's decision-making process."

Empat kata kunci ini bukan sekadar jargon β€” masing-masing memiliki implikasi desain yang sangat konkret.

C.4.2 Empat Karakteristik Data Warehouse (Inmon)

1. SUBJECT-ORIENTED (Berorientasi Subjek)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  Data diorganisir berdasarkan SUBJEK BISNIS,
  bukan berdasarkan APLIKASI atau PROSES.

  OLTP β†’ diorganisir berdasarkan fungsi:
    Sistem Penjualan, Sistem Inventori, Sistem HR, Sistem Keuangan
    (masing-masing punya database sendiri-sendiri)

  Data Warehouse β†’ diorganisir berdasarkan subjek:
    Penjualan, Pelanggan, Produk, Karyawan
    (data dari berbagai sistem dikumpulkan ke satu subjek)

  CONTOH NYATA:
  Subjek "Pelanggan" di data warehouse menggabungkan:
  β†’ Data profil dari Sistem CRM
  β†’ Riwayat pembelian dari Sistem POS
  β†’ Riwayat tagihan dari Sistem Keuangan
  β†’ Data interaksi dari Sistem Support/Helpdesk
  β†’ Semua dikonsolidasikan ke dimensi PELANGGAN yang lengkap

  IMPLIKASI DESAIN:
  Nama tabel dimulai dari sudut pandang bisnis, bukan teknis:
  dim_pelanggan, dim_produk, fakta_penjualan β€” bukan tbl_crm_user

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

2. INTEGRATED (Terintegrasi)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  Data dari BERBAGAI SUMBER YANG HETEROGEN dikonsolidasikan
  ke dalam satu representasi yang KONSISTEN.

  MASALAH YANG DISELESAIKAN:
  Sistem A: Gender disimpan sebagai 'M'/'F'
  Sistem B: Gender disimpan sebagai 1/0
  Sistem C: Gender disimpan sebagai 'Laki'/'Perempuan'
  Sistem D: Gender disimpan sebagai 'Male'/'Female'
  β†’ Di data warehouse, semua menjadi: 'L'/'P' (standar satu)

  CONTOH INTEGRASI LAIN:
  β†’ Satuan mata uang: USD di sistem luar negeri β†’ dikonversi ke IDR
  β†’ Format tanggal: DD/MM/YYYY vs YYYY-MM-DD β†’ distandarkan ke ISO 8601
  β†’ Kode produk: SKU dari sistem gudang vs kode dari sistem kasir
    β†’ dipetakan ke satu product_key yang unified
  β†’ Nama kota: "Yogyakarta" vs "Jogjakarta" vs "Yogya"
    β†’ distandarkan ke satu nilai canonical

  KAPAN INTEGRASI TERJADI?
  Di tahap TRANSFORM dalam proses ETL.

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

3. TIME-VARIANT (Bervariasi terhadap Waktu)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  Data warehouse menyimpan SNAPSHOT HISTORIS β€” setiap perubahan
  data direkam sebagai data baru, TIDAK menimpa data lama.

  DI OLTP:
  UPDATE pelanggan SET alamat_kota = 'Jakarta' WHERE id = 1;
  β†’ Data lama HILANG. Tidak ada jejak bahwa sebelumnya 'Semarang'.

  DI DATA WAREHOUSE:
  Baris lama TIDAK dihapus/diubah.
  Ditambahkan baris baru dengan tanggal berlaku:
  
  kunci | nama  | kota     | berlaku_dari | berlaku_sampai
  1     | Budi  | Semarang | 2022-01-01   | 2023-12-31
  2     | Budi  | Jakarta  | 2024-01-01   | 9999-12-31  ← baris baru

  MANFAAT TIME-VARIANT:
  β†’ "Pada tahun 2022, berapa revenue dari pelanggan di Semarang?"
    β†’ Bisa dijawab akurat! (Budi dihitung sebagai Semarang di 2022)
  β†’ "Berapa pelanggan yang pindah kota dalam 3 tahun terakhir?"
    β†’ Bisa dijawab! (bandingkan kota lama vs kota sekarang)
  β†’ Analisis cohort: bagaimana perilaku pelanggan berubah seiring waktu?

  RENTANG WAKTU TIPIKAL:
  OLTP: Data aktif 2–5 tahun (data lama diarsip atau dihapus)
  DW  : Data historis 5–10+ tahun (semakin lama semakin berharga)

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

4. NON-VOLATILE (Tidak Mudah Berubah)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  Setelah data masuk ke warehouse, ia TIDAK DIUBAH atau DIHAPUS
  secara normal. Data warehouse hanya punya dua operasi:
  β†’ LOAD (data baru masuk via ETL)
  β†’ ACCESS (data dibaca untuk analisis)

  DI OLTP: INSERT, UPDATE, DELETE semua terjadi setiap detik
  DI DW  : Hanya INSERT (dari ETL) dan SELECT (dari analyst)

  MENGAPA INI PENTING?
  β†’ Konsistensi laporan: laporan yang sama dijalankan 2 kali
    dengan selang waktu 1 jam harus menghasilkan angka yang SAMA
  β†’ Auditor bisa verifikasi: "Laporan ini dihasilkan dari data
    yang mana, dan apakah datanya sudah berubah?"
  β†’ Tidak ada ROLLBACK yang rumit untuk data analitik

  CATATAN PENTING:
  Non-volatile BUKAN berarti data tidak pernah berubah.
  ETL secara reguler menambahkan data baru (load).
  Perbaikan data (corrections) dimungkinkan tapi melalui
  proses khusus yang terdokumentasi, bukan UPDATE langsung.

C.4.3 Arsitektur Data Warehouse β€” Gambaran Besar

ARSITEKTUR STANDAR DATA WAREHOUSE:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                        SUMBER DATA (Sources)                        β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€-──
β”‚  Database    β”‚  Spreadsheet β”‚  File CSV    β”‚  API / Web Service     β”‚
β”‚  OLTP        β”‚  / Excel     β”‚  / Flat File β”‚  / Log Files           β”‚
β”‚  (MySQL,     β”‚  (laporan    β”‚  (data       β”‚  (sistem eksternal,    β”‚
β”‚  PostgreSQL) β”‚  keuangan)   β”‚  partner)    β”‚  social media)         β”‚
β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
       β”‚              β”‚              β”‚                   β”‚
       β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                     β”‚
                                     β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                     PROSES ETL (Staging Area)                       β”‚
β”‚                                                                     β”‚
β”‚  Extract β†’ Transform β†’ Load                                         β”‚
β”‚                                                                     β”‚
β”‚  "Dapur" pengolahan data: di sinilah data dibersihkan,             β”‚
β”‚   distandarkan, diintegrasikan, dan diformat ulang                  β”‚
β”‚                                                                     β”‚
β”‚  Tools: Apache Spark, dbt, Talend, Pentaho, AWS Glue, dll.         β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                   β”‚
                                   β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    DATA WAREHOUSE (Central Repository)              β”‚
β”‚                                                                     β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”       β”‚
β”‚  β”‚            DIMENSIONAL MODEL (Star/Snowflake)           β”‚       β”‚
β”‚  β”‚  dim_waktu  dim_pelanggan  dim_produk  dim_lokasi       β”‚       β”‚
β”‚  β”‚      \            \           /           /             β”‚       β”‚
β”‚  β”‚       └───────────── FAKTA β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜            β”‚       β”‚
β”‚  β”‚                    β”‚ PENJUALAN β”‚                         β”‚       β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜       β”‚
β”‚                                                                     β”‚
β”‚  Sifat: Subject-oriented, Integrated, Time-variant, Non-volatile   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
           β”‚
           β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
           β”‚                                                          β”‚
           β–Ό                                                          β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                          β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚      DATA MART          β”‚                          β”‚      DATA MART            β”‚
β”‚    (Marketing)          β”‚                          β”‚    (Keuangan)             β”‚
β”‚  Subset dari DW,        β”‚                          β”‚  Subset dari DW,          β”‚
β”‚  fokus satu domain      β”‚                          β”‚  fokus satu domain        β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                          β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
           β”‚                                                    β”‚
           β–Ό                                                    β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                        KONSUMSI DATA (Access Layer)                 β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€----------─
β”‚  BI Dashboardβ”‚  Ad-hoc SQL  β”‚  Data Scienceβ”‚  Laporan Manajemen     β”‚
β”‚  (Tableau,   β”‚  (analyst    β”‚  (Jupyter,   β”‚  (PDF/Excel terjadwal) β”‚
β”‚  Power BI,   β”‚  queries)    β”‚  Python, R)  β”‚                        β”‚
β”‚  Metabase)   β”‚              β”‚              β”‚                        β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

C.5 Materi 3: Data Mart β€” Subset yang Fokus

C.5.1 Definisi dan Posisi Data Mart

DATA MART adalah subset dari data warehouse yang dirancang
khusus untuk kebutuhan satu departemen atau satu domain bisnis.

ANALOGI:
  Data Warehouse = Perpustakaan Universitas (semua koleksi)
  Data Mart      = Ruang Baca Khusus Jurusan (hanya koleksi relevan)

DUA JENIS DATA MART:

1. DEPENDENT DATA MART
   β†’ Dibuat dari data warehouse yang sudah ada
   β†’ Data sudah terstandarkan dan terintegrasi di DW
   β†’ Data mart hanya berisi subset dan mungkin pre-agregasi tambahan
   
   Alur: Sumber β†’ ETL β†’ Data Warehouse β†’ Data Mart

2. INDEPENDENT DATA MART
   β†’ Dibuat langsung dari sumber tanpa data warehouse
   β†’ Lebih cepat dibangun, tapi data tidak terstandarkan antar mart
   β†’ Menimbulkan "silo data": marketing punya definisi "pelanggan"
     yang beda dengan keuangan
   β†’ ANTIPATTERN yang sebaiknya dihindari jangka panjang!
   
   Alur: Sumber β†’ ETL (mini) β†’ Data Mart

C.5.2 Data Warehouse vs Data Mart

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Aspek                β”‚ Data Warehouse             β”‚ Data Mart                    β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Cakupan              β”‚ Enterprise-wide (seluruh  β”‚ Domain-specific (1 divisi    β”‚
β”‚                      β”‚ organisasi)               β”‚ atau 1 subjek bisnis)        β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Ukuran               β”‚ Besar β€” ratusan GB – PB   β”‚ Lebih kecil β€” GB – TB        β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Waktu pembangunan    β”‚ Bulan – tahun             β”‚ Minggu – bulan               β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Pengguna             β”‚ Seluruh departemen        β”‚ Satu departemen              β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Konsistensi data     β”‚ Tinggi (single truth)     β”‚ Tergantung implementasi      β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Biaya                β”‚ Lebih tinggi              β”‚ Lebih rendah                 β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Kapan dipilih        β”‚ Organisasi besar dengan   β”‚ Kebutuhan cepat, departemen  β”‚
β”‚                      β”‚ banyak departemen dan     β”‚ spesifik, atau sebagai       β”‚
β”‚                      β”‚ kebutuhan cross-domain    β”‚ langkah awal sebelum DW      β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

CONTOH DATA MART DARI TOKO BATIK ONLINE:
  Data Warehouse (seluruh bisnis)
  β”‚
  β”œβ”€β”€ Data Mart Penjualan (Tim Sales)
  β”‚     Fokus: fakta_penjualan, dim_produk, dim_waktu, dim_pelanggan
  β”‚     Pertanyaan: Revenue? Konversi? Produk terlaris?
  β”‚
  β”œβ”€β”€ Data Mart Marketing (Tim Marketing)
  β”‚     Fokus: fakta_kampanye, dim_pelanggan, dim_produk, dim_kanal
  β”‚     Pertanyaan: ROI kampanye? Segmen respons terbaik?
  β”‚
  └── Data Mart Inventori (Tim Operasional)
        Fokus: fakta_stok, dim_produk, dim_waktu, dim_supplier
        Pertanyaan: Turnover stok? Produk slow-moving?

C.6 Materi 4: Proses ETL β€” Jembatan dari OLTP ke Warehouse

ETL (Extract, Transform, Load) adalah proses yang menjembatani sistem sumber (OLTP) dengan data warehouse. Ini adalah "dapur" di mana data mentah dari berbagai sumber diolah menjadi data analitik yang bersih, konsisten, dan siap pakai.

C.6.1 Extract β€” Mengambil Data dari Sumber

EXTRACT: Mengambil data dari sistem sumber tanpa mengganggu operasional

TANTANGAN EXTRACT:
  1. Heterogenitas sumber:
     β†’ Database relasional (MySQL, PostgreSQL, Oracle)
     β†’ Spreadsheet Excel / Google Sheets
     β†’ File CSV / JSON / XML
     β†’ API REST / GraphQL
     β†’ Log files
     β†’ SaaS platforms (Salesforce, Shopify, dll.)

  2. Volume besar:
     β†’ Full Extract: ambil SEMUA data setiap kali
       β†’ Sederhana tapi mahal untuk data besar
     β†’ Incremental Extract: hanya ambil data BARU atau BERUBAH
       β†’ Efisien, tapi butuh mekanisme deteksi perubahan:
         - Timestamp kolom: WHERE updated_at > last_extract_time
         - Change Data Capture (CDC): track INSERT/UPDATE/DELETE di log DB
         - Sequence number: WHERE id > last_max_id

  3. Meminimalkan dampak ke sistem OLTP:
     β†’ Jadwalkan extract di jam sepi (tengah malam, dini hari)
     β†’ Gunakan read replica database, bukan primary server
     β†’ Batasi jumlah koneksi bersamaan

STAGING AREA:
  Data yang di-extract disimpan sementara di "staging area"
  sebelum di-transform. Area ini memungkinkan:
  β†’ Re-run transform jika ada kegagalan tanpa harus extract ulang
  β†’ Audit: bisa lihat data sebelum dan sesudah transformasi
  β†’ Paralel processing

C.6.2 Transform β€” Membersihkan dan Mentransformasi Data

Tahap transform adalah yang paling kompleks dan paling kritis dalam ETL. Di sinilah keempat karakteristik data warehouse (terutama "integrated") diwujudkan.

JENIS-JENIS TRANSFORMASI:

1. DATA CLEANSING (Pembersihan Data):
   β†’ Menangani NULL: isi dengan nilai default atau nilai rata-rata
   β†’ Hapus whitespace: TRIM('  Budi Santoso  ') β†’ 'Budi Santoso'
   β†’ Koreksi case: UPPER() / LOWER() / INITCAP() untuk konsistensi
   β†’ Hapus karakter tidak valid
   β†’ Deteksi dan tangani duplikasi

2. STANDARDISASI FORMAT:
   β†’ Tanggal: berbagai format β†’ YYYY-MM-DD (ISO 8601)
   β†’ Nomor telepon: berbagai format β†’ satu format standar
   β†’ Kode wilayah: 'Jateng' vs 'Jawa Tengah' β†’ standar satu
   β†’ Satuan: USD vs IDR β†’ konversi ke IDR dengan kurs

3. INTEGRASI DAN PEMETAAN:
   β†’ Menggabungkan data dari berbagai sumber:
     CRM customer_id + POS member_id β†’ satu dim_pelanggan.kunci
   β†’ Surrogate key generation:
     Natural key dari sumber β†’ integer surrogate key di warehouse
   β†’ Resolusi konflik: jika data berbeda di dua sumber, mana yang dipercaya?

4. DERIVASI DAN KALKULASI:
   β†’ Hitung nilai turunan: revenue = qty Γ— harga_satuan
   β†’ Ekstrak dari tanggal: tahun, bulan, kuartal, nama_hari, is_weekend
   β†’ Kategori usia: tgl_lahir β†’ 'Remaja', 'Dewasa Muda', 'Senior'
   β†’ Segmentasi: total_belanja β†’ 'Bronze', 'Silver', 'Gold', 'Platinum'

5. PIVOTING / UNPIVOTING:
   β†’ Ubah struktur baris ke kolom atau sebaliknya
   β†’ Normalisasi β†’ denormalisasi (khusus untuk dimensi)

CONTOH TRANSFORMASI KONKRET:
  Data OLTP (tabel pesanan):
  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
  β”‚ id_pes β”‚ tgl_pesanan         β”‚ id_pelanggan β”‚
  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
  β”‚ 10001  β”‚ 2024-03-15 09:23:45 β”‚ 501          β”‚
  β””β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

  Setelah Transform (untuk dim_waktu dan fakta_penjualan):
  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
  β”‚ kunci_wkt  β”‚ tahunβ”‚ bulan β”‚ kuartalβ”‚ nama_hari_mingguβ”‚ is_weekendβ”‚
  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
  β”‚ 20240315   β”‚ 2024 β”‚ 3     β”‚ Q1     β”‚ Jumat          β”‚ 0         β”‚
  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

C.6.3 Load β€” Memasukkan Data ke Warehouse

LOAD: Memasukkan data yang sudah bersih ke tabel dimensi dan fakta

DUA STRATEGI LOADING:

1. FULL LOAD (Muat Penuh):
   β†’ Kosongkan tabel warehouse, isi ulang dari awal
   β†’ Kapan: jadwal periodik untuk dimensi kecil, atau pertama kali
   β†’ Kelemahan: mahal untuk tabel besar, ada downtime

2. INCREMENTAL LOAD (Muat Bertahap):
   β†’ Hanya tambahkan atau update data yang berubah
   β†’ Jauh lebih efisien untuk tabel besar
   β†’ Kompleks: harus tracking apa yang berubah
   
   Pola yang umum:
   a. INSERT ONLY: tabel fakta biasanya hanya di-append
   b. UPSERT (INSERT or UPDATE): dimensi yang berubah

URUTAN LOADING β€” PENTING!
  Dimensi harus di-load SEBELUM fakta (karena FK dari fakta ke dimensi):
  
  1. Load dim_waktu      ← dimensi statis, biasanya jarang berubah
  2. Load dim_produk     ← dimensi, bisa berubah
  3. Load dim_pelanggan  ← dimensi, bisa berubah
  4. Load dim_lokasi     ← dimensi, jarang berubah
  5. Load fakta_penjualan ← fakta, data baru setiap hari

JADWAL ETL TIPIKAL:
  β†’ Nightly batch (tengah malam): untuk laporan harian
  β†’ Weekly (Minggu pagi): untuk laporan mingguan
  β†’ Real-time / near-real-time streaming: untuk monitoring kritis
    (menggunakan tools seperti Apache Kafka, Apache Flink)

C.7 Materi 5: Multi-Dimensional Analysis β€” Cara Berpikir Analitik

Salah satu keunggulan data warehouse adalah kemampuan "memotong" data dari berbagai sudut pandang secara cepat. Ini disebut analisis multi-dimensional.

C.7.1 Cube Analitik β€” Visualisasi Konseptual

BAYANGKAN DATA SEBAGAI "KUBUS" 3 DIMENSI:

            WAKTU
            (2022, 2023, 2024)
           /
          /____________
         /  /  /  /  /|
        /──────────── /|      PRODUK
       |   |   |   | /|    (Batik Tulis,
       |   |   |   |/ |     Batik Cap,
       |───|───|───/  |     Aksesoris)
       |   |   |  /|  /
       |   |   | / | /
       |___|___|/  |/
       |   |   |   |
       β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜β”€β”€β”€β”€ LOKASI
                        (Semarang, Solo,
                          Jogja, Jakarta)

Setiap "sel" dalam kubus berisi NILAI TERUKUR (measure):
β†’ Revenue, jumlah transaksi, jumlah unit, dll.

Dalam praktik, dimensi bisa lebih dari 3:
β†’ Dimensi ke-4: Kanal penjualan (online, offline, marketplace)
β†’ Dimensi ke-5: Segmen pelanggan (baru, loyal, premium)
β†’ dst.

C.7.2 Lima Operasi OLAP

1. SLICE (Mengiris)
   β†’ Memilih SATU NILAI dari satu dimensi β†’ mengurangi satu dimensi
   
   Contoh: "Tampilkan data HANYA untuk tahun 2024"
   β†’ Dari kubus 3D (Waktu Γ— Produk Γ— Lokasi)
   β†’ Menjadi irisan 2D (Produk Γ— Lokasi) untuk 2024 saja

2. DICE (Memotong)
   β†’ Memilih BEBERAPA NILAI dari satu atau lebih dimensi β†’ subcube
   
   Contoh: "Tampilkan data untuk Q1–Q2 2024 dan produk Batik Tulis & Cap,
            untuk kota Semarang dan Solo"
   β†’ Subcube dari data yang lebih kecil tapi masih multi-dimensi

3. DRILL DOWN (Menyelami Detail)
   β†’ Bergerak ke level yang LEBIH DETAIL dalam hierarki dimensi
   
   Contoh hierarki waktu: Tahun β†’ Kuartal β†’ Bulan β†’ Minggu β†’ Hari
   
   "Revenue per Tahun" β†’ drill down β†’ "Revenue per Kuartal"
   β†’ drill down lagi β†’ "Revenue per Bulan"
   β†’ drill down lagi β†’ "Revenue per Hari"
   
   Contoh hierarki produk: Kategori β†’ Subkategori β†’ Produk

4. DRILL UP / ROLL UP (Merangkum)
   β†’ Bergerak ke level yang LEBIH TINGGI / RINGKAS dalam hierarki
   
   Kebalikan dari drill down:
   "Revenue per Hari" β†’ roll up β†’ "Revenue per Minggu"
   β†’ roll up lagi β†’ "Revenue per Bulan"
   β†’ roll up lagi β†’ "Revenue per Tahun"

5. PIVOT (Memutar)
   β†’ Memutar orientasi tampilan β€” menukar dimensi antar baris dan kolom
   
   Sebelum pivot:
   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
   β”‚ Tahun  β”‚ Produk β”‚ Revenue  β”‚
   β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
   β”‚ 2023   β”‚ Tulis  β”‚ 120 Jt   β”‚
   β”‚ 2023   β”‚ Cap    β”‚  80 Jt   β”‚
   β”‚ 2024   β”‚ Tulis  β”‚ 145 Jt   β”‚
   β”‚ 2024   β”‚ Cap    β”‚  95 Jt   β”‚
   β””β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

   Setelah pivot (Tahun di kolom, Produk di baris):
   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”
   β”‚ Produk β”‚  2023  β”‚  2024  β”‚
   β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€
   β”‚ Tulis  β”‚ 120 Jt β”‚ 145 Jt β”‚
   β”‚ Cap    β”‚  80 Jt β”‚  95 Jt β”‚
   β””β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”˜
   β†’ Jauh lebih mudah membandingkan year-over-year!

C.8 Materi 6: Pengantar Dimensional Modelling β€” Preview Menuju Pertemuan 12

Dimensional Modelling adalah teknik perancangan skema yang dikembangkan Ralph Kimball, dirancang khusus untuk mendukung OLAP dan operasi analitik multi-dimensional.

C.8.1 Dua Elemen Utama

FAKTA (FACT) β€” "APA yang terjadi?"
  β†’ Kejadian bisnis yang terukur secara numerik
  β†’ Disimpan di TABEL FAKTA (Fact Table)
  β†’ Contoh kejadian: transaksi penjualan, kunjungan dokter,
    peminjaman buku, pendaftaran mahasiswa
  β†’ Contoh ukuran (measures): revenue, qty, biaya, durasi, jumlah

DIMENSI (DIMENSION) β€” "SIAPA, APA, KAPAN, DI MANA?"
  β†’ Konteks deskriptif dari fakta β€” label yang digunakan untuk
    memfilter, mengelompokkan, dan memberi makna pada fakta
  β†’ Disimpan di TABEL DIMENSI (Dimension Table)
  β†’ Contoh dimensi: Waktu, Produk, Pelanggan, Lokasi, Karyawan

HUBUNGAN ANTARA FAKTA DAN DIMENSI:
  "Pada TANGGAL 15 Maret 2024, PELANGGAN Budi Santoso membeli
   PRODUK Batik Tulis Pekalongan sebanyak 2 unit seharga Rp 1.200.000"
  
  FAKTA β†’ Baris di tabel fakta_penjualan:
    kunci_waktu = 20240315
    kunci_pelanggan = 1001
    kunci_produk = 5023
    qty = 2
    revenue = 1200000

  DIMENSI β†’ Baris di tabel-tabel dimensi yang memberikan konteks:
    dim_waktu[20240315]: tahun=2024, bulan=3, kuartal='Q1', hari='Jumat'
    dim_pelanggan[1001]: nama='Budi Santoso', kota='Semarang', segmen='Gold'
    dim_produk[5023]:    nama='Batik Tulis Pekalongan', kategori='Batik Tulis'

C.8.2 Preview Star Schema

STAR SCHEMA β€” Skema "bintang":
  Satu tabel fakta di tengah, dikelilingi tabel dimensi.
  Disebut "bintang" karena bentuk diagramnya seperti bintang.

                  dim_waktu
                 (waktu/tanggal)
                      β”‚
                      β”‚
   dim_pelanggan ─────┼───── dim_produk
   (siapa)       (FAKTA    ) (apa yang dibeli)
                 PENJUALAN
                      β”‚
                      β”‚
                  dim_lokasi
                 (di mana)

  FAKTA PENJUALAN berisi:
  β†’ Kunci-kunci ke setiap dimensi (FK)
  β†’ Measures: revenue, qty, discount, cost

  PERBEDAAN KUNCI dari OLTP:
  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
  β”‚ OLTP: banyak tabel kecil, ternormalisasi, banyak FK β”‚
  β”‚ DW  : sedikit tabel besar (dimensi lebar/fat),     β”‚
  β”‚       denormalisasi disengaja untuk performa query  β”‚
  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

DETAIL MATERI STAR SCHEMA (Grain, Measures, Surrogate Key, dll.)
β†’ Akan dibahas mendalam di Pertemuan 12!

C.9 Arsitektur DW Modern: Sekilas Data Vault 2.0 & Medallion Architecture

Catatan: Bagian ini adalah pengantar konseptual β€” tidak mendalam, tidak implementasi. Tujuannya adalah agar mahasiswa mengenali istilah-istilah ini saat membaca dokumentasi teknis atau bertemu di dunia kerja.

Babak kedua perkuliahan ini (P11–P14) mengajarkan pendekatan Kimball (dimensional modelling / star schema). Namun di industri, ada pendekatan arsitektur DW lain yang cukup populer:

C.9.1 Data Vault 2.0

Data Vault adalah metodologi modeling data warehouse yang dikembangkan oleh Dan Linstedt. Dirancang untuk fleksibilitas tinggi dan auditability penuh.

TIGA KOMPONEN UTAMA DATA VAULT:

1. HUB β€” "Siapa/Apa yang penting dalam bisnis?"
   β†’ Menyimpan business keys (natural key) dari setiap entitas bisnis
   β†’ Sangat stabil, jarang berubah
   Contoh: HUB_PELANGGAN(hub_id, pelanggan_src_id, load_date, record_source)

2. LINK β€” "Bagaimana antar hub saling terhubung?"
   β†’ Menangkap hubungan (relationship) antar hub
   β†’ TIDAK menyimpan data deskriptif, hanya FK ke hub
   Contoh: LNK_PEMBELIAN(link_id, hub_pelanggan_id*, hub_produk_id*, 
                          load_date, record_source)

3. SATELLITE β€” "Konteks dan detail dari hub/link?"
   β†’ Menyimpan semua atribut deskriptif
   β†’ SELALU menyimpan historis (tidak pernah overwrite)
   Contoh: SAT_PELANGGAN(hub_id*, load_date*, nama, kota, segmen,
                          hash_diff, record_source)

KENAPA DATA VAULT?
  β†’ Sangat cocok ketika sumber data banyak dan sering berubah strukturnya
  β†’ Audit trail lengkap: setiap perubahan data tersimpan dengan timestamp
  β†’ Lebih modular: tambah sumber baru tidak perlu ubah model lama
  β†’ Lebih sulit di-query langsung β€” biasanya dilapisi dengan Information Mart
    (mirip star schema) untuk kebutuhan analitik akhir

C.9.2 Medallion Architecture (Bronze–Silver–Gold)

Medallion Architecture adalah pola desain data lake/lakehouse yang populer, dikembangkan oleh Databricks. Data diorganisasikan dalam tiga lapisan kualitas:

MEDALLION ARCHITECTURE:

  [SUMBER DATA]                    [KONSUMSI]
   OLTP, API,       β”Œβ”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”
   File, Streaming β†’β”‚BRONβ”‚β†’β”‚SILVβ”‚β†’β”‚GOLDβ”‚β†’ BI, ML, Analitik
                    β”‚ ZE β”‚   β”‚ ER β”‚   β”‚    β”‚
                    β””β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”˜

BRONZE β€” "Data Mentah"
  β†’ Data disimpan APA ADANYA dari sumber
  β†’ Minimal atau tanpa transformasi
  β†’ Dipertahankan selamanya (append-only audit log)
  β†’ Kualitas data TIDAK dijamin

SILVER β€” "Data Bersih & Tervalidasi"
  β†’ Data dari Bronze telah dibersihkan, distandarkan, di-join
  β†’ Tipe data konsisten, duplikasi dihapus
  β†’ Kualitas data CUKUP untuk konsumsi analitik
  β†’ Mirip domain/entity tables

GOLD β€” "Data Siap Analitik / Bisnis"
  β†’ Data sudah diagregasi sesuai kebutuhan bisnis
  β†’ Bisa berupa star schema, flat tables, atau feature tables untuk ML
  β†’ Kualitas dan performa dioptimalkan untuk end-user
  β†’ Ini yang paling mirip dengan yang kita pelajari di P12–P13

CONTOH ALUR TOKO BATIK ONLINE:
  Bronze: file CSV penjualan harian (as-is, termasuk baris error)
  Silver: tabel pelanggan, produk, transaksi yang sudah bersih
  Gold:   star schema fakta_penjualan + dimensi (siap untuk dashboard)

Perbandingan Singkat:

AspekKimball (Star)Data VaultMedallion
PendekatanTop-down, query-firstBottom-up, source-firstLayer bertahap
Fleksibilitas sumberSedangTinggiTinggi
Kemudahan queryTinggi (star langsung)Rendah (butuh lapisan)Tinggi (di Gold)
AuditabilitySedang (SCD)Sangat tinggiTinggi (Bronze)
Cocok untukTim analis, DW tradisionalBanyak sumber, audit ketatData lake/lakehouse
Kita pelajari di?P12–P13 (mendalam)Pengantar ini sajaPengantar ini saja

Pesan kunci: Star schema (Kimball) yang kita pelajari di P12–P13 adalah fondasi yang paling relevan untuk memulai karier sebagai data professional. Data Vault dan Medallion adalah evolusi yang akan kamu temui saat bekerja di tim data yang lebih matang β€” dan fondasi P11–P13 akan membantu kamu memahaminya dengan cepat.


D. LATIHAN DAN DISKUSI

D.1 Latihan: Identifikasi Query Analitik vs Transaksional (Individual, 10 menit)

Instruksi: Kategorikan setiap pertanyaan bisnis berikut sebagai OLTP (transaksional) atau OLAP (analitik), kemudian sebutkan dimensi dan fakta yang diperlukan untuk yang bersifat analitik.

Daftar Pertanyaan Bisnis (Sistem Rumah Sakit):

  1. "Berapa total tagihan pasien dengan nomor rekam medis 001234?"
  2. "Dokter spesialis mana yang paling banyak menangani pasien dalam 6 bulan terakhir?"
  3. "Apakah kamar 302 sedang terisi atau kosong saat ini?"
  4. "Tunjukkan tren kasus penyakit per diagnosis per bulan selama 2 tahun terakhir!"
  5. "Berapa rata-rata Length of Stay (LOS) pasien berdasarkan jenis penyakit dan usia?"
  6. "Tambahkan jadwal operasi baru untuk Dr. Budi besok pukul 08:00"
  7. "Jam berapa puncak kunjungan pasien rawat jalan per hari dalam seminggu?"
  8. "Obat apa yang hampir habis stoknya saat ini?"
  9. "Bagaimana perbandingan revenue antar poli di 4 kuartal terakhir?"
  10. "Update alamat pasien Siti Rahayu ke Jl. Merdeka No. 5"

Tabel Jawaban:

NoOLTP / OLAPJika OLAP: Dimensi yang DiperlukanFakta/Measure
1
2
...

D.2 Diskusi Kelompok: "Rancang Data Warehouse Kamu!" (Brainstorming, 15 menit)

Konteks: Universitas kamu ingin membangun Data Warehouse Akademik untuk mendukung keputusan strategis: evaluasi program studi, monitoring kinerja dosen, analisis kelulusan mahasiswa.

Tugas Kelompok (4–5 mahasiswa):

  1. Identifikasi 5 pertanyaan analitik yang paling penting bagi pimpinan universitas

    • Contoh: "Bagaimana tren IPK rata-rata per angkatan per program studi dalam 5 tahun?"
  2. Identifikasi FAKTA (kejadian bisnis yang terukur):

    • Apa kejadian yang paling penting? (Satu mahasiswa mengambil satu matakuliah di satu semester?)
    • Apa yang diukur? (Nilai, SKS, kehadiran, biaya?)
  3. Identifikasi DIMENSI (konteks dari fakta):

    • Siapa yang terlibat? (Mahasiswa, dosen?)
    • Apa objeknya? (Mata kuliah, program studi?)
    • Kapan? (Semester, tahun akademik?)
    • Di mana? (Ruang kelas, kampus?)
  4. Gambaran ETL sederhana:

    • Dari mana data berasal? (Sistem SIAKAD, sistem keuangan, sistem perpustakaan?)
    • Transformasi apa yang diperlukan?

Output yang dipresentasikan: Whiteboard/kertas berisi daftar pertanyaan analitik + daftar dimensi dan fakta yang diidentifikasi (bukan skema lengkap β€” itu akan di pertemuan 12)


D.3 Demonstrasi: Perbandingan Query OLTP vs OLAP (Opsional, 10 menit)

Dosen menjalankan dua query di MySQL:

-- QUERY OLTP β€” cepat, langsung ke PK
-- Simulasi: cek status pesanan customer
EXPLAIN ANALYZE
SELECT p.id_pesanan, p.status, p.tgl_pesanan, pl.nama
FROM pesanan p
JOIN pelanggan pl ON p.id_pelanggan = pl.id_pelanggan
WHERE p.id_pesanan = 10045;
-- Harapan: type=const, rows=1, < 5ms
 
-- ──────────────────────────────────────────────
 
-- QUERY ANALITIK β€” lambat di OLTP, butuh full scan
-- Simulasi: laporan revenue per bulan per kategori
EXPLAIN
SELECT
    YEAR(p.tgl_pesanan)  AS tahun,
    MONTH(p.tgl_pesanan) AS bulan,
    k.nama_kategori,
    SUM(ip.qty * ip.harga_saat_pesan) AS total_revenue
FROM pesanan p
JOIN item_pesanan ip ON p.id_pesanan  = ip.id_pesanan
JOIN produk pr       ON ip.id_produk  = pr.id_produk
JOIN kategori k      ON pr.id_kategori = k.id_kategori
WHERE p.status = 'selesai'
GROUP BY YEAR(p.tgl_pesanan), MONTH(p.tgl_pesanan), k.nama_kategori
ORDER BY tahun, bulan, total_revenue DESC;
-- Harapan: type=ALL di beberapa tabel, rows=besar, lambat
 
-- ──────────────────────────────────────────────
 
-- QUERY OLAP (jika sudah ada tabel warehouse sederhana)
-- Mengambil data yang sudah pre-agregasi
SELECT tahun, bulan, nama_kategori, SUM(revenue) AS total_revenue
FROM fakta_penjualan f
JOIN dim_waktu w   ON f.kunci_waktu = w.kunci_waktu
JOIN dim_produk p  ON f.kunci_produk = p.kunci_produk
GROUP BY tahun, bulan, nama_kategori
ORDER BY tahun, bulan, total_revenue DESC;
-- Harapan: sangat cepat karena data sudah siap, JOIN sederhana

E. EVALUASI DAN PENILAIAN

E.1 Kuis Penutup (10 menit, bobot partisipasi)

  1. Jelaskan dengan kata-katamu sendiri: mengapa kita TIDAK boleh menjalankan laporan analitik yang berat langsung di database OLTP yang sedang melayani transaksi real-time?

  2. Sebutkan 4 karakteristik data warehouse menurut Inmon. Untuk setiap karakteristik, berikan contoh konkret yang menunjukkan bagaimana karakteristik itu diwujudkan dalam praktik!

  3. Jelaskan perbedaan antara data warehouse dan data mart. Kapan organisasi lebih baik membangun data mart daripada langsung data warehouse?

  4. Apa perbedaan antara operasi Drill Down dan Slice dalam analisis multi-dimensional? Berikan contoh masing-masing dengan konteks penjualan produk!

  5. Dalam proses ETL, tahap mana yang paling kritis dan kenapa? Berikan contoh satu transformasi yang khas yang terjadi di tahap tersebut!

E.2 Tugas: Analisis Kebutuhan Data Warehouse (Individu)

Judul: Analisis Kebutuhan Analitik dan Rancangan Awal Dimensi–Fakta

Deskripsi: Mahasiswa memilih satu domain bisnis (berbeda dari domain proyek kelompok) dan melakukan analisis kebutuhan untuk membangun data warehouse.

Deliverables:

Bagian 1 β€” Deskripsi Domain Bisnis (1 halaman)

  • Nama domain dan konteks bisnisnya
  • Sistem OLTP yang sudah ada (bayangkan)
  • Stakeholder yang akan menggunakan analitik (C-level, manajer, analis)

Bagian 2 β€” Pertanyaan Analitik (10 pertanyaan)

  • Tuliskan 10 pertanyaan analitik yang ingin dijawab
  • Kelompokkan: pertanyaan strategis (untuk direksi), taktis (manajer), operasional (analis)
  • Urutkan dari yang paling kritis

Bagian 3 β€” Identifikasi Dimensi dan Fakta

  • Dari 10 pertanyaan di atas, identifikasi:
    • Fakta: kejadian bisnis apa yang menjadi pusat analisis?
    • Dimensi: konteks apa yang diperlukan untuk setiap fakta?
  • Buat tabel:
PertanyaanFakta yang DiperlukanDimensi yang Diperlukan
.........

Bagian 4 β€” Rancangan ETL Sederhana

  • Dari mana data akan di-extract? (sistem apa saja)
  • Contoh satu transformasi yang diperlukan (konkret dengan contoh data sebelum dan sesudah)
  • Jadwal loading yang diusulkan (real-time / harian / mingguan) dan alasannya

Format: PDF, minimal 4 halaman, font 11pt Deadline: H-1 sebelum pertemuan 12 (dikumpulkan via Ngaji UIN Gusdur)


F. PERSIAPAN PERTEMUAN 12

F.1 Topik Pertemuan 12

Dimensional Modelling: Star Schema β€” di sinilah kita turun ke teknis perancangan. Pertemuan 12 membahas cara merancang skema bintang (star schema) secara lengkap, mulai dari menentukan grain, membangun fact table, merancang dimension table yang kaya atribut, hingga menulis DDL untuk warehouse.

Topik spesifik yang akan dibahas:

  • Grain definition: "Satu baris mewakili apa?" β€” keputusan paling fundamental
  • Fact table: degenerate dimension, additive vs semi-additive vs non-additive measures
  • Dimension table: wide table, surrogate key, natural key, hierarki
  • Date dimension: dimensi paling penting dan cara membangunnya
  • Implementasi star schema dalam SQL

F.2 Bacaan Wajib Sebelum Pertemuan 12

  • Kimball & Ross, Chapter 1: "Data Warehousing, Business Intelligence, and Dimensional Modeling Primer"
  • Kimball & Ross, Chapter 2: "Kimball Dimensional Modeling Techniques" (bagian grain dan fact table)

F.3 Pertanyaan Pemantik untuk Pertemuan 12

Dari hasil brainstorming Latihan D.2 (Data Warehouse Akademik), pikirkan:

  1. Jika tabel fakta berisi data nilai mahasiswa, apakah "satu baris = satu pengambilan mata kuliah" sudah cukup spesifik sebagai grain? Atau perlu lebih detail?
  2. Di dimensi Mahasiswa, atribut apa saja yang perlu disimpan untuk mendukung analisis segmentasi?
  3. Bagaimana kamu akan membuat "dimensi waktu" yang bisa mendukung analisis per semester, per tahun akademik, dan per bulan kalender sekaligus?

G. REFERENSI

G.1 Referensi Utama

  1. Kimball, R. & Ross, M. (2013). The Data Warehouse Toolkit: The Definitive Guide to Dimensional Modeling (3rd Edition). Wiley. ISBN: 978-1118530801.

    • Chapter 1: Data Warehousing, Business Intelligence, and Dimensional Modeling Primer (bacaan utama P11)
    • Chapter 2: Kimball Dimensional Modeling Techniques (persiapan P12)
    • Chapter 19: ETL Subsystems and Techniques
  2. Inmon, W. H. (2005). Building the Data Warehouse (4th Edition). Wiley. ISBN: 978-0764599446.

    • Buku "lainnya" dari dua aliran utama data warehousing (Kimball vs Inmon)
    • Chapter 1: Pengantar dan definisi 4 karakteristik DW
  3. Elmasri, R. & Navathe, S. B. (2015). Fundamentals of Database Systems (7th Edition). Pearson.

    • Chapter 29: Data Warehousing and Data Mining (pengantar dari perspektif database)

G.2 Referensi Online

  1. Kimball Group. "Kimball Dimensional Modeling Techniques" β€” https://www.kimballgroup.com/data-warehouse-business-intelligence-resources/kimball-techniques/dimensional-modeling-techniques/ (opens in a new tab)
  2. Kimball Group. "What is a Data Warehouse?" (Design Tips) β€” https://www.kimballgroup.com (opens in a new tab)
  3. IBM Cloud Education. "What is OLAP?" β€” https://www.ibm.com/topics/olap (opens in a new tab)
  4. Oracle. "What is a Data Warehouse?" β€” https://www.oracle.com/database/what-is-a-data-warehouse/ (opens in a new tab)
  5. AWS. "What is a Data Warehouse?" β€” https://aws.amazon.com/data-warehouse/ (opens in a new tab)

G.3 Video Resources

  1. Alex The Analyst β€” "Data Warehouse Tutorial for Beginners" (YouTube β€” sangat visual)
  2. IBM Technology β€” "What is OLAP?" (YouTube β€” penjelasan singkat dan jelas)
  3. Kimball Group β€” "The Kimball Data Warehouse Lifecycle" (YouTube β€” dari sumber aslinya)
  4. Data with Mo β€” "Star Schema vs Snowflake Schema" (YouTube β€” preview P12)

G.4 Tools untuk Eksplorasi

  1. Google BigQuery β€” https://cloud.google.com/bigquery (opens in a new tab) (free tier tersedia β€” cloud DW)
  2. DuckDB β€” https://duckdb.org (opens in a new tab) (gratis, embedded OLAP engine β€” sangat mudah dicoba)
  3. Apache Superset β€” https://superset.apache.org (opens in a new tab) (gratis, BI tool untuk visualisasi DW)

H. LAMPIRAN

Lampiran A: Tabel Perbandingan Lengkap OLTP vs OLAP vs Data Warehouse

╔═══════════════════════╦═══════════════════════════╦══════════════════════════════╗
β•‘ Karakteristik         β•‘ OLTP                       β•‘ OLAP / Data Warehouse        β•‘
╠═══════════════════════╬═══════════════════════════╬══════════════════════════════╣
β•‘ Singkatan             β•‘ Online Transaction         β•‘ Online Analytical            β•‘
β•‘                       β•‘ Processing                 β•‘ Processing                   β•‘
╠═══════════════════════╬═══════════════════════════╬══════════════════════════════╣
β•‘ Tujuan Utama          β•‘ Proses transaksi harian    β•‘ Analisis & decision support  β•‘
╠═══════════════════════╬═══════════════════════════╬══════════════════════════════╣
β•‘ Sumber Data           β•‘ Data operasional terkini   β•‘ Multi-source, historis       β•‘
╠═══════════════════════╬═══════════════════════════╬══════════════════════════════╣
β•‘ Jenis Operasi         β•‘ INSERT, UPDATE, DELETE,    β•‘ SELECT dengan agregasi besar β•‘
β•‘                       β•‘ SELECT sederhana           β•‘ (sangat read-heavy)          β•‘
╠═══════════════════════╬═══════════════════════════╬══════════════════════════════╣
β•‘ Skema Database        β•‘ 3NF, BCNF (normalized)     β•‘ Star/Snowflake (denormalized) β•‘
╠═══════════════════════╬═══════════════════════════╬══════════════════════════════╣
β•‘ Tipe Tabel            β•‘ Tabel relasional biasa     β•‘ Fact tables + Dimension      β•‘
β•‘                       β•‘                           β•‘ tables                       β•‘
╠═══════════════════════╬═══════════════════════════╬══════════════════════════════╣
β•‘ Orientasi Query       β•‘ Lookup by PK/FK, filter   β•‘ Agregasi besar, GROUP BY,    β•‘
β•‘                       β•‘ by specific key           β•‘ multi-dimension JOIN          β•‘
╠═══════════════════════╬═══════════════════════════╬══════════════════════════════╣
β•‘ Pengguna              β•‘ Ratusan–ribuan concurrent  β•‘ Puluhan analyst/manajer      β•‘
╠═══════════════════════╬═══════════════════════════╬══════════════════════════════╣
β•‘ Response Time         β•‘ < 100 ms (milidetik)       β•‘ Detik – menit (dapat         β•‘
β•‘                       β•‘                           β•‘ dipercepat dengan pre-agg)   β•‘
╠═══════════════════════╬═══════════════════════════╬══════════════════════════════╣
β•‘ Volume Data           β•‘ GB – beberapa TB (aktif)   β•‘ TB – PB (historis panjang)   β•‘
╠═══════════════════════╬═══════════════════════════╬══════════════════════════════╣
β•‘ Update Frequency      β•‘ Real-time (setiap detik)   β•‘ Batch: harian/mingguan/      β•‘
β•‘                       β•‘                           β•‘ bulanan via ETL              β•‘
╠═══════════════════════╬═══════════════════════════╬══════════════════════════════╣
β•‘ Backup/Recovery       β•‘ Full + WAL logging, PITR   β•‘ Full backup cukup (non-       β•‘
β•‘                       β•‘ (point-in-time recovery)   β•‘ volatile, bisa rebuild dari  β•‘
β•‘                       β•‘                           β•‘ sumber jika perlu)           β•‘
╠═══════════════════════╬═══════════════════════════╬══════════════════════════════╣
β•‘ Index Utama           β•‘ B-Tree pada PK, FK, dan   β•‘ Bitmap index (untuk low-     β•‘
β•‘                       β•‘ kolom query umum          β•‘ cardinality), columnar       β•‘
╠═══════════════════════╬═══════════════════════════╬══════════════════════════════╣
β•‘ Contoh Platform       β•‘ MySQL, PostgreSQL, Oracle, β•‘ Snowflake, BigQuery,         β•‘
β•‘                       β•‘ SQL Server                β•‘ Redshift, ClickHouse         β•‘
β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•©β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•©β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•

Lampiran B: Contoh Tabel Dimensi dan Fakta Sederhana

-- ============================================================
-- PREVIEW DIMENSIONAL MODEL β€” Sistem Toko Batik Online
-- (Detail lengkap di Pertemuan 12)
-- ============================================================
 
-- Dimensi Waktu (Date Dimension)
-- Pra-populasi untuk semua tanggal yang mungkin dianalisis
CREATE TABLE dim_waktu (
    kunci_waktu      INT UNSIGNED    NOT NULL,  -- Format: YYYYMMDD
    tanggal_penuh    DATE            NOT NULL,
    tahun            SMALLINT        NOT NULL,
    kuartal          TINYINT         NOT NULL,  -- 1, 2, 3, 4
    nama_kuartal     CHAR(2)         NOT NULL,  -- Q1, Q2, Q3, Q4
    bulan            TINYINT         NOT NULL,  -- 1-12
    nama_bulan       VARCHAR(20)     NOT NULL,  -- Januari, Februari, ...
    minggu_dalam_tahun TINYINT       NOT NULL,  -- 1-53
    hari_dalam_bulan   TINYINT       NOT NULL,  -- 1-31
    nama_hari_minggu   VARCHAR(10)   NOT NULL,  -- Senin, Selasa, ...
    is_weekend       TINYINT(1)      NOT NULL,  -- 0=weekday, 1=weekend
    is_hari_libur    TINYINT(1)      NOT NULL DEFAULT 0,
    CONSTRAINT pk_dim_waktu PRIMARY KEY (kunci_waktu)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
 
-- Dimensi Produk
CREATE TABLE dim_produk (
    kunci_produk       INT UNSIGNED    NOT NULL AUTO_INCREMENT,
    natural_key_produk INT UNSIGNED    NOT NULL,  -- id dari OLTP
    nama_produk        VARCHAR(200)    NOT NULL,
    kategori           VARCHAR(100)    NOT NULL,
    subkategori        VARCHAR(100),
    harga_jual         DECIMAL(15,2)   NOT NULL,
    rentang_harga      VARCHAR(30),   -- 'Budget', 'Mid-range', 'Premium'
    is_aktif           TINYINT(1)      NOT NULL DEFAULT 1,
    berlaku_dari       DATE            NOT NULL,
    berlaku_sampai     DATE            NOT NULL DEFAULT '9999-12-31',
    CONSTRAINT pk_dim_produk PRIMARY KEY (kunci_produk)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
 
-- Dimensi Pelanggan
CREATE TABLE dim_pelanggan (
    kunci_pelanggan       INT UNSIGNED    NOT NULL AUTO_INCREMENT,
    natural_key_pelanggan INT UNSIGNED    NOT NULL,  -- id dari OLTP
    nama                  VARCHAR(150)    NOT NULL,
    kota                  VARCHAR(100)    NOT NULL,
    provinsi              VARCHAR(100)    NOT NULL,
    segmen_pelanggan      VARCHAR(30),    -- 'Baru', 'Regular', 'Loyal', 'VIP'
    kelompok_usia         VARCHAR(20),    -- 'Remaja', 'Dewasa Muda', 'Senior'
    berlaku_dari          DATE            NOT NULL,
    berlaku_sampai        DATE            NOT NULL DEFAULT '9999-12-31',
    CONSTRAINT pk_dim_pelanggan PRIMARY KEY (kunci_pelanggan)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
 
-- Tabel Fakta Penjualan
CREATE TABLE fakta_penjualan (
    kunci_waktu         INT UNSIGNED    NOT NULL,
    kunci_pelanggan     INT UNSIGNED    NOT NULL,
    kunci_produk        INT UNSIGNED    NOT NULL,
    id_pesanan_sumber   INT UNSIGNED    NOT NULL,  -- Degenerate dimension
    qty                 SMALLINT UNSIGNED NOT NULL,
    harga_satuan        DECIMAL(15,2)   NOT NULL,
    diskon              DECIMAL(15,2)   NOT NULL DEFAULT 0.00,
    revenue_bersih      DECIMAL(15,2)   NOT NULL,  -- qty Γ— harga - diskon
    CONSTRAINT pk_fakta_penjualan
        PRIMARY KEY (kunci_waktu, kunci_pelanggan, kunci_produk, id_pesanan_sumber),
    CONSTRAINT fk_fp_waktu     FOREIGN KEY (kunci_waktu)
        REFERENCES dim_waktu (kunci_waktu),
    CONSTRAINT fk_fp_pelanggan FOREIGN KEY (kunci_pelanggan)
        REFERENCES dim_pelanggan (kunci_pelanggan),
    CONSTRAINT fk_fp_produk    FOREIGN KEY (kunci_produk)
        REFERENCES dim_produk (kunci_produk)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

Lampiran C: Lembar Kerja Latihan D.1 β€” OLTP vs OLAP

LEMBAR KERJA β€” IDENTIFIKASI QUERY OLTP vs OLAP
Nama  : ___________________________ NIM : _______________
Tanggal: ___________________

Domain: Sistem Rumah Sakit

INSTRUKSI: Kategorikan pertanyaan sebagai OLTP atau OLAP.
           Untuk OLAP, identifikasi dimensi dan fakta/measure.

β”Œβ”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Noβ”‚ Pertanyaan Bisnis                         β”‚ OLTP/OLAPβ”‚ Dimensi (jika OLAPβ”‚ Fakta/Measureβ”‚
β”œβ”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ 1 β”‚ Tagihan pasien RM 001234?                 β”‚          β”‚                   β”‚              β”‚
β”œβ”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ 2 β”‚ Dokter paling banyak tangani pasien 6bln? β”‚          β”‚                   β”‚              β”‚
β”œβ”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ 3 β”‚ Kamar 302 kosong atau terisi sekarang?    β”‚          β”‚                   β”‚              β”‚
β”œβ”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ 4 β”‚ Tren kasus penyakit per bulan 2 tahun?    β”‚          β”‚                   β”‚              β”‚
β”œβ”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ 5 β”‚ Rata-rata LOS per diagnosis dan usia?     β”‚          β”‚                   β”‚              β”‚
β”œβ”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ 6 β”‚ Tambah jadwal operasi Dr. Budi besok?     β”‚          β”‚                   β”‚              β”‚
β”œβ”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ 7 β”‚ Jam puncak kunjungan rawat jalan/minggu?  β”‚          β”‚                   β”‚              β”‚
β”œβ”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ 8 β”‚ Obat hampir habis stok saat ini?          β”‚          β”‚                   β”‚              β”‚
β”œβ”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ 9 β”‚ Revenue antar poli 4 kuartal terakhir?    β”‚          β”‚                   β”‚              β”‚
β”œβ”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚10 β”‚ Update alamat pasien Siti ke Jl. Merdeka? β”‚          β”‚                   β”‚              β”‚
β””β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

REFLEKSI:
Dari 10 pertanyaan di atas, mana yang paling "berbahaya" jika
dijalankan langsung di database OLTP saat jam sibuk? Mengapa?

[Jawaban:]

Lampiran D: Diagram Alur ETL Untuk Diisi Mahasiswa

LEMBAR KERJA β€” RANCANGAN ETL SEDERHANA
Nama  : ___________________________ NIM : _______________

DOMAIN YANG DIPILIH: ___________________________________

LANGKAH 1: EXTRACT
  Sistem sumber yang akan di-extract:
  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
  β”‚ Nama Sistem/File     β”‚ Data yang Di-extract     β”‚ Frekuensi Extractβ”‚
  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
  β”‚                      β”‚                         β”‚                  β”‚
  β”‚                      β”‚                         β”‚                  β”‚
  β”‚                      β”‚                         β”‚                  β”‚
  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

LANGKAH 2: TRANSFORM (pilih 2 transformasi yang paling penting)

  Transformasi 1:
  Kolom/data yang diubah   : ___________________________
  Kondisi data SEBELUM     : ___________________________
  Kondisi data SESUDAH     : ___________________________
  Alasan transformasi ini  : ___________________________

  Transformasi 2:
  Kolom/data yang diubah   : ___________________________
  Kondisi data SEBELUM     : ___________________________
  Kondisi data SESUDAH     : ___________________________
  Alasan transformasi ini  : ___________________________

LANGKAH 3: LOAD
  Tabel warehouse tujuan   : ___________________________
  Strategi loading         : β–‘ Full Load  β–‘ Incremental Load
  Alasan pemilihan strategi: ___________________________
  Jadwal yang diusulkan    : ___________________________

KENDALA YANG DIANTISIPASI:
  [Tuliskan 2 tantangan ETL yang mungkin dihadapi untuk domain kamu]
  1. _______________________________________________
  2. _______________________________________________

PENUTUP

Pertemuan 11 membuka babak baru yang secara konseptual adalah lompatan besar: dari memastikan data tersimpan dengan benar (OLTP) ke memastikan data dapat dianalisis dengan efektif (OLAP/DW).

Key Messages Pertemuan 11:

  1. OLTP dan OLAP adalah dua sistem yang berbeda dengan tujuan berbeda β€” bukan yang satu lebih baik dari yang lain, melainkan keduanya diperlukan dan melengkapi satu sama lain dalam ekosistem data organisasi yang matang

  2. Data warehouse bukan sekadar "database yang lebih besar" β€” ia memiliki empat karakteristik fundamental (subject-oriented, integrated, time-variant, non-volatile) yang membedakannya secara filosofis dari database operasional

  3. ETL adalah jantung dari data warehouse β€” kualitas data di warehouse sangat bergantung pada kualitas proses Transform: pembersihan, standardisasi, dan integrasi yang dilakukan sebelum data masuk

  4. Dimensional thinking adalah cara berpikir baru β€” alih-alih berpikir dalam entity dan relationship (OLTP), kita mulai berpikir dalam fakta dan dimensi: "Kejadian bisnis apa yang ingin kita ukur? Dan dari konteks apa?"

  5. Data warehouse adalah fondasi analitik sains data β€” semua pipeline ML dan dashboard BI yang canggih sekalipun tidak bisa menghasilkan insight yang benar jika fondasi data warehousenya buruk

Koneksi ke Proyek Semester: Tahap 7 proyek kelompok adalah Dimensional Model (pertemuan 12–13), yang merupakan bagian terakhir sebelum presentasi akhir. Tugas analisis kebutuhan DW yang dikerjakan secara individu hari ini menjadi latihan fondasi sebelum mengaplikasikannya ke domain proyek kelompok di pertemuan 12.


Disusun oleh: Mohammad Reza Maulana, M.Kom Program Studi Sains Data Fakultas Ekonomi dan Bisnis Islam UIN K.H. Abdurrahman Wahid Pekalongan

Revisi: Februari 2026