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
);

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s