Python PySpark & Python
DuckDB DuckDB & SQL
Tableau Tableau / Power BI

Building an End-to-End Unified Data Platform (UDP) Using Medallion Architecture & DuckDB: PT. Aneka Sport Case Study

Unified Data Platform Medallion Architecture
Peran & Spesialisasi Lead Data Engineer & Analyst
Skala Penjualan & Persediaan Rp 100,62 Miliar & Rp 80,25 Miliar
Arsitektur & Database Medallion, PySpark & DuckDB

Ringkasan Eksekutif

Dalam studi kasus untuk PT. Aneka Sport—distributor resmi merek olahraga terkemuka Indonesia SPECS, serta MIZUNO dan PIERO—saya merancang dan membangun Unified Data Platform (UDP) dari nol menggunakan Medallion Architecture, PySpark, dan DuckDB. Platform ini berhasil mengintegrasikan data ERP dan CRM yang terfragmentasi menjadi satu sumber kebenaran tunggal (Single Version of Truth), memetakan omset tahun 2017 sebesar Rp 100,62 Miliar dengan laba kotor 57,58%, mengelola persediaan senilai Rp 80,25 Miliar di 17 gudang aktif, serta mendeteksi 5.420 unit dead stock berisiko tinggi untuk penyelamatan arus kas perusahaan.

Latar Belakang & Tantangan Bisnis

PT. Aneka Sport beroperasi di pasar olahraga Asia Tenggara melalui dua divisi utama: Divisi Wholesale yang menjangkau jaringan distributor tradisional di seluruh nusantara, serta Divisi Retail yang berfokus pada pasar modern di pusat perbelanjaan (sebagai entitas independen PT. Prestasi Retail Innovation).

Seiring pesatnya volume transaksi di kedua divisi tersebut, infrastruktur data perusahaan menghadapi tiga hambatan operasional utama:

Blueprint Arsitektur Data (Medallion & DuckDB)

Untuk membangun sistem yang skalabel dan menghilangkan silau data, saya mengadopsi Medallion Architecture yang membagi alur pemrosesan menjadi empat lapisan terstruktur:

  • 0 0_Logs (.json): Sistem pemantauan otomatis (runtime logging) untuk merekam durasi eksekusi, status proses, serta pelacakan silsilah data (data lineage).
  • 1 1_Bronze (.txt): Area penyimpanan mentah (immutable staging) yang menampung 5 tabel master (customer, product, location, territory, salesman) dan 4 tabel transaksi utama.
  • 2 2_Silver (.parquet): Lapisan jaminan kualitas data (Data Quality Assurance) menggunakan PySpark untuk pembersihan duplikasi, perbaikan format tanggal, imputasi otomatis, dan enkripsi PII.
  • 3 3_Gold (.parquet): Pemodelan Star Schema (2 Fact & 6 Dimension Tables) menggunakan Surrogate Key integer dan strategi Unknown Member untuk menjamin jangkauan data 100%.
  • 4 4_DataMart (.csv): Agregasi tematik teroptimasi yang siap dihubungkan ke Tableau / Power BI dengan waktu muat instan tanpa latensi komputasi.

Eksekusi Teknis: Pembersihan Data di Silver Layer

Pada lapisan Silver, fokus pemrosesan diarahkan untuk membersihkan anomali agar data analitik bernilai akurat dan aman:

A. De-duplikasi & Keamanan Enkripsi PII

Pemeriksaan duplikasi berhasil mengeliminasi 418 baris duplikat identik pada detail faktur (59.234 → 58.816 baris) serta 3.991 baris duplikat pada saldo awal persediaan.

Untuk memenuhi standar regulasi perlindungan data pelanggan, kolom identitas sensitif disamarkan menggunakan kriptografi SHA-256 dan penyeragaman pemotongan teks:

# Cuplikan Kode PySpark: PII Masking pada dim_customer menggunakan SHA-256 & Substring
from pyspark.sql.functions import sha2, concat, lit, col

df_customer_silver = df_customer_bronze \
    .withColumn("NAMECUST_MASKED", concat(col("NAMECUST").substr(1, 1), lit("**********"))) \
    .withColumn("TEXTPHON1_HASHED", sha2(col("TEXTPHON1"), 256)) \
    .withColumn("TEXTSTRE1_HASHED", sha2(col("TEXTSTRE1"), 256)) \
    .drop("TEXTPHON1", "TEXTPHON2")

B. Imputasi Cerdas untuk Produk Bernilai NULL

Pada tabel produk (tbl_master_product), ditemukan anomali di mana kolom nama produk (PRODUCT) bernilai NULL, namun kolom deskripsi (DESC) terisi format [NAMA PRODUK] - [WARNA/MODEL]. Saya menerapkan imputasi berbasis ekspresi reguler (regex) untuk mengekstrak nama produk sebelum tanda strip (-), memulihkan ribuan baris data tanpa intervensi manual.

Pemodelan Star Schema & Zero Data Loss di Gold Layer

Lapisan Gold direkonstruksi menggunakan model Star Schema yang memisahkan transaksi penjualan (fact_sales: 58.816 baris) dan mutasi inventori (fact_inventory: 6.293 baris) dari dimensi referensinya.

Strategi "Unknown Member" untuk Mencegah Baris Terbuang

Dalam sistem operasional eksisting, sering dijumpai referensi transaksi yang tidak tercatat di tabel master. Pada proyek ini, terdeteksi 17.104 transaksi dengan kode wilayah yang tidak terdaftar di master teritori.

Dengan menambahkan baris default (key = 0, "Unknown Member") secara eksplisit pada dimensi teritori dan produk menggunakan unionByName, seluruh transaksi penjualan dapat digabungkan 100% tanpa risiko kehilangan data (Zero Data Loss).

Audit Rekonsiliasi Multi-Format (DuckDB + DBeaver)

Keunggulan utama dari arsitektur ini adalah pemanfaatan DuckDB via DBeaver sebagai mesin OLAP tanpa proses impor berat (zero-loading). DuckDB mampu mengueri format file mentah .txt di Bronze, .parquet di Gold, dan .csv di Data Mart secara langsung di lokasi penyimpanan:

-- Cuplikan Kueri SQL DuckDB: Audit Rekonsiliasi 100% Lintas Layer
SELECT 'Bronze Layer (.txt)' AS layer_name, SUM(CAST(QTYSHIPPED AS BIGINT)) AS total_qty
FROM read_csv('Bronze/tbl_invoice_detail.txt', delim='||', header=True)
WHERE QTYSHIPPED != 'QTYSHIPPED'
UNION ALL
SELECT 'Gold Layer (.parquet)' AS layer_name, SUM(quantity) AS total_qty
FROM read_parquet('Gold/fact_sales/*.parquet');

Hasil Audit Validasi: Total kuantitas penjualan pada file mentah Bronze .txt dan tabel analitik Gold .parquet menunjukkan angka yang 100% identik: 324.386 unit. Hasil ini mengonfirmasi keakuratan matematis dari seluruh tahapan pipeline.

Wawasan Intelijen Bisnis: Penjualan & Persediaan

A. Kinerja Penjualan & Distribusi Merek (Sales Analytics)

B. Kinerja Persediaan & Peringatan Dini Dead Stock (Inventory Analytics)

100% Match

Reconciliation Audit: Kueri lineage DuckDB membuktikan total kuantitas penjualan 324.386 unit dan valuasi Rp 80,25 Miliar cocok sempurna 1:1.

Rp 4,51 Miliar

Uncovering Blindspot: Mendeteksi omset pada "Unknown Territory", memberi sinyal kepada manajemen untuk perbaikan master data ERP.

5.420 Unit

Dead Stock Alert: Mengidentifikasi barang mati berumur ≥ 3 tahun di gudang clearance, menginisiasi program pemulihan arus kas.

Rekomendasi Strategis & Action Plan

Berdasarkan temuan analitik di atas, saya merumuskan empat langkah tindakan nyata bagi manajemen PT. Aneka Sport:

  1. Komersial — Program "Mega Clearance & Bundling": Meluncurkan kampanye promosi obral ekstrem atau bundling produk (contoh: pembelian sepatu premium gratis kaos ATSHT atau sarung tangan HGLOV lama) guna mencairkan 5.420 unit dead stock menjadi arus kas segar.
  2. Rantai Pasok — Automated Reorder Point (ROP): Menerapkan batas pemesanan ulang otomatis berdasarkan laju penjualan bulanan ke fasilitas pabrik agar 10 SKU sepatu terlaris seri Barricada dan Accelerator tidak pernah mengalami kehabisan stok (stockout).
  3. Integrasi Digital — Omnichannel Inventory Sync: Merapikan alur integrasi sistem konsinyasi E-Commerce (Zalora, Lazada, Blibli) untuk mencatat perpindahan stok sebelum transaksi terjadi, menghilangkan anomali saldo negatif sekaligus memaksimalkan penjualan online.
  4. Tata Kelola Data — Remediasi Master Customer: Mengaudit dan melengkapi koordinat master pelanggan pada sistem ERP agar omset Rp 4,51 Miliar di kategori wilayah yang tidak terdefinisi dapat terpetakan secara presisi.

Kesimpulan

Membangun Unified Data Platform bukan sekadar menyatukan format file yang berbeda, melainkan membangun jembatan antara rekayasa teknis dan efisiensi bisnis yang nyata. Melalui implementasi Medallion Architecture, PySpark, dan DuckDB, PT. Aneka Sport kini memiliki infrastruktur data berkelas enterprise yang siap diskalakan, akurat secara akuntansi, serta mampu memotong latensi pengambilan keputusan manajemen.