Episode ini mengajarkan data modeling untuk BI: star schema dengan fact & dimension tables, kapan memakai snowflake schema, bagaimana merancang model di database dan di tool BI, serta praktik membangun model Superstore yang siap dipakai dashboard

Setelah di episode 4 kalian berhasil menulis query report yang benar, pada episode ini kita mengupas lapisan yang membuat query tersebut mudah ditulis dan cepat dijalankan: data modeling. Sebagian besar masalah BI yang "tampak misterius" — dashboard lambat, angka tidak konsisten, query rumit — berakar dari model data yang buruk.
Mengapa data modeling penting bagi BI Analyst? Karena tool seperti Power BI, Tableau, dan Looker bekerja di atas model. Kalau modelnya berantakan (satu tabel raksasa tanpa relasi), setiap dashboard akan berulang kali menulis logika yang sama, lambat, dan rawan salah. Model yang baik membuat dashboard cepat, konsisten, dan mudah dipelihara.
Di dunia BI, tabel dibagi menjadi dua peran utama:
fact_orders berisi order_id, customer_id, product_id, sales, profit, quantity.dim_customer berisi customer_id, name, region; dim_product berisi product_id, category, sub_category.Analoginya: fact adalah kejadian ("order #1024 senilai $500"), dimension adalah konteks ("dibeli Budi di region Barat, kategori Furniture"). Untuk menganalisis fakta berdasarkan konteks, kalian JOIN fact ke dimension.
| Tabel | Peran | Contoh Kolom | Kecenderungan |
|---|---|---|---|
fact_orders | Kejadian/ukuran | sales, profit, quantity | Bertambah terus (append) |
dim_customer | Konteks pelanggan | name, region, segment | Perubahan lambat (SCD) |
dim_product | Konteks produk | category, sub_category | Perubahan jarang |
dim_date | Konteks waktu | year, month, quarter | Statis, pre-populated |
Star schema adalah model paling populer untuk BI: satu fact table di tengah, dikelilingi dimension tables — bentuknya seperti bintang:
Ciri star schema: fact terhubung langsung ke setiap dimension, tanpa perantara. Keuntungannya:
JOIN, tidak perlu query bersarang.Semua tool BI besar merekomendasikan star schema sebagai titik awal. Ini model yang akan kalian pakai untuk Superstore.
Snowflake schema menormalkan dimension lebih jauh — membagi dim_product menjadi dim_category terpisah, misalnya. Bentuknya bercabang seperti kepingan salju.
| Aspek | Star Schema | Snowflake Schema |
|---|---|---|
| Struktur | 1 level relasi | Relasi bertingkat |
| Query | Lebih sederhana & cepat | Lebih rumit (JOIN bertingkat) |
| Redundansi data | Tinggi (atribut diulang) | Rendah (ternormalisasi) |
| Kapan dipakai | Default untuk BI | Warehouse dengan ruang terbatas |
Untuk BI modern di era warehouse murah (Snowflake, BigQuery), star schema selalu menang. Snowflake schema hanya relevan jika penyimpanan sangat mahal — kondisi yang makin jarang terjadi.
Sekarang rancang model Superstore. Buat dua dimension dan satu fact (plus dim_date opsional):
CREATE TABLE dim_customer AS
SELECT DISTINCT
customer_id,
customer_name,
segment,
region
FROM orders;CREATE TABLE dim_product AS
SELECT DISTINCT
product_id,
product_name,
category,
sub_category
FROM orders;CREATE TABLE fact_orders AS
SELECT
order_id,
order_date,
customer_id,
product_id,
sales,
quantity,
profit
FROM orders;Model sekarang:
Perhatikan prinsipnya: atribut deskriptif masuk ke dimension, angka terukur masuk ke fact. Kolom seperti region dan category hanya disimpan satu kali di dimension — saat butuh, kalian JOIN dan tidak perlu khawatir nilai di setiap baris fact berbeda-beda.
Di Power BI, Tableau, dan Looker, kalian memuat tabel model lalu membuat relasi antar tabel (bukan meng-import satu tabel raksasa). Prinsip emasnya:
customer_id, product_id).Important
Aturan paling penting data modeling BI: fact = kejadian yang diukur, dimension = konteks yang memfilter. Kalau sebuah kolom dipakai sebagai filter/slicer, ia harus hidup di dimension. Kalau ia dijumlahkan, ia hidup di fact. Model yang mengikuti aturan ini hampir selalu cepat dan mudah dipakai.
Sebuah keputusan desain penting: logika bisnis sebaiknya diletakkan di model, bukan di dashboard. Contohnya:
| Logika | Di Model (direkomendasikan) | Di Dashboard (hindari) |
|---|---|---|
| Margin formula | Kalkulasi profit / sales di model/semantic layer | Hitung ulang di setiap chart |
| Currency & unit | Distandarkan di model | Diubah-ubah di visual |
| Filter region | Di dimension dim_customer | IF bersarang di visual |
| Tanggal | dim_date dengan atribut lengkap | Parsing string di tool |
Karena itu di episode 6 kita akan melihat bagaimana ELT dengan dbt membangun model-model ini secara otomatis dan terdokumentasi — dan di episode 12 bagaimana metriknya distandarkan lewat semantic layer.
JOIN akan melipatgandakan baris — pastikan customer_id di dim_customer unik.Inti yang harus dibawa pulang:
dim_customer, dim_product, fact_orders) sudah siap dipakai.Di episode 6 selanjutnya kita akan membahas ETL/ELT dasar — bagaimana data dari source mentah menjadi model beres seperti ini secara otomatis, plus perkenalan dbt dan praktik membangun pipeline sederhana. Pastikan model Superstore kalian tersimpan, karena kita akan membangun pipeline di atasnya!