Dimension di Oracle


Data warehousing membutuhkan struktur data khusus yang tidak ditemui di OLTP, salah satunya adalah dimension/dimensi. Contoh dimension antara lain time,product dan customer. Dimensi dapat memiliki hierarki, misalnya, dimensi timedapat di-roll up menjadi quarters, dan quarters dapat di-roll up menjadi years, danyears di-roll up menjadi all years. Analisa data umumnya dimulai dari dimensi dengan hierarki tertinggi dan perlahan-lahan di-drill down sesuai kebutuhan.

Sebagai contoh, terdapat sebuah denormalized table dengan nama times yang memiliki atribut seperti calendar_yearcalendar_quarter_number,calendar_month_numbercalendar_week_number, dan day_number_in_week, dan lainnya. Aku dapat merepresentasikan hubungan hierarki antar-kolom di tabel tersebut dengan membuat dimensi sebagai berikut:

CREATE DIMENSION LATIHAN_TIMES
LEVEL year IS
(times.calendar_year)
LEVEL quarter IS
(times.calendar_quarter_number)
LEVEL month IS
(times.calendar_month_number)
LEVEL week IS
(times.calendar_week_number)
LEVEL day IS
(times.day_number_in_week)
HIERARCHY times_rollup (
day CHILD OF
week CHILD OF
month CHILD OF
quarter CHILD OF
year
);

Untuk melihat keterangan mengenai dimensi yang baru saja aku buat tadi, aku dapat menggunakan perintah:

EXECUTE dbms_dimension.describe_dimension('LATIHAN_TIMES');

Untuk memeriksa apakah dimensi yang baru aku buat valid, aku akan menggunakan API dbms_dimension.validate_dimension(). Tapi sebelum itu, aku akan membuat sebuah tabel DIMENSION_EXCEPTIONS terlebih dahulu dengan menjalankan script %ORA_HOME%\rdbms\admin\utldim.sql. Setelah itu, aku menjalankan kode berikut:

EXECUTE dbms_dimension.validate_dimension('LATIHAN_TIMES', FALSE, TRUE, 'check1');

Aku akan mendapatkan daftar kesalahan di tabel DIMENSION_EXCEPTION. Disini terdapat rowid baris mana yang invalid. Kesalahan yang aku buat adalah hubungan relasi 1:n antara sebuah parent dan anak-anaknya. Sebuah ‘year’ dapat memiliki banyak ‘quarter number’, tetapi sebuah ‘quarter number’ tidak dapat mengandung lebih dari satu parent ‘year’. Untuk itu, aku harus menggunakan id agar mendapatkan quarter number yang unik di setiap year yang ada. Begitu juga dengan hierarki di bawahnya sehingga dimensi-nya kira-kira seperti berikut ini:

DROP DIMENSION LATIHAN_TIMES;
CREATE DIMENSION LATIHAN_TIMES
LEVEL year IS
(times.calendar_year)
LEVEL quarter IS
(times.calendar_quarter_id)
LEVEL month IS
(times.calendar_month_id)
LEVEL day IS
(times.time_id)
HIERARCHY times_rollup (
day CHILD OF
month CHILD OF
quarter CHILD OF
year
);

Iklan

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout /  Ubah )

Foto Google+

You are commenting using your Google+ account. Logout /  Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout /  Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout /  Ubah )

w

Connecting to %s