Episode ini menjelaskan semantic layer dan Metrics Store: satu sumber definisi metrik yang dipakai semua dashboard dan tool, peran dbt semantic layer, perbedaan dengan LookML, dan praktik mendefinisikan metrik revenue Superstore satu kali agar konsisten di mana pun

Di episode-episode sebelumnya kalian menghitung metrik yang sama berulang kali: Revenue di Power BI (DAX), di Tableau (calculated field), dan di Looker (LookML). Sekarang bayangkan definisinya berubah — misalnya "revenue" kini harus mengecualikan refund. Kalian harus mengubah tiga tempat, dan kalau satu terlewat, muncullah inkonsistensi klasik: dashboard satu bilang 10 miliar, dashboard lain bilang 9,8 miliar.
Episode ini menyelesaikan masalah itu dengan semantic layer dan Metrics Store: definisi metrik ditulis satu kali di satu tempat, lalu dipakai ulang oleh semua tool dan semua dashboard.
Tanpa semantic layer, setiap tool punya definisi metriknya sendiri:
Hasilnya: revenue di tiga dashboard berbeda, tim saling menyalahkan, dan kepercayaan pada data runtuh. Semantic layer memecahkan ini dengan memindahkan definisi ke satu lapisan di tengah.
Dua istilah yang sering dipakai bergantian:
fact_orders.sales → Revenue).Dengan keduanya, alurnya menjadi:
Satu definisi, semua konsumen — kalau Revenue berubah definisinya, hanya satu tempat yang diedit.
Beberapa pendekatan yang ada di dunia nyata:
| Pendekatan | Cara Kerja | Contoh |
|---|---|---|
| Semantic layer di tool BI | Definisi di dalam satu tool (masih tersebar antar tool) | Power BI dataset, LookML |
| dbt Semantic Layer | Metrik didefinisikan di dbt (kode), diakses tool via MetricFlow/API | dbt Cloud |
| Standar universal | Mendefinisikan metrik dalam format netral, diterjemahkan ke banyak tool | Transform, Cube, dbt MetricFlow |
Pendekatan terbaik di 2026: definisikan metrik sebagai kode (di dbt atau tool semantic layer khusus), lalu konsumsi dari semua tool. Inilah arah enterprise BI — dan kalian akan membangunnya sekarang.
Pakai dbt (yang sudah kalian kenal di episode 6) untuk mendefinisikan metrik Superstore. Buat file definisi metrik di project dbt:
semantic_models:
- name: fact_orders
model: ref('fact_orders')
entities:
- name: order
type: foreign
expr: order_id
dimensions:
- name: order_date
type: time
type_params:
time_granularity: day
- name: region
type: categorical
expr: dim_customer_region
measures:
- name: revenue
type: sum
expr: sales
- name: profit
type: sum
expr: profit
- name: total_orders
type: count_distinct
expr: order_id
metrics:
- name: revenue
description: "Total nilai penjualan (sum of sales) per periode"
type: simple
label: Revenue
type_params:
measure: revenue
filters:
- where: "{{ Dimension('order_date') }} >= '2024-01-01'"
- name: profit_margin
description: "Persentase keuntungan dari setiap penjualan"
type: ratio
label: Profit Margin
type_params:
numerator: profit
denominator: revenue
denominator_metric: revenueDi sini:
semantic_models mendeskripsikan tabel fact_orders sebagai model semantik: entity, dimensi, dan measure.metrics mendefinisikan metrik yang bisa dipakai banyak tool — revenue simple, profit_margin ratio.description yang dimasukkan ke dalam definisi — dokumentasi hidup yang akan muncul di katalog metrik.Jalankan validasi untuk memastikan definisi benar:
dbt parse
dbt list --resource-type metricNote
Setelah metrik didefinisikan di dbt Semantic Layer, tool BI bisa menariknya lewat API — misalnya Power BI menghubungi endpoint metrics, lalu semua dashboard memakai metrik yang sama. Kalau definisi berubah, cukup dbt run sekali, semua tool ikut berubah.
Mari kita cek dampaknya pada masalah awal di episode ini:
description dan riwayat perubahan di git → bisa dipertanggungjawabkan.Inti yang harus dibawa pulang:
revenue dan profit_margin Superstore didefinisikan dan tervalidasi di dbt.Di episode 13 selanjutnya kita akan membahas self-service BI — bagaimana membuka akses data untuk seluruh perusahaan tanpa mengorbankan konsistensi dan keamanan, plus praktik membangun portal self-service. Definisi metrik kalian sudah terpusat, sekarang waktunya memberdayakan pengguna. Pastikan tetap semangat!