Management Decision Support - [10 Business Insights & ETL Lineage : dwh_martkita]
Computer › Local Disk (C:) › MySQL 3306 › dwh_martkita › 10_Business_Questions_ETL
Total Omset Konsolidasi
Rp 432,37 Juta
3 Cabang • 22.253 Transaksi
Total Unit Terjual
40.695 Unit
Produk Fast Moving (FMCG)
Cabang Penjualan Terbesar
Kuta Legian
Rp 194,65 Juta (45,02%)
Laba Kotor Terbesar
Beras Premium 5kg
Gross Profit Rp 6,39 Juta
Filter Kategori Pertanyaan:
Q1 Cabang mana yang memiliki total penjualan terbesar?
Jawaban: MartKita Kuta Legian (Rp 194.654.600,00)
💡 Kenapa Jawabannya Itu? (Akar Penyebab)

Faktor Geografis & Demografi: Gerai Kuta Legian berlokasi di sentra pariwisata internasional dengan arus pejalan kaki (footfall) turis domestik dan mancanegara tertinggi di Bali.

Volume transaksi mencapai 18.493 unit barang (45,02% total omset jaringan), melampaui Denpasar Renon (13.546 unit) dan Ubud (8.656 unit).

🔄 Hubungan dengan Pipeline ETL

Ekstraksi & Mencegah Collision PK: ETL membaca tabel penjualan dan detail_penjualan dari db_cabang1, db_cabang2, dan db_cabang3.

Natural key kode_cabang ('CAB02') dipetakan ke surrogate key sk_cabang pada fact_penjualan sehingga ID kasir tidak saling bertubrukan.

💻 Query SQL DWH
SELECT c.nama_cabang, SUM(p.qty) as total_qty, SUM(p.subtotal) as total_penjualan FROM fact_penjualan p JOIN dim_cabang c ON p.sk_cabang = c.sk_cabang GROUP BY c.nama_cabang ORDER BY total_penjualan DESC;
KodeNama CabangTotal KuantitasTotal Penjualan (Rp)Porsi Omset (%)
CAB02MartKita Kuta Legian18.493 unitRp 194.654.600,0045,02%
CAB01MartKita Denpasar Renon13.546 unitRp 145.684.300,0033,69%
CAB03MartKita Ubud8.656 unitRp 92.030.950,0021,29%
Q2 Kategori barang mana yang memberikan kontribusi penjualan terbesar?
Jawaban: Makanan (Rp 204.171.900,00 • 47,22%)
💡 Kenapa Jawabannya Itu? (Akar Penyebab)

Komoditas Sembako Bernilai Nominal Tinggi: Kategori Makanan memuat sembako pokok bernilai perolehan besar seperti Beras Premium 5kg (Rp 69.400) dan Minyak Goreng Bimoli 1L (Rp 20.100).

Kombinasi harga per unit sembako dan perputaran mi instan yang mencapai ribuan unit menjadikan kategori ini mendominasi 47,22% dari seluruh omset ritel.

🔄 Hubungan dengan Pipeline ETL

Denormalisasi Hierarki Kategori: Di database cabang, relasi kategori terpecah ke 3 tabel normal: barang → jenis_barang → kategori_barang.

ETL men-denormalisasi hierarki tersebut dengan menyematkan kode_kategori di dim_barang dan membuat dim_kategori sehingga query analitik sangat cepat tanpa multi-join.

💻 Query SQL DWH
SELECT k.nama_kategori, SUM(p.subtotal) as total_penjualan, ROUND(SUM(p.subtotal)*100.0/(SELECT SUM(subtotal) FROM fact_penjualan), 2) as persentase FROM fact_penjualan p JOIN dim_barang b ON p.sk_barang = b.sk_barang JOIN dim_kategori k ON b.kode_kategori = k.kode_kategori GROUP BY k.nama_kategori ORDER BY total_penjualan DESC;
KodeKategori ProdukTotal KuantitasTotal Penjualan (Rp)Kontribusi Omset (%)
KAT01Makanan15.852 unitRp 204.171.900,0047,22%
KAT02Minuman13.056 unitRp 88.578.400,0020,49%
KAT04Kebutuhan Rumah Tangga3.353 unitRp 51.671.800,0011,95%
KAT05Snack & Permen5.211 unitRp 46.099.350,0010,66%
KAT03Perawatan Pribadi3.223 unitRp 41.848.400,009,68%
Q3 Apa saja 10 produk dengan jumlah penjualan tertinggi?
Top 1: Air Mineral 600ml (2.147 unit)
💡 Kenapa Jawabannya Itu? (Akar Penyebab)

FMCG Konsumsi Spontan (Grab-and-Go): Air Mineral 600ml (2.147 unit), Indomie Goreng (1.944 unit), dan Le Minerale (1.705 unit) adalah produk hidrasi dan konsumsi cepat saji yang esensial di iklim tropis Bali.

Harga per unit yang murah (Rp 3.000 - Rp 3.500) membuat keputusan beli konsumen instan tanpa pertimbangan harga lama.

🔄 Hubungan dengan Pipeline ETL

Integrasi Master Barang: Data transaksi kasir cabang diikat ke tabel dim_barang melalui surrogate key sk_barang.

ETL menyelaraskan kode barang unik ('BRG017', 'BRG001') sehingga kuantitas dari ketiga toko teragregasi secara presisi.

💻 Query SQL DWH
SELECT b.nama_barang, SUM(p.qty) as total_qty_terjual, SUM(p.subtotal) as total_penjualan FROM fact_penjualan p JOIN dim_barang b ON p.sk_barang = b.sk_barang GROUP BY b.nama_barang ORDER BY total_qty_terjual DESC LIMIT 10;
NoKodeNama ProdukKategoriUnit TerjualNilai Penjualan (Rp)
1BRG017Air Mineral 600mlMinuman2.147 unitRp 7.544.500,00
2BRG001Indomie Goreng 85gMakanan1.944 unitRp 5.855.350,00
3BRG003Indomie Kuah Ayam Bawang 69gMakanan1.753 unitRp 5.109.850,00
4BRG019Le Minerale 600mlMinuman1.705 unitRp 5.987.800,00
5BRG002Mie Sedaap Soto 75gMakanan1.556 unitRp 4.534.350,00
6BRG021Teh Botol Sosro 450mlMinuman1.410 unitRp 7.804.400,00
7BRG008Minyak Goreng Bimoli 1LMakanan1.326 unitRp 26.698.400,00
8BRG044Beng-Beng Wafer 32gSnack & Permen1.299 unitRp 3.649.450,00
9BRG018Air Mineral 1500mlMinuman1.295 unitRp 8.493.150,00
10BRG020Coca Cola 390mlMinuman1.274 unitRp 7.692.300,00
Q4 Pada periode atau bulan apa nilai penjualan mencapai tingkat tertinggi?
Jawaban: Januari 2026 (Rp 150.060.450,00 • 34,71%)
💡 Kenapa Jawabannya Itu? (Akar Penyebab)

Puncak Liburan Tahun Baru (High Season Momentum): Januari merupakan puncak arus libur Tahun Baru di Bali. Belanja konsumsi makanan, minuman, dan perlengkapan turis melonjak tajam hingga mencapai Rp 150,06 Juta.

🔄 Hubungan dengan Pipeline ETL

Dimensi Kalender Cerdas: ETL mengekstrak kolom timestamp kasir tgl_penjualan menjadi integer surrogate key sk_waktu = YYYYMMDD.

Atribut bulan, tahun, nama_bulan di dim_waktu memungkinkan agregasi waktu tanpa fungsi konversi string berulang di query.

💻 Query SQL DWH
SELECT w.nama_bulan, w.tahun, SUM(p.subtotal) as total_penjualan FROM fact_penjualan p JOIN dim_waktu w ON p.sk_waktu = w.sk_waktu GROUP BY w.nama_bulan, w.tahun ORDER BY total_penjualan DESC;
TahunBulan KalenderTotal KuantitasTotal Penjualan (Rp)Porsi Omset (%)
2026January (Bulan 1)14.316 unitRp 150.060.450,0034,71%
2026March (Bulan 3)13.553 unitRp 146.946.800,0033,99%
2026February (Bulan 2)12.826 unitRp 135.362.600,0031,31%
Q5 Supplier mana yang memiliki jumlah pasokan barang terbesar?
Jawaban: PT Mitra Minuman Dewata (15.672 unit • 27,86%)
💡 Kenapa Jawabannya Itu? (Akar Penyebab)

Pengiriman Kartonan Volume Cepat: Minuman dalam kemasan memiliki tingkat perputaran (inventory turnover) paling tinggi di minimarket. Pasokan dikirim per dus isi 24-48 botol, sehingga akumulasi unit dari PT Mitra Minuman Dewata menjadi yang terbesar.

Catatan Finansial: Supplier dengan nilai rupiah faktur terbesar adalah CV Berkah Sembako Bali (Rp 159,80 Juta) karena memasok komoditas beras dan minyak goreng.

🔄 Hubungan dengan Pipeline ETL

Standardisasi Faktur Pembelian: ETL mengekstrak data dari barang_masuk dan detail_barang_masuk dari 3 cabang.

ETL menstandarisasi kode supplier ke dim_supplier via sk_supplier dan memuat 454 transaksi pengadaan ke fact_barang_masuk.

💻 Query SQL DWH
SELECT s.nama_supplier, SUM(m.qty) as total_pasokan, SUM(m.subtotal) as total_nilai_pasokan FROM fact_barang_masuk m JOIN dim_supplier s ON m.sk_supplier = s.sk_supplier GROUP BY s.nama_supplier ORDER BY total_pasokan DESC;
KodeNama Supplier RekananTotal Pasokan UnitTotal Nilai Faktur (Rp)Porsi Unit (%)
SUP02PT Mitra Minuman Dewata15.672 unitRp 71.056.200,0027,86%
SUP01PT Sumber Pangan Nusantara13.728 unitRp 76.545.000,0024,41%
SUP03CV Berkah Sembako Bali9.438 unitRp 159.804.600,0016,78%
SUP06PT Camilan Nusantara Jaya8.640 unitRp 65.301.000,0015,36%
SUP05PT Rumah Bersih Sejahtera4.416 unitRp 55.242.000,007,85%
SUP04PT Perawatan Indah Lestari4.356 unitRp 45.073.800,007,74%
Q6 Produk atau barang apa yang memiliki jumlah retur paling tinggi?
Jawaban: Pop Mie Cup 75g & Oreo Vanilla 133g (17 unit)
💡 Kenapa Jawabannya Itu? (Akar Penyebab)

Kerentanan Kemasan Cup & Batas Kedaluwarsa: Pop Mie berwadah cup styrofoam/kertas yang mudah sobek/penyok saat proses bongkar muat dan penataan rak toko.

Oreo Vanilla dan Roti Tawar rentan remuk serta memiliki masa simpan pendek yang segera diretur saat mendekati expired date.

🔄 Hubungan dengan Pipeline ETL

Integrasi Modul Retur: ETL menyaring data dari tabel operasional retur dan barang_retur dengan kondisi 'RUSAK' atau 'KADALUARSA'.

Data dimuat ke fact_retur (131 transaksi retur) terhubung ke dim_barang via sk_barang.

💻 Query SQL DWH
SELECT b.nama_barang, SUM(r.qty) as total_retur, SUM(r.subtotal) as total_nilai_retur FROM fact_retur r JOIN dim_barang b ON r.sk_barang = b.sk_barang GROUP BY b.nama_barang ORDER BY total_retur DESC LIMIT 5;
KodeNama ProdukTotal Retur UnitTotal Nilai Kerugian (Rp)
BRG004Pop Mie Ayam Cup 75g17 unitRp 96.700,00
BRG016Oreo Vanilla 133g17 unitRp 144.150,00
BRG014Roti Tawar Sari Roti13 unitRp 110.300,00
BRG005Beras Premium 5kg12 unitRp 773.900,00
BRG008Minyak Goreng Bimoli 1L12 unitRp 222.250,00
Q7 Cabang mana yang memiliki jumlah retur terbesar?
Jawaban: MartKita Kuta Legian (99 unit • 39,60%)
💡 Kenapa Jawabannya Itu? (Akar Penyebab)

Korelasi Volume Arus Barang: Gerai Kuta Legian mencatat perputaran unit tertinggi. Semakin padat volume bongkar muat dan aktivitas pajang barang di toko, semakin tinggi probabilitas terjadinya kerusakan kemasan.

🔄 Hubungan dengan Pipeline ETL

Pemetaan Multi-Cabang: ETL mengagregasi data retur dari masing-masing database cabang ke fact_retur dan menghubungkannya ke dim_cabang via sk_cabang.

💻 Query SQL DWH
SELECT c.nama_cabang, SUM(r.qty) as total_retur, SUM(r.subtotal) as total_nilai_retur FROM fact_retur r JOIN dim_cabang c ON r.sk_cabang = c.sk_cabang GROUP BY c.nama_cabang ORDER BY total_retur DESC;
KodeNama CabangTotal Retur UnitTotal Nilai Retur (Rp)Porsi Retur Jaringan (%)
CAB02MartKita Kuta Legian99 unitRp 1.056.350,0039,60%
CAB03MartKita Ubud78 unitRp 1.046.850,0031,20%
CAB01MartKita Denpasar Renon73 unitRp 928.350,0029,20%
Q8 Produk atau barang apa yang memiliki selisih stok terbesar antara stok sistem dan stok fisik?
Jawaban: Susu Kental Manis Frisian Flag 370g (11 unit hilang)
💡 Kenapa Jawabannya Itu? (Akar Penyebab)

Dimensi Kaleng Kecil & Risiko Shrinkage: Produk kaleng susu dan botol kecap berukuran padat dan mudah terselip di balik tumpukan rak gudang atau menjadi sasaran pencurian pengunjung (shoplifting).

Stok sistem tercatat 564 unit, namun fisik hanya 553 unit (11 unit minus/hilang).

🔄 Hubungan dengan Pipeline ETL

Kalkulasi Deviasi Audit: ETL mengekstrak data dari stok_opname dan detail_stok_opname. Nilai selisih dihitung sebagai stok_fisik - stok_sistem.

Kueri analitik menggunakan SUM(ABS(selisih)) agar deviasi absolut terhitung secara adil.

💻 Query SQL DWH
SELECT b.nama_barang, SUM(ABS(o.selisih)) as total_selisih_stok, SUM(o.stok_sistem) as total_sistem, SUM(o.stok_fisik) as total_fisik FROM fact_stok_opname o JOIN dim_barang b ON o.sk_barang = b.sk_barang GROUP BY b.nama_barang ORDER BY total_selisih_stok DESC LIMIT 5;
KodeNama ProdukStok SistemStok FisikSelisih AbsolutStatus Audit
BRG027Susu Kental Manis Frisian Flag 370g564 unit553 unit11 unitKurang / Hilang
BRG009Kecap Manis ABC 520ml489 unit481 unit10 unitKurang / Hilang
BRG018Air Mineral 1500ml1.729 unit1.722 unit9 unitKurang / Hilang
BRG034Pewangi So Klin 800ml524 unit523 unit7 unitKurang / Hilang
Q9 Cabang mana yang memiliki tingkat permasalahan atau selisih stok paling tinggi?
Jawaban: MartKita Kuta Legian (56 unit deviasi • 41,79%)
💡 Kenapa Jawabannya Itu? (Akar Penyebab)

Kepadatan Pengunjung & Titik Buta (Blind Spot): Lalu lintas pembeli di Kuta Legian yang sangat padat membuat pengawasan pramuniaga terhadap lorong gerai rentan lengah.

Dari total 56 unit selisih, sebanyak 49 unit berstatus hilang (stok fisik < sistem) dan hanya 7 unit selisih lebih.

🔄 Hubungan dengan Pipeline ETL

Tabel Fakta Stok Opname: ETL mengonsolidasi 396 baris rekonsiliasi inventaris fisik ke fact_stok_opname.

Kueri SQL mengelompokkan berdasarkan dim_cabang via sk_cabang dan memisahkan perhitungan stok kurang dan lebih.

💻 Query SQL DWH
SELECT c.nama_cabang, SUM(ABS(o.selisih)) as total_selisih_unit, SUM(CASE WHEN o.selisih < 0 THEN ABS(o.selisih) ELSE 0 END) as selisih_kurang, SUM(CASE WHEN o.selisih > 0 THEN o.selisih ELSE 0 END) as selisih_lebih FROM fact_stok_opname o JOIN dim_cabang c ON o.sk_cabang = c.sk_cabang GROUP BY c.nama_cabang ORDER BY total_selisih_unit DESC;
KodeNama CabangTotal Selisih UnitStok Kurang / HilangStok LebihPorsi Masalah (%)
CAB02MartKita Kuta Legian56 unit49 unit7 unit41,79%
CAB01MartKita Denpasar Renon49 unit36 unit13 unit36,57%
CAB03MartKita Ubud29 unit20 unit9 unit21,64%
Q10 Produk mana yang menghasilkan nilai gross profit terbesar?
Jawaban: Beras Premium 5kg (Gross Profit Rp 6.397.900,00)
💡 Kenapa Jawabannya Itu? (Akar Penyebab)

Margin Absolut Rupiah Tinggi: Walaupun persentase margin Beras Premium 5kg hanya 10,88% (kalah dibanding Tisu Paseo 21,32% atau Chitato 19,39%), harga jual beras per karung sangat tinggi (Rp 69.400).

Setiap karung menghasilkan laba absolut Rp 7.550. Dikalikan 847 karung terjual, akumulasi rupiah labanya menjadi Rp 6.397.900,00.

🔄 Hubungan dengan Pipeline ETL

Kalkulasi Derived Metric di ETL: Kolom profit tidak ada di database kasir operasional OLTP.

Pipeline Python ETL secara otomatis menghitung metrik turunan ini saat transformasi: gross_profit = (detail_penjualan.harga_jual - barang.harga_beli) * detail_penjualan.qty dan menyimpannya di fact_penjualan.gross_profit.

💻 Query SQL DWH
SELECT b.nama_barang, SUM(p.gross_profit) as total_gross_profit, SUM(p.subtotal) as total_penjualan FROM fact_penjualan p JOIN dim_barang b ON p.sk_barang = b.sk_barang GROUP BY b.nama_barang ORDER BY total_gross_profit DESC LIMIT 5;
NoKodeNama ProdukUnit TerjualTotal Penjualan (Rp)Gross Profit (Rp)Margin (%)
1BRG005Beras Premium 5kg847 unitRp 58.807.700,00Rp 6.397.900,0010,88%
2BRG008Minyak Goreng Bimoli 1L1.326 unitRp 26.698.400,00Rp 3.549.950,0013,30%
3BRG007Gula Pasir 1kg1.242 unitRp 20.660.900,00Rp 3.261.450,0015,79%
4BRG039Chitato Sapi Panggang 68g1.124 unitRp 11.876.900,00Rp 2.303.450,0019,39%
5BRG029Sampo Sunsilk 170ml723 unitRp 13.451.550,00Rp 2.254.100,0016,76%
ERD Diagram Star Schema 10 Pertanyaan Bisnis
17:35
13/10/2026