Day 30: Dimension


Learning In HomeOriginal Date: 11 Februari 2009

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 time dapat di-roll up menjadi quarters, dan quarters dapat di-roll up menjadi years, dan years 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_year, calendar_quarter_number, calendar_month_number, calendar_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
  );

Perihal Solid Snake
I'm nothing...

Apa komentar Anda?

Please log in using one of these methods to post your comment:

Logo WordPress.com

You are commenting using your WordPress.com 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 )

Foto Google+

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

Connecting to %s

%d blogger menyukai ini: