Materi
Microsoft menyebut dimensi tanggal sebagai dimensi yang paling sering dipakai dan yang paling konsisten muncul di skema bintang. Satu baris mewakili satu tanggal, dan atributnya mendukung penyaringan dan pengelompokan menurut periode: tahun, kuartal, bulan, nama bulan, nomor hari dalam minggu, nama hari, penanda akhir pekan, dan hari libur. Nomor bulan disimpan di samping nama bulan karena teks Januari, Februari, Maret tidak terurut benar sebagai teks.
Kunci dimensi tanggal adalah satu-satunya kunci pengganti yang boleh bermakna: tanggal ditulis sebagai bilangan bulat YYYYMMDD, misalnya 20260317. Bentuk ini ringkas, terurut secara angka, dan mengikuti urutan ISO 8601. Karena kuncinya bisa dihitung dari tanggal, proses muat fakta tidak perlu mencarinya di dimensi. Di SQLite, strftime('%Y%m%d', tanggal) menghasilkan teksnya, lalu CAST mengubahnya menjadi INTEGER.
-- Membuat deret tanggal untuk dim_tanggal (CTE rekursif; mesin latihan tidak menerimanya)
WITH RECURSIVE hari(tgl) AS (
SELECT '2027-01-01'
UNION ALL
SELECT date(tgl, '+1 day') FROM hari WHERE tgl < '2027-12-31'
)
SELECT CAST(strftime('%Y%m%d', tgl) AS INTEGER) AS tanggal_key, tgl,
CAST(strftime('%m', tgl) AS INTEGER) AS bulan,
CAST(strftime('%u', tgl) AS INTEGER) AS hari_ke -- 1 = Senin
FROM hari;Sumber operasional hampir tidak pernah punya data kalender, jadi dimensi tanggal dibangkitkan di gudang data sekali, lalu diperpanjang ke tahun-tahun berikutnya. Isinya mencakup seluruh rentang tanggal semua fakta, termasuk tanggal tanpa transaksi. Karena itu dimensi tanggal juga alat untuk menemukan hari kosong: mulai dari dim_tanggal, LEFT JOIN ke fakta, lalu cari baris tanpa pasangan. Satu dimensi tanggal juga bisa berperan ganda; fakta pengiriman dengan tanggal pesan dan tanggal kirim merujuk tabel yang sama dua kali dengan alias berbeda.