Mondrian‎ > ‎

MDX Tips

Previous "Full Year" Summary from Current Time Member

posted Aug 1, 2010, 6:16 PM by Feris Thia   [ updated Nov 4, 2010, 3:11 AM ]

Permasalahan

Di berbagai laporan analisis yang kita temui, time dimension bisa dipastikan adalah dimension yang mutlak ada. Kepentingan analisis terhadap waktu hampir pasti tidak bisa ditawar lagi.

Salah satu laporan yang saat ini saya jumpai adalah menemukan summary "full year" (total keseluruhan tahun) dari produk dan waktu tertentu di tahun sebelumnya.

Sebagai contoh lihatlah skenario berikut. Contoh 1 adalah laporan tahunan biasa dan yang kedua adalah laporan dengan analisis komparasi dari bulan tertentu.

Contoh 1 :

Laporan Penjualan 3 Tahun Terakhir

 Produk Nilai Penjualan (Rp)
 2003 2004 2005 
Produk A 2,300,000,000  2,500,000,000  2,800,000,000 
Produk B 1,890,000,000  2,150,000,000  2,320,000,000 


Contoh 2 :
Laporan Analisa Penjualan
Periode : Mei 2005


 Produk Nilai Penjualan (Rp)
 Total Tahun Lalu Bulan Berjalan (Tahun Lalu) Bulan Berjalan
Produk A 2,500,000,000  315,000,000  350,000,000
Produk B 2,150,000,000  222,000,000  270,000,000


Terlihat pada contoh kedua pada baris detail terlihat detil penjualan dari bulan 2005 dan 2004 dan summary dari keseluruhan tahun 2005 dijadikan satu view. Hal ini misalnya untuk mendapatkan varian dari rasio pencapaian.

Jadi bagaimana ini dilakukan di MDX ? 

Pertama.. mari kita perhatikan dimensi dan member dari berbagai level hierarchy yang terlibat.

Dimensi dan Hierarchy Yang Terlibat

Untuk contoh di atas kita memiliki dimension dan hierarchy sebagai berikut :

 Dimensi Level Hierarchy 
 Produk + All
  |-- Kategori Produk
      |-- Nama Produk
 Waktu + All
  |-- Tahun
      |-- Kuartal
          |-- Bulan
              |-- Hari

Solusi

Untuk solusi ekspresi MDX pada contoh di atas bisa dicapai dengan menggunakan fungsi MDX Ancestor dan PrevMember. Tetapi  untuk memperjelas, sebelumnya saya menunjukkan contoh pembentukan member secara "hard code" terlebih dahulu.

Misalkan dari hirarki di atas "Produk A" dan "Produk B" masuk ke level "Nama Produk". Keduanya ada dalam kategori "Kategori 1". Maka contoh ekspresi MDX untuk titik-titik pengukuran "Bulan Berjalan" dan "Total Tahun Lalu" di atas adalah sebagai berikut :
  • Ekspresi ([Produk].[Kategori 1].[Produk A], [Waktu].[2005].[Mei], [Measures].[Nilai Penjualan]) adalah nilai penjualan bulan Mei 2005 untuk "Produk A"
  • Ekspresi ([Produk].[Kategori 1].[Produk A], [Waktu].[2004], [Measures].[Nilai Penjualan]) adalah nilai penjualan total tahun 2004 untuk "Produk A"
Terlihat kedua member waktu di contoh ekspresi tidak berada pada level yang sama. Dengan "hard code" tentunya ini bisa gampang dilakukan. Nah, permasalahannya dengan reporting yang generik sesuai kondisi parameter yang kita masukkan, bagaimana kita mencapai hal tersebut ?

Solusinya adalah sebagai berikut....

Dengan selalu berasumsi bahwa  :
  • member dimensi waktu saat ini selalu berada di level "Bulan"
  • member produk saat ini selalu berada di level "Nama Produk"
maka kita ubah ekspresi di atas menjadi :
  • Ekspresi ([Produk].CurrentMember[Waktu].CurrentMember, [Measures].[Nilai Penjualan]) adalah nilai penjualan bulan berjalan dari waktu dan produk yang sedang dipantau
  • Ekspresi ([Produk].CurrentMember, Ancestor([Waktu].CurrentMember[Waktu].[Tahun]).PrevMember, [Measures].[Nilai Penjualan]) adalah nilai total penjualan tahun sebelumnya dari waktu dan produk yang sedang dipantau
Fungsi Ancestor di atas berfungsi mengambil member dari level "Tahun" terlebih dahulu. Dan karena kita berkepentingan untuk mengambil total tahun sebelumnya, maka kita perlu ke belakang 1 member dari level tersebut. Hal ini dicapai dengan mengunakan PrevMember setelah fungsi Ancestor.

Contoh Pada Steel Wheels

Berikut adalah screenshot contoh penerapan pada cube [SteelWheelsSales] yang datang dengan paket Pentaho BI Server.





Bacaan Lebih Lanjut

Pada contoh laporan di atas, terlihat ada pengukuran yang menarik yaitu "Penjualan Bulan Berjalan di Tahun Lalu". Sengaja tidak saya bahas agar tidak melebar dari judul. Namun solusinya cukup sederhana, yaitu dengan menggunakan fungsi ParallelPeriod.

Untuk keterangan dan contoh fungsi ini Anda dapat mengunjungi halaman MSDN berikut ini :
Dan untuk Anda yang kesulitan dengan MDX ini dapat berdiskusi bersama dengan bergabung di User Group Pentaho Indonesia (pentaho-id@googlegroups.com). 

1-1 of 1