Materi
Banyak pertanyaan analisis butuh dua kali agregasi. Rata-rata nilai per nota tidak bisa dihitung dengan AVG(nilai_penjualan) di fakta berbutir baris nota, karena itu rata-rata per baris. Langkah pertama meringkas ke grain nota (SUM per no_nota), langkah kedua merata-ratakan hasilnya. CTE dari kelas SQL Lanjutan memberi nama pada setiap tahap sehingga urutan logikanya terbaca dari atas ke bawah.
-- Apotek: rata-rata nilai per resep, bukan per baris obat
WITH per_resep AS (
SELECT apotek_key, no_resep, SUM(nilai) AS nilai_resep
FROM fakta_obat_keluar
GROUP BY apotek_key, no_resep
)
SELECT apotek_key, ROUND(AVG(nilai_resep)) AS rata_resep
FROM per_resep
GROUP BY apotek_key;Pola yang sama berlaku saat membandingkan dua tabel fakta. Microsoft mencontohkan fakta penjualan berbutir tanggal dan fakta target berbutir kuartal; target Lentera berbutir bulan per cabang. Kedua fakta tidak boleh di-JOIN baris demi baris, karena setiap baris target akan bertemu banyak baris penjualan dan nilai target ikut terjumlah berkali-kali. Cara yang benar: ringkas penjualan lebih dulu ke grain target, lalu gabungkan dua hasil ringkasan itu lewat dimensi yang sama. Tabel fakta agregat, yaitu ringkasan fakta dasar ke dimensi yang lebih sedikit, adalah bentuk tersimpan dari tahap pertama ini dan dipakai untuk mempercepat kueri yang sering diulang.