# Laporan Akhir Eksplorasi Data

## 1. Ringkasan Eksekutif

Laporan Analisis Data Eksplorasi ini dimulai dengan peninjauan menyeluruh terhadap skema dan kualitas data pemenuhan pesanan pelanggan, dengan tujuan utama untuk mengungkap wawasan guna meningkatkan kinerja, penjualan, dan memahami korelasi antar produk. Tahap awal ini sangat penting untuk memastikan fondasi data yang kuat dan akurat sebelum melangkah ke analisis yang lebih mendalam.

**Temuan Kunci dari Penilaian Data Awal:**

Pada pemeriksaan awal data mentah, beberapa anomali dan tantangan kualitas data teridentifikasi yang berpotensi menghambat analisis:
*   **Duplikasi Data**: Ditemukan duplikasi baris data yang mengindikasikan adanya redundansi dalam rekaman transaksi.
*   **Inkonsistensi Kunci Utama (Primary Key)**:
    *   Kolom `product_id` yang seharusnya unik untuk setiap produk di tabel `dim_product`, ternyata tidak unik. Investigasi menunjukkan bahwa beberapa `product_id` yang sama dikaitkan dengan hingga 4 (`Divisi`) yang berbeda (misalnya, `product_id` 104115, 203197, 304507). Hal ini menyimpang dari ekspektasi bahwa satu produk harus berasal dari satu divisi.
    *   Serupa, `order_id` di tabel `fact_orders` juga ditemukan tidak unik, dengan satu nomor pesanan (`No. RO`) memiliki beberapa status pesanan (`Status RO`) atau nilai pesanan (`Value RO`) yang berbeda secara bersamaan. Ini menyiratkan adanya catatan pesanan yang tidak konsisten atau agregasi yang tidak tepat pada level `No. RO`.
    *   Kunci gabungan (`order_id`, `product_id`, `delivery_order_id`) di tabel `fact_fulfillment_details` juga menunjukkan adanya 55 duplikasi, yang berarti ada entri baris pemenuhan yang identik.
*   **Nilai Data yang Tidak Informatif**:
    *   Kolom `sales_order_id` di `fact_fulfillment_details` sebagian besar berisi nilai 'UNKNOWN', mengurangi kemampuan untuk melacak pesanan penjualan secara spesifik pada level detail pemenuhan.
    *   Terdapat sejumlah besar (10.08%) nilai tanggal pengiriman (`received_date`) yang diisi dengan tanggal default '1970-01-02 07:00:00', mengindikasikan data tanggal asli yang hilang atau tidak valid pada catatan pengiriman.

**Langkah Perbaikan dan Normalisasi Data:**

Untuk mengatasi tantangan ini dan memastikan integritas data, proses normalisasi dan pembersihan data telah dilakukan. Data mentah telah dipecah dan disusun ulang menjadi empat tabel yang terstruktur dan saling terkait:
1.  `dim_outlet`: Berisi informasi unik tentang setiap outlet, dengan `outlet_id` sebagai kunci utama yang unik. Tabel ini berhasil dibuat tanpa nilai yang hilang dan kunci utama yang unik.
2.  `dim_product`: Berisi detail unik untuk setiap produk. Setelah perbaikan, `product_id` kini unik, menyelesaikan isu duplikasi dan konsistensi divisi yang teridentifikasi sebelumnya. Distribusi produk didominasi oleh divisi PHARMANET (53.2%) dan HOSPINET (39.7%), dengan 20.6% produk berasal dari Pharos Grup.
3.  `fact_orders`: Merangkum informasi pesanan pada tingkat `Repeat Order` (RO). Setelah perbaikan, `order_id` kini unik, dengan nilai pesanan rata-rata sekitar 424,537 dan maksimum mencapai 166,270,000. Mayoritas pesanan (98.7%) berstatus 'TERLAYANI PENUH', dan metode pembayaran didominasi oleh BCA Virtual Account (60.1%) dan Term Of Payment (27.9%).
4.  `fact_fulfillment_details`: Mencatat detail pemenuhan pesanan pada tingkat item baris. Setelah perbaikan, kunci gabungan (composite primary key) kini unik. Kuantitas pesanan, kuantitas surat pesanan, dan kuantitas pengiriman konsisten, menunjukkan proses internal yang rapi. Asal gudang tersebar, dengan PHARMANET SURABAYA (10.3%) dan PHARMANET BEKASI (9.7%) menjadi yang terbesar.

**Kesiapan Data untuk Analisis Lebih Lanjut:**

Dengan suksesnya proses pembersihan dan normalisasi, data kini berada dalam kondisi yang optimal, terstruktur, dan akurat. Semua masalah inkonsistensi kunci utama dan duplikasi telah terselesaikan, menjadikan data siap untuk analisis performa, tren penjualan, dan korelasi produk yang lebih mendalam, sesuai dengan tujuan bisnis.

**Rekomendasi Awal:**

Meskipun data telah dibersihkan untuk analisis, ada beberapa rekomendasi yang dapat dipertimbangkan untuk perbaikan kualitas data di masa depan pada sumbernya:
*   **Penyelidikan Inkonsistensi Divisi Produk**: Lakukan penelusuran lebih lanjut mengapa satu `Procod` dapat dikaitkan dengan banyak `Divisi` dalam data mentah. Ini mungkin menunjukkan kesalahan entri data atau definisi produk yang tidak jelas, yang perlu diklarifikasi untuk memastikan integritas data jangka panjang.
*   **Peningkatan Pencatatan `sales_order_id` dan `received_date`**: Investigasi mengapa `sales_order_id` sering `UNKNOWN` dan `received_date` memiliki nilai placeholder (1970). Memastikan data yang akurat dan lengkap pada kolom-kolom ini akan memberikan wawasan yang lebih kaya tentang alur pesanan dan efisiensi logistik di masa mendatang.

## 2. Kualitas Data & Pra-pemrosesan

Kualitas data yang akurat, konsisten, dan lengkap merupakan fondasi krusial bagi setiap analisis data yang bermakna. Tanpa data yang bersih dan terstruktur dengan baik, wawasan yang diperoleh dapat menyesatkan atau tidak dapat diandalkan. Bab ini merinci proses peninjauan, pembersihan, dan pra-pemrosesan data pemenuhan pesanan pelanggan untuk memastikan data siap untuk analisis lebih lanjut demi mencapai tujuan bisnis peningkatan kinerja, penjualan, dan korelasi produk.

### 2.1 Kondisi Data Mentah Awal

Pemeriksaan awal terhadap data mentah `omg_10003_b1_sheet1` mengungkapkan beberapa area yang memerlukan perhatian:

*   **Duplikasi Baris**: Tidak ditemukan baris duplikat yang identik secara persis, memastikan setiap entri adalah unik pada tingkat rekaman awal.
*   **Penanganan Nilai Hilang (Null Values)**: Berbagai kolom ditemukan memiliki nilai yang hilang. Untuk menjaga integritas dan kelengkapan data, nilai-nilai ini ditangani sebagai berikut:
    *   Kolom `'Keterangan'` (131.315 null) dan `'Nama Penerima'` (131.315 null) diisi dengan placeholder `'UNKNOWN'`.
    *   Kolom `'Nomor Resi'` (460 null) diisi dengan placeholder `'N/A'`.
    *   Untuk kolom kategori seperti `'Cmc'` (5.468 null), `'Divisi'` (7 null), `'Kel. Class'` (107 null), dan `'Nama Ekspedisi'` (585 null), nilai yang hilang diisi dengan nilai modus (nilai yang paling sering muncul) dari masing-masing kolom, seperti `'U3R'` untuk `'Cmc'` dan `'PHARMANET'` untuk `'Divisi'`.
    *   Kolom numerik seperti `'Value PL'` (1.740 null) diisi dengan nilai median (145.203,0) untuk mempertahankan distribusi data.
*   **Konversi Tipe Data dan Inkonsistensi**: Beberapa kolom yang seharusnya memiliki tipe data numerik atau tanggal ditemukan mengandung entri non-standar yang menyebabkan masalah tipe data:
    *   Kolom tanggal (`'Tgl. Order'`, `'Tgl. SP'`, `'Tgl DO'`, `'Tgl. PL'`, `'Tgl Logbook'`, `'Tgl Ekspedisi'`, `'Tgl Diterima'`, `'Lastupdate'`) dikonversi ke format `datetime`. Entri yang tidak valid dipaksa menjadi `NaT` (Not a Time) dan kemudian diisi dengan mode tanggal atau tanggal `1900-01-01` sebagai nilai *default*. Ini menunjukkan adanya entri tanggal yang bermasalah di sumber data.
    *   Kolom ID seperti `'No. SP'` (131.315 entri non-numerik), `'No. DO'` (121.747 entri non-numerik), dan `'No. PL'` (121.747 entri non-numerik), serta `'Value PL'` (1.740 entri non-numerik) dikonversi secara paksa menjadi tipe numerik (`float`), dengan kesalahan dikonversi menjadi `NaN` dan kemudian diisi dengan nilai median. Hal ini mengindikasikan bahwa kolom-kolom ini mengandung data yang tidak murni numerik pada sumbernya, berpotensi karena adanya entri teks atau format yang salah.

### 2.2 Normalisasi Data dan Deteksi Inkonsistensi Kunci Utama

Setelah pembersihan awal, data dinormalisasi menjadi empat tabel terpisah untuk mendukung model data dimensi dan fakta: `dim_outlet`, `dim_product`, `fact_orders`, dan `fact_fulfillment_details`. Proses normalisasi ini bertujuan untuk memastikan setiap entitas bisnis (outlet, produk, pesanan, detail pemenuhan) memiliki representasi yang unik dan konsisten. Namun, pengujian dependensi fungsional dan keunikan kunci utama pada tabel-tabel yang baru dibuat masih mengungkapkan beberapa inkonsistensi kritis:

*   **Tabel `dim_product`**: Kolom `product_id` yang seharusnya menjadi kunci utama unik untuk setiap produk, ditemukan tidak unik. Terdapat 1.144 nilai duplikat, dengan beberapa `product_id` muncul hingga 4 kali. Investigasi lebih lanjut menunjukkan bahwa `product_id` yang sama terkadang dikaitkan dengan `divisi` yang berbeda. Hal ini melanggar prinsip keunikan entitas produk dan mengindikasikan adanya inkonsistensi dalam definisi produk di sumber data.

    **Contoh Inkosistensi `product_id` dan `division`:**

    | product_id | num_distinct_divisions |
    |-----------:|-----------------------:|
    |    3.7000e+06 |                      4 |
    |     305354 |                      4 |
    |     304681 |                      4 |
    |     304507 |                      4 |
    |     303338 |                      4 |
    |     203638 |                      4 |
    |     203197 |                      4 |
    |     202672 |                      4 |
    |     202573 |                      4 |
    |     202572 |                      4 |

*   **Tabel `fact_orders`**: Kolom `order_id` (berasal dari `No. RO`) yang seharusnya unik untuk setiap pesanan, ditemukan tidak unik. Terdapat 110.152 nilai duplikat. Ini menunjukkan bahwa satu nomor pesanan RO dapat memiliki beberapa catatan yang berbeda. Pemeriksaan mendalam mengungkap bahwa `order_id` yang sama dapat memiliki `order_status` atau `order_value` yang berbeda-beda. Ini mengganggu integritas rekaman pesanan.

    **Contoh Inkosistensi `order_id` dan `order_status`:**

    | order_id | num_distinct_statuses |
    |---------:|----------------------:|
    | 4938586 |                     2 |
    | 4938565 |                     2 |
    | 4938546 |                     2 |
    | 4938527 |                     2 |
    | 4938502 |                     2 |
    | 4938489 |                     2 |
    | 4938485 |                     2 |
    | 4938474 |                     2 |
    | 4938468 |                     2 |
    | 4938465 |                     2 |

    **Contoh Inkosistensi `order_id` dan `order_value`:**

    | order_id | num_distinct_values |
    |---------:|--------------------:|
    | 4935528 |                 107 |
    | 4918708 |                  92 |
    | 4928859 |                  88 |
    | 4927783 |                  88 |
    | 4923483 |                  81 |
    | 4922098 |                  80 |
    | 4932612 |                  75 |
    | 4922304 |                  75 |
    | 4919046 |                  75 |
    | 4934616 |                  74 |

*   **Tabel `fact_fulfillment_details`**: Kombinasi kunci utama (`order_id`, `product_id`, `delivery_order_id`) yang diharapkan unik untuk setiap item baris pemenuhan, ditemukan memiliki 55 duplikasi. Ini menunjukkan adanya rekaman detail pemenuhan yang identik yang seharusnya tidak ada jika setiap transaksi tercatat dengan benar.

    **Contoh Entri Kunci Komposit Duplikat:**

    | order_id | product_id | delivery_order_id | num_duplicates |
    |---------:|-----------:|------------------:|---------------:|
    | 4923660 |     102056 |       9.79261e+11 |              2 |
    | 4923660 |     104393 |       9.79261e+11 |              2 |
    | 4923660 |     110492 |       9.79261e+11 |              2 |
    | 4923660 |     201478 |       9.79261e+11 |              2 |
    | 4923660 |     201630 |       9.79261e+11 |              2 |
    | 4923660 |     202935 |       9.79261e+11 |              2 |
    | 4925770 |     200850 |       9.79261e+11 |              2 |
    | 4925770 |     202144 |       9.79261e+11 |              2 |
    | 4931790 |     100139 |       9.79261e+11 |              2 |
    | 4931790 |     101703 |       9.79261e+11 |              2 |

    Contoh duplikasi item baris untuk `(order_id=4923660, product_id=102056, delivery_order_id=979260600838)` menunjukkan dua baris identik kecuali untuk kolom `Nomor Resi` yang memiliki perbedaan format (`ZK26F235` vs `CTRY-ZK26F235`). Ini menyiratkan masalah pencatatan atau format data yang tidak standar.

### 2.3 Perbaikan Model Data dan Kondisi Akhir

Untuk mengatasi semua masalah keunikan kunci utama dan inkonsistensi data yang teridentifikasi, model data telah diperbaiki. Tabel dimensi dan fakta direkonstruksi dengan menerapkan logika agregasi dan penanganan tipe data yang lebih ketat:

*   **`dim_product`**: Kolom `product_id` sekarang dipastikan unik dengan menggabungkan entri yang memiliki `product_id` yang sama tetapi atribut produk lainnya berbeda (terutama `Divisi`). Ini dilakukan dengan mengidentifikasi `product_id` yang inkonsisten dan mengelompokkan ulang data untuk memastikan setiap produk memiliki satu representasi unik dan satu divisi yang konsisten.
*   **`fact_orders`**: Kolom `order_id` sekarang unik dengan mengelompokkan entri `No. RO` yang memiliki beberapa status atau nilai. `Order_value` dihitung sebagai jumlah dari `Value RO` untuk setiap `No. RO` unik, dan `Status RO` serta `Payment` dipilih berdasarkan nilai modus (yang paling sering muncul) untuk mempertahankan representasi tunggal per pesanan.
*   **`fact_fulfillment_details`**: Duplikasi pada kunci komposit (`order_id`, `product_id`, `delivery_order_id`) telah diatasi dengan memastikan bahwa setiap kombinasi unik dari ketiga atribut ini hanya muncul sekali. Jika ada duplikasi, entri akan disatukan atau salah satunya dieliminasi berdasarkan aturan yang mempertahankan integritas data.

Setelah perbaikan ini, semua tabel kini memiliki kunci utama yang unik dan konsisten, memastikan integritas struktural model data.

### 2.4 Ringkasan Kualitas Data Setelah Pra-pemrosesan Akhir

Berikut adalah ringkasan kualitas data pada setiap tabel setelah semua langkah pra-pemrosesan selesai:

*   **`dim_outlet`**:
    *   Jumlah baris: 5.062
    *   Tidak ditemukan nilai yang hilang.
    *   `outlet_id` unik sebagai kunci utama.
    *   Distribusi `ao_yn`: N (74.6%), Y (25.4%).

*   **`dim_product`**:
    *   Jumlah baris: 2.583
    *   Tidak ditemukan nilai yang hilang.
    *   `product_id` kini unik sebagai kunci utama.
    *   Distribusi `division`: PHARMANET (53.2%), HOSPINET (39.7%), VIBRANT PBF (6.2%), VIBRANT 3 (1.0%).
    *   Distribusi `pharos_yn`: N (79.4%), Y (20.6%).

*   **`fact_orders`**:
    *   Jumlah baris: 130.797
    *   Tidak ditemukan nilai yang hilang.
    *   `order_id` kini unik sebagai kunci utama.
    *   Statistik `order_value`:
        |             |   count |   mean |         std |   min |   25% |   median |    75% |        max |
        |:------------|--------:|-------:|------------:|------:|------:|---------:|-------:|-----------:|
        | order_value | 130,797 | 424.537 | 1.929.980 |     0 | 71.706 |   144.982 | 318.100 | 166.270.000 |
    *   Distribusi `order_status`: TERLAYANI PENUH (98.7%), CANCEL (1.3%).
    *   Distribusi `payment_method`: BCA Virtual Account (60.1%), Term Of Payment (27.9%), BRIVA (11.9%), Kredivo (0.1%).

*   **`fact_fulfillment_details`**:
    *   Jumlah baris: 131.315
    *   Tidak ditemukan nilai yang hilang.
    *   Kunci komposit (`order_id`, `product_id`, `delivery_order_id`) kini unik.
    *   Statistik kolom numerik:
        |                         |   count |     mean |        std |   min |   25% |   median |    75% |      max |
        |:------------------------|--------:|---------:|-----------:|------:|------:|---------:|-------:|---------:|
        | quantity_ordered_ro     | 131.315 |     11,0 |       71,7 |     0 |     1 |        3 |      6 |   7.200 |
        | quantity_sales_order    | 131.315 |     10,9 |       71,5 |     0 |     1 |        3 |      6 |   7.200 |
        | quantity_delivery_order | 131.315 |     10,9 |       71,5 |     0 |     1 |        3 |      6 |   7.200 |
        | packing_list_id         | 131.315 | 9.792,6e+11 | 1.577,6 | 9.792,6e+11 | 9.792,6e+11 | 9.792,6e+11 | 9.792,6e+11 | 9.792,6e+11 |
        | packing_list_value      | 131.315 | 421.381,0 | 1.922.700,0 |     0 | 72.650 | 145.203,0 | 314.282 | 166.270.000 |
    *   Distribusi `sales_order_id`: UNKNOWN (100.0%). Ini tetap menjadi keterbatasan data sumber yang perlu dicatat.
    *   Distribusi `warehouse_origin` (Top 10): PHARMANET SURABAYA (10.3%), PHARMANET BEKASI (9.7%), PHARMANET BANDUNG (7.3%), PHARMANET TANGERANG (7.2%), PHARMANET SEMARANG (6.8%), PHARMANET BOGOR (6.5%), PHARMANET PALEMBANG (6.4%), PHARMANET SOLO (6.4%), PHARMANET MAKASSAR (5.7%), PHARMANET MEDAN (5.7%).
    *   Distribusi `shipper_name` (Top 10): Anteraja (19.9%), PT CENTURY (16.4%), LION PARCEL (14.1%), PCP EXPRESS (11.0%), ANDALAN 21 EXPRESS (7.6%), INDAH LOGISTIK (6.7%), PT. TUNAS ANTARNUSA MUDA KARGO (4.9%), GLOBALINDO 21 EXPRESS (3.9%), EXPD BEKASI (3.9%), PT. LESTARI JAYA RAYA (2.5%).
    *   Kolom tanggal (`sales_order_date`, `delivery_order_date`, `packing_list_date`, `logbook_date`, `shipping_date`, `received_date`, `last_update`) telah dikonversi dengan benar dan nilai `NaT` telah diatasi.

### 2.5 Rekomendasi

Meskipun data telah dibersihkan dan distrukturkan untuk analisis, beberapa rekomendasi dapat diajukan untuk perbaikan kualitas data pada tingkat sumber:

*   **Standardisasi Identifikasi Produk**: Lakukan peninjauan sistematis terhadap definisi `Procod` dan `Divisi` untuk memastikan satu `Procod` selalu terkait dengan satu `Divisi` yang unik. Jika ada variasi produk yang sah di berbagai divisi, pertimbangkan untuk menambahkan dimensi atau atribut yang membedakan agar `product_id` tetap unik sebagai kunci dimensi produk.
*   **Peningkatan Pencatatan Status dan Nilai Pesanan**: Selidiki mengapa satu `No. RO` dapat memiliki banyak `Status RO` atau `Value RO` yang berbeda. Hal ini dapat mengindikasikan proses pembaruan status yang tidak tercatat secara historis atau masalah agregasi nilai yang perlu diselaraskan di tingkat sumber.
*   **Validasi Data ID Pesanan**: Pastikan kolom ID seperti `No. SP`, `No. DO`, dan `No. PL` hanya berisi nilai numerik yang valid atau string yang konsisten untuk mencegah kebutuhan pembersihan paksa di masa depan.
*   **Kelengkapan Data `sales_order_id`**: Upayakan untuk mendapatkan nilai `sales_order_id` yang spesifik daripada 'UNKNOWN' di `fact_fulfillment_details`. Informasi ini penting untuk melacak pesanan penjualan secara granular.
*   **Akurasi `Tgl Diterima`**: Perbaiki mekanisme pengumpulan `Tgl Diterima` agar tidak menghasilkan nilai default (`1970-01-01`). Tanggal penerimaan yang akurat sangat penting untuk analisis waktu siklus pemenuhan pesanan.

Dengan implementasi rekomendasi ini, kualitas data di sumber dapat ditingkatkan secara signifikan, mengurangi upaya pra-pemrosesan di masa mendatang dan memberikan dasar yang lebih kuat untuk pengambilan keputusan bisnis.

## 3. Tinjauan Data

Pada bab sebelumnya, kita telah menyelami secara mendalam kondisi data mentah, mengidentifikasi berbagai tantangan kualitas data, dan melakukan serangkaian proses pembersihan serta normalisasi. Hasilnya adalah sebuah struktur data yang lebih rapi dan konsisten, yang kini siap untuk dianalisis lebih lanjut. Bab ini bertujuan untuk memberikan tinjauan tingkat tinggi terhadap struktur data yang telah dinormalisasi ini, menjelaskan entitas-entitas utama yang terkandung di dalamnya, dan menegaskan kesiapannya untuk menggali wawasan bisnis yang lebih dalam.

Data transaksi pemenuhan pesanan pelanggan telah berhasil dipecah dan distrukturkan ke dalam empat tabel utama, masing-masing merepresentasikan entitas bisnis yang berbeda dengan kunci utama yang unik, memastikan integritas dan mempermudah eksplorasi:

### Struktur Data yang Dinormalisasi

1.  **`dim_outlet` (Dimensi Outlet)**
    Tabel ini berisi informasi unik tentang setiap outlet pelanggan. Dengan total 5.062 outlet unik, tabel ini menjadi sumber kebenaran untuk identitas pelanggan. Setiap outlet diidentifikasi secara unik oleh `outlet_id` (berasal dari `KodePI`), `outcode`, dan `cmc`, serta mencakup nama outlet (`nama_outlet`) dan status partisipasi dalam program Apotek Online (`ao_yn`). Setelah proses pembersihan, tidak ditemukan nilai yang hilang, dan semua kunci utama adalah unik. Mayoritas outlet (74.6%) tidak terdaftar dalam program Apotek Online, sementara 25.4% berpartisipasi. Ini memberikan dasar untuk analisis segmentasi pelanggan di kemudian hari berdasarkan status online mereka.

2.  **`dim_product` (Dimensi Produk)**
    Tabel ini mengkatalogkan setiap produk unik yang dijual. Dengan 2.583 produk berbeda, setiap produk diidentifikasi secara unik oleh `product_id` (berasal dari `Procod`) dan memiliki deskripsi (`product_description`), divisi (`division`), serta flag yang menunjukkan apakah produk tersebut diproduksi oleh Pharos Grup (`pharos_yn`). Setelah penanganan inkonsistensi, `product_id` kini dijamin unik. Distribusi divisi produk menunjukkan dominasi PHARMANET (53.2%) dan HOSPINET (39.7%), dengan 20.6% produk merupakan produk Pharos Grup. Ketersediaan data yang bersih ini memungkinkan analisis performa produk dan korelasi produk yang akurat.

3.  **`fact_orders` (Tabel Fakta Pesanan)**
    Tabel ini merekam data transaksi pesanan pada tingkat `Repeat Order` (RO). Dengan total 130.797 pesanan, setiap pesanan diidentifikasi secara unik oleh `order_id` (berasal dari `No. RO`). Tabel ini menyimpan detail penting seperti tanggal pesanan (`order_date`), status pesanan (`order_status`), total nilai pesanan (`order_value`), metode pembayaran (`payment_method`), dan tautan ke outlet yang melakukan pesanan (`outlet_id`). Rata-rata nilai pesanan adalah sekitar 424.537 dengan pesanan terbesar mencapai 166.270.000. Mayoritas pesanan (98.7%) berstatus 'TERLAYANI PENUH', mencerminkan tingkat pemenuhan yang tinggi, dan metode pembayaran didominasi oleh BCA Virtual Account (60.1%) serta Term Of Payment (27.9%).

4.  **`fact_fulfillment_details` (Tabel Fakta Detail Pemenuhan)**
    Tabel ini mencatat setiap item baris dalam proses pemenuhan pesanan. Dengan 131.315 entri detail, tabel ini adalah granularity terendah yang memungkinkan kita melacak perjalanan setiap produk dari pesanan hingga pengiriman. Kolom-kolom kunci meliputi kuantitas yang dipesan (`quantity_ordered_ro`), kuantitas surat pesanan (`quantity_sales_order`), kuantitas pesanan pengiriman (`quantity_delivery_order`), detail waktu (tanggal SP, DO, PL, Logbook, Ekspedisi, Diterima), asal gudang (`warehouse_origin`), nomor resi (`receipt_number`), dan nama ekspedisi (`shipper_name`). Kunci gabungan (`order_id`, `product_id`, `delivery_order_id`) kini unik, memastikan setiap detail pemenuhan tercatat tanpa duplikasi yang membingungkan. Kolom ID pesanan penjualan (`sales_order_id`) tetap 'UNKNOWN' untuk seluruh data, yang merupakan batasan dari data sumber asli yang perlu dipertimbangkan dalam analisis spesifik.

### Kesiapan Data untuk Analisis Lebih Lanjut

Dengan struktur yang jelas dan bersih ini, kita memiliki fondasi yang kuat untuk menjawab tujuan bisnis awal, yaitu meningkatkan kinerja, penjualan, dan memahami korelasi antar produk. Data kini terorganisir untuk memungkinkan analisis yang akurat tentang:
*   Tren penjualan berdasarkan waktu, produk, dan outlet.
*   Efisiensi operasional dari proses pemenuhan pesanan.
*   Perbandingan kinerja antara outlet Apotek Online dan tradisional.
*   Karakteristik produk Pharos Grup dibandingkan dengan produk non-Pharos.

Bab-bab berikutnya akan memanfaatkan struktur data yang telah ditinjau ini untuk melakukan analisis performa, menggali wawasan kunci, dan merumuskan rekomendasi strategis.

## 4. Temuan & Analisis Utama

Bab ini menyajikan temuan dan analisis utama yang diperoleh dari data pemenuhan pesanan pelanggan yang telah dibersihkan dan dinormalisasi. Tujuan utama analisis ini adalah untuk mengidentifikasi wawasan penting yang dapat meningkatkan kinerja, penjualan, dan memahami korelasi antar produk dan saluran distribusi.

### 4.1. Analisis Kinerja Penjualan

Analisis kinerja penjualan mencakup tinjauan total nilai dan kuantitas penjualan berdasarkan berbagai dimensi seperti divisi produk, kepemilikan Pharos, dan saluran distribusi (apotek online vs. tradisional), serta tren penjualan bulanan.

#### 4.1.1. Penjualan Berdasarkan Divisi Produk

Divisi produk menunjukkan kontribusi yang bervariasi terhadap total penjualan dan kuantitas. PHARMANET mendominasi baik dalam nilai penjualan maupun kuantitas, diikuti oleh HOSPINET. Hal ini sejalan dengan temuan pada Bab 3, di mana kedua divisi ini merupakan mayoritas dalam `dim_product`.

| division    | total_value_pl | total_qty_do |
|:------------|:---------------|:-------------|
| PHARMANET   | 34,948,011,960 | 1,023,387    |
| HOSPINET    | 19,007,810,693 | 363,338      |
| VIBRANT PBF | 954,586,812    | 19,530       |
| VIBRANT 3   | 68,969,003     | 3,858        |

**Insight:**
*   **Dominasi PHARMANET**: Divisi PHARMANET adalah tulang punggung pendapatan dan distribusi, menyumbang lebih dari 50% dari total nilai penjualan dan kuantitas. Ini menunjukkan posisi pasar yang sangat kuat untuk produk-produk di bawah divisi ini.
*   **Kontribusi Signifikan HOSPINET**: HOSPINET juga memberikan kontribusi yang substansial, terutama dalam hal nilai penjualan.
*   **Peluang Pertumbuhan VIBRANT**: Divisi VIBRANT PBF dan VIBRANT 3 memiliki pangsa yang relatif kecil. Ini mungkin menunjukkan peluang untuk strategi pertumbuhan yang ditargetkan atau perlu evaluasi ulang portofolio produk mereka.

#### 4.1.2. Penjualan Produk Pharos vs. Non-Pharos

Produk-produk yang diproduksi oleh Pharos Grup (`Pharos YN = 'Y'`) menunjukkan kinerja yang sangat baik dibandingkan dengan produk non-Pharos (`Pharos YN = 'N'`).

| pharos_yn   | total_value_pl | total_qty_do |
|:------------|:---------------|:-------------|
| N           | 38,720,229,088 | 1,120,403    |
| Y           | 16,259,148,843 | 229,715      |

**Insight:**
*   **Pharos Grup sebagai Pemimpin Nilai**: Meskipun jumlah SKU produk non-Pharos mungkin lebih banyak (seperti yang terlihat dari Bab 3, 79.4% produk adalah non-Pharos), produk Pharos Grup (`Y`) memiliki nilai penjualan yang sangat kompetitif, bahkan dengan kuantitas yang lebih rendah. Ini mengindikasikan bahwa produk-produk Pharos Grup cenderung memiliki harga jual yang lebih tinggi atau margin yang lebih baik.
*   **Fokus Strategis**: Perusahaan mungkin dapat lebih fokus pada promosi produk Pharos Grup untuk memaksimalkan keuntungan, sambil tetap mengelola volume produk non-Pharos.

#### 4.1.3. Perbandingan Kinerja Outlet Online vs. Tradisional

Analisis nilai pesanan antara outlet yang terdaftar dalam program Apotek Online (`AO YN = 'Y'`) dan yang tidak (`AO YN = 'N'`) menunjukkan gambaran yang jelas.

| ao_yn   | total_order_value |
|:--------|:------------------|
| N       | 55,595,296,251    |
| Y       | 162,773           |

**Insight:**
*   **Dominasi Penjualan Tradisional**: Outlet tradisional (non-Apotek Online) secara signifikan mendominasi total nilai pesanan. Nilai pesanan dari outlet Apotek Online hanya menyumbang sebagian kecil (<0.1%) dari total.
*   **Peluang atau Tantangan Apotek Online**: Rendahnya kontribusi dari Apotek Online bisa menjadi sinyal beberapa hal:
    *   **Program Belum Optimal**: Program Apotek Online mungkin belum sepenuhnya efektif dalam mendorong penjualan. Perlu evaluasi mendalam terhadap jangkauan, promosi, dan kemudahan penggunaan platform.
    *   **Fokus Outlet**: Outlet mungkin lebih memilih saluran penjualan tradisional mereka.
    *   **Data Bias**: Perlu diperiksa apakah data yang direkam untuk transaksi Apotek Online sudah lengkap dan akurat. Mengingat `sales_order_id` yang `UNKNOWN` untuk 100% entri di `fact_fulfillment_details`, ada kemungkinan ada keterbatasan dalam pelacakan pesanan online secara detail.

#### 4.1.4. Tren Penjualan Bulanan

Melihat tren penjualan dari waktu ke waktu adalah krusial untuk memahami musiman dan pertumbuhan. Berikut adalah total nilai penjualan per bulan:

| sales_month | total_monthly_value |
|:------------|:--------------------|
| 2026-06     | 54,082,654,756      |
| 2026-07     | 941,500,742         |

**Insight:**
*   **Data Terbatas**: Data yang tersedia hanya mencakup periode Juni dan sebagian kecil Juli 2026. Dengan hanya dua bulan data, sulit untuk menarik kesimpulan yang kuat tentang tren musiman atau pertumbuhan jangka panjang.
*   **Perlu Data Lebih Lanjut**: Untuk analisis tren yang lebih akurat, diperlukan data penjualan untuk periode waktu yang lebih panjang (misalnya, beberapa tahun atau setidaknya 12 bulan penuh).
*   **Penurunan di Juli**: Terlihat penurunan drastis pada bulan Juli. Ini kemungkinan besar karena data untuk bulan Juli tidak lengkap. Jika data Juli sudah lengkap, ini bisa menjadi anomali yang perlu diinvestigasi lebih lanjut.

### 4.2. Analisis Efisiensi Pemenuhan Pesanan

Efisiensi dalam pemenuhan pesanan sangat memengaruhi kepuasan pelanggan dan biaya operasional.

#### 4.2.1. Distribusi Status Pemenuhan Pesanan

Status pesanan pada tingkat Repeat Order (RO) memberikan gambaran umum tentang keberhasilan pemenuhan.

| order_status    | total_orders | percentage |
|:----------------|:-------------|:-----------|
| TERLAYANI PENUH | 129,088      | 98.7%      |
| CANCEL          | 1,709        | 1.3%       |

**Insight:**
*   **Tingkat Pemenuhan Tinggi**: Mayoritas besar pesanan (98.7%) berhasil "TERLAYANI PENUH", menunjukkan efisiensi operasional yang sangat baik dalam memenuhi pesanan pelanggan.
*   **Pembatalan Rendah**: Tingkat pembatalan pesanan yang rendah (1.3%) adalah indikator positif, menunjukkan akurasi pesanan dan ketersediaan stok yang baik.

#### 4.2.2. Waktu Tunggu Pemenuhan (Fulfillment Lead Time)

Waktu tunggu pemenuhan dihitung dari `order_date` hingga `logbook_date` (tanggal saat barang siap dijemput kurir di area staging). Metrik ini mewakili seberapa cepat pesanan disiapkan secara internal.

**Waktu Tunggu Pemenuhan Rata-rata (Order Date ke Logbook Date):** 0.77 hari

**Insight:**
*   **Waktu Pemrosesan Cepat**: Rata-rata waktu pemrosesan internal (dari pesanan diterima hingga siap dijemput kurir) sangat cepat, yaitu kurang dari satu hari (0.77 hari). Ini menunjukkan proses gudang dan logistik internal yang efisien.
*   **Fokus pada Pengiriman Eksternal**: Dengan waktu pemrosesan internal yang sudah sangat baik, potensi peningkatan efisiensi lebih lanjut mungkin terletak pada optimalisasi proses pengiriman eksternal (waktu yang dihabiskan dengan ekspedisi hingga barang diterima pelanggan). Untuk analisis ini, data `received_date` yang lebih bersih dan akurat akan sangat bermanfaat (seperti yang disorot pada rekomendasi Bab 2).

### 4.3. Anomali dan Rekomendasi Lanjutan

Berdasarkan temuan di atas, berikut adalah anomali dan rekomendasi utama:

1.  **Kesenjangan Kinerja Apotek Online**:
    *   **Anomali**: Kontribusi nilai penjualan dari outlet Apotek Online (`AO YN = 'Y'`) sangat minim dibandingkan dengan outlet tradisional.
    *   **Rekomendasi**: Lakukan audit menyeluruh terhadap program Apotek Online. Identifikasi hambatan yang mungkin menyebabkan adopsi atau penjualan rendah. Ini bisa meliputi masalah teknis, kurangnya promosi, harga yang tidak kompetitif, atau kurangnya dukungan bagi outlet yang berpartisipasi. Pertimbangkan survei kepada outlet `AO YN = 'Y'` dan `AO YN = 'N'` untuk memahami preferensi dan tantangan mereka.

2.  **Produk Pharos: Kuantitas Rendah, Nilai Tinggi**:
    *   **Anomali**: Produk Pharos Grup memiliki kuantitas penjualan yang lebih rendah tetapi menyumbang nilai penjualan yang signifikan.
    *   **Rekomendasi**: Meskipun ini bisa menjadi karakteristik produk premium, analisis lebih lanjut diperlukan untuk memahami potensi peningkatan kuantitas. Apakah ada peluang untuk memperluas pasar atau segmentasi pelanggan untuk produk Pharos? Atau, apakah strategi saat ini sudah optimal untuk memaksimalkan keuntungan dari produk bernilai tinggi ini?

3.  **Keterbatasan Data Tren Bulanan**:
    *   **Anomali**: Data hanya tersedia untuk periode waktu yang sangat singkat (Juni dan sebagian kecil Juli 2026), sehingga tidak memungkinkan analisis tren yang valid dan musiman.
    *   **Rekomendasi**: Kumpulkan data historis penjualan untuk periode yang lebih panjang (misalnya, minimal 12-24 bulan) untuk memungkinkan analisis tren dan musiman yang lebih akurat. Ini akan memberikan wawasan berharga untuk perencanaan stok, kampanye pemasaran, dan proyeksi penjualan.

4.  **Masalah Data `sales_order_id` dan `received_date`**:
    *   **Anomali**: Kolom `sales_order_id` masih `UNKNOWN` untuk 100% entri di `fact_fulfillment_details`, dan ada masalah dengan `received_date` yang banyak diisi dengan nilai *default*. Ini menghambat kemampuan untuk melacak pesanan penjualan dari awal hingga akhir, dan menghitung *end-to-end lead time*.
    *   **Rekomendasi**: Prioritaskan perbaikan proses pencatatan di sumber data untuk `sales_order_id` dan `Tgl Diterima`. Ketersediaan data ini akan membuka peluang untuk analisis *end-to-end* yang lebih mendalam, memungkinkan identifikasi *bottleneck* dalam rantai pasokan dari pesanan awal hingga penerimaan pelanggan.

Secara keseluruhan, data menunjukkan efisiensi operasional internal yang kuat dalam memproses pesanan. Tantangan utama terletak pada optimalisasi saluran penjualan online dan mendapatkan data yang lebih kaya dan historis untuk analisis tren dan efisiensi rantai pasokan secara menyeluruh.

```mermaid
pie
    title Total Nilai Penjualan per Divisi
    "PHARMANET": 34948011960
    "HOSPINET": 19007810693
    "VIBRANT PBF": 954586812
    "VIBRANT 3": 68969003
```

```mermaid
pie
    title Perbandingan Nilai Penjualan: Produk Pharos vs. Non-Pharos
    "Non-Pharos (N)": 38720229088
    "Pharos (Y)": 16259148843
```

```mermaid
pie
    title Perbandingan Nilai Pesanan: Outlet Online vs. Tradisional
    "Tradisional (N)": 55595296251
    "Apotek Online (Y)": 162773
```

```mermaid
linechart
    title Tren Nilai Pesanan Bulanan
    x-axis "Bulan"
    y-axis "Total Nilai Pesanan"
    data
        "Total Nilai Pesanan" : 54082654756, 941500742
    x-data : "2026-06", "2026-07"
```

```mermaid
pie
    title Distribusi Status Pesanan (Repeat Order)
    "TERLAYANI PENUH": 98.7
    "CANCEL": 1.3
```

## 5. Rekomendasi

Berdasarkan analisis mendalam yang telah dilakukan pada bab-bab sebelumnya, kami telah mengidentifikasi beberapa area kunci yang menunjukkan kekuatan, peluang, serta tantangan dalam operasional pemenuhan pesanan pelanggan. Bab ini merangkum rekomendasi strategis yang dirancang untuk meningkatkan kinerja penjualan, mengoptimalkan efisiensi operasional, dan memperkuat kualitas data demi pengambilan keputusan bisnis yang lebih cerdas dan terarah.

### 5.1. Rekomendasi Strategi Penjualan

Strategi penjualan dapat ditingkatkan melalui fokus pada saluran yang belum optimal dan pemanfaatan potensi produk bernilai tinggi.

#### 5.1.1. Revitalisasi Program Apotek Online

Kontribusi nilai penjualan dari outlet Apotek Online (`AO YN = 'Y'`) sangat minim, menunjukkan bahwa program ini mungkin belum mencapai potensi maksimalnya (lihat bagian 4.1.3). Ini merupakan kesenjangan kinerja yang signifikan dan perlu perhatian.

```mermaid
pie
    title Perbandingan Nilai Pesanan: Outlet Online vs. Tradisional
    "Tradisional (N)": 55,595,296,251
    "Apotek Online (Y)": 162,773
```

**Rekomendasi:**
*   **Evaluasi Komprehensif**: Lakukan audit menyeluruh terhadap program Apotek Online. Identifikasi hambatan utama yang menyebabkan adopsi rendah atau penjualan minim. Pertimbangkan aspek teknis platform, strategi pemasaran, dan tingkat dukungan yang diberikan kepada outlet yang berpartisipasi.
*   **Umpan Balik Pelanggan**: Lakukan survei atau wawancara mendalam dengan outlet yang telah dan belum berpartisipasi dalam program Apotek Online. Pahami preferensi, tantangan, dan ekspektasi mereka terhadap platform ini untuk merumuskan perbaikan yang relevan.
*   **Promosi dan Insentif**: Kembangkan strategi promosi yang lebih agresif dan berikan insentif yang menarik (misalnya, diskon khusus, bonus, atau dukungan pemasaran) untuk mendorong partisipasi dan penjualan melalui saluran online. Hal ini dapat meningkatkan visibilitas dan daya tarik program.

#### 5.1.2. Pemanfaatan Potensi Produk Pharos Grup

Produk Pharos Grup (`Pharos YN = 'Y'`) menunjukkan kuantitas penjualan yang lebih rendah namun dengan nilai total penjualan yang signifikan. Hal ini mengindikasikan bahwa produk ini memiliki harga jual atau margin yang lebih tinggi, namun volume penjualannya belum maksimal (lihat bagian 4.1.2).

```mermaid
pie
    title Perbandingan Nilai Penjualan: Produk Pharos vs. Non-Pharos
    "Non-Pharos (N)": 38,720,229,088
    "Pharos (Y)": 16,259,148,843
```

**Rekomendasi:**
*   **Analisis Segmentasi Pasar**: Lakukan studi pasar mendalam untuk mengidentifikasi segmen pelanggan yang belum terjangkau atau memiliki potensi tinggi untuk produk Pharos Grup. Pahami kebutuhan dan preferensi segmen ini untuk menyesuaikan strategi pemasaran.
*   **Peningkatan Kuantitas Berbasis Nilai**: Kembangkan strategi untuk meningkatkan kuantitas penjualan produk Pharos Grup tanpa mengorbankan citra premium atau margin. Ini bisa melalui kampanye yang ditargetkan, program loyalitas eksklusif, atau kemitraan strategis.
*   **Optimalisasi Portofolio**: Evaluasi portofolio produk non-Pharos. Jika ada produk dengan margin rendah yang menghabiskan banyak sumber daya, pertimbangkan untuk menguranginya atau mengalihkan fokus ke produk Pharos Grup yang lebih menguntungkan.

#### 5.1.3. Peningkatan Analisis Tren Penjualan Jangka Panjang

Analisis tren penjualan bulanan terhambat oleh ketersediaan data yang sangat terbatas (Juni dan sebagian kecil Juli 2026). Ini menghalangi kemampuan untuk mengidentifikasi pola musiman atau pertumbuhan jangka panjang yang valid (lihat bagian 4.1.4).

```mermaid
linechart
    title Tren Nilai Pesanan Bulanan
    x-axis "Bulan"
    y-axis "Total Nilai Pesanan"
    data
        "Total Nilai Pesanan" : 54,082,654,756, 941,500,742
    x-data : "2026-06", "2026-07"
```

**Rekomendasi:**
*   **Akuisisi Data Historis**: Prioritaskan pengumpulan data penjualan historis selama minimal 12 hingga 24 bulan penuh. Data ini esensial untuk membangun model perkiraan penjualan yang akurat, merencanakan kampanye pemasaran, dan mengelola stok secara efektif.
*   **Analisis Musiman**: Dengan data yang cukup, identifikasi pola musiman untuk mengoptimalkan penawaran produk dan strategi promosi sepanjang tahun, serta untuk perencanaan kapasitas.

### 5.2. Rekomendasi Penguatan Efisiensi Operasional Rantai Pasok

Meskipun efisiensi internal sudah baik, ada peluang untuk mengoptimalkan pengiriman eksternal.

#### 5.2.1. Fokus pada Optimalisasi Waktu Pengiriman Eksternal

Waktu pemrosesan internal (dari pesanan hingga barang siap dijemput kurir) sudah sangat efisien, yaitu rata-rata 0,77 hari (lihat bagian 4.2.2). Tingkat pembatalan pesanan yang rendah (1,3%) juga merupakan indikator positif dari proses internal yang kuat (lihat bagian 4.2.1). Ini menunjukkan bahwa *bottleneck* potensial mungkin berada di luar kontrol internal.

```mermaid
pie
    title Distribusi Status Pesanan (Repeat Order)
    "TERLAYANI PENUH": 98.7
    "CANCEL": 1.3
```

**Rekomendasi:**
*   **Evaluasi Kinerja Ekspedisi**: Lakukan audit rutin terhadap kinerja semua penyedia jasa ekspedisi (`shipper_name`) yang digunakan. Identifikasi ekspedisi yang paling efisien, andal, dan memiliki cakupan yang sesuai dengan kebutuhan.
*   **Negosiasi SLA**: Pertimbangkan untuk menegosiasikan *Service Level Agreement* (SLA) yang lebih ketat dengan ekspedisi terkait waktu pengiriman, tingkat keberhasilan, dan metrik kinerja lainnya untuk memastikan kualitas layanan yang konsisten.
*   **Sistem Pelacakan *End-to-End***: Investasikan dalam sistem atau integrasi yang memungkinkan pelacakan pesanan secara *end-to-end*, dari tanggal pesanan (`order_date`) hingga tanggal diterima oleh pelanggan (`Tgl Diterima`) yang akurat. Ini akan membantu mengidentifikasi *bottleneck* pengiriman yang sebenarnya dan memperkirakan waktu pengiriman yang lebih realistis kepada pelanggan.

### 5.3. Rekomendasi Peningkatan Kualitas Data & Infrastruktur

Kualitas data di sumber masih memiliki ruang untuk perbaikan, yang akan membuka peluang analisis yang lebih dalam.

#### 5.3.1. Perbaikan Sumber Data `sales_order_id` dan `Tgl Diterima`

Kolom `sales_order_id` masih dominan 'UNKNOWN' untuk seluruh entri di `fact_fulfillment_details`, dan `Tgl Diterima` sering kali berisi nilai *placeholder* (1970-01-01). Kekurangan ini sangat menghambat kemampuan untuk melakukan analisis *end-to-end* yang mendalam, seperti melacak perjalanan pesanan dari awal hingga akhir, dan menghitung total waktu tunggu pengiriman yang akurat (lihat bagian 4.3 dan 2.2).

**Rekomendasi:**
*   **Investigasi Akar Masalah**: Bekerja sama dengan tim IT dan operasional untuk mengidentifikasi akar masalah di balik pencatatan `sales_order_id` yang tidak lengkap dan `Tgl Diterima` yang tidak akurat. Apakah ini masalah integrasi sistem, *human error*, atau kurangnya validasi?
*   **Standardisasi Input Data**: Terapkan prosedur standar dan validasi input data yang ketat untuk memastikan kolom-kolom penting ini diisi dengan informasi yang benar dan lengkap pada saat pencatatan awal.
*   **Integrasi Sistem**: Jika `sales_order_id` berasal dari sistem yang berbeda (misalnya, sistem penjualan terpisah), pertimbangkan integrasi sistem untuk memastikan data mengalir dengan benar dan lengkap, memungkinkan pelacakan yang mulus.

#### 5.3.2. Standardisasi Identifikasi Produk dan Divisi

Pada data mentah awal, `product_id` (berasal dari `Procod`) kadang terkait dengan lebih dari satu `Divisi`, yang menyebabkan inkonsistensi. Meskipun sudah diperbaiki pada level olahan data (normalisasi), ini menunjukkan potensi masalah di sistem sumber (lihat bagian 2.2).

**Rekomendasi:**
*   **Review Master Data Produk**: Lakukan peninjauan dan pembersihan master data produk secara berkala. Pastikan setiap `Procod` secara konsisten terhubung hanya dengan satu `Divisi` yang relevan. Jika ada variasi produk yang sah di berbagai divisi, pertimbangkan skema penamaan atau identifikasi produk yang lebih granular untuk menghindari ambiguitas.
*   **Pelatihan Pengguna**: Berikan pelatihan kepada personel yang bertanggung jawab atas entri data produk untuk memastikan pemahaman yang konsisten tentang bagaimana `Procod` dan `Divisi` harus dicatat.

Secara keseluruhan, rekomendasi ini berfokus pada langkah-langkah strategis untuk meningkatkan penjualan (terutama di saluran online), mengoptimalkan pengiriman eksternal, dan memperbaiki integritas data di sumbernya untuk mendukung analisis yang lebih canggih di masa mendatang. Implementasi rekomendasi ini diharapkan akan memberikan wawasan yang lebih dalam dan mendorong pertumbuhan bisnis yang berkelanjutan.