SQL Server Indonesia User Groups Community MDX - Data suatu periode dan periode sebelumnya (PeriodsToDate,Cousin,Ancestor) - Cahyo drop in {here}

SQL Server Indonesia User Groups Community

SQL Server Indonesia User Groups Community
Welcome to SQL Server Indonesia User Groups Community Sign in | Join | Help
in Search

Cahyo drop in {here}

SQL as breakfast, BI for lunch and dinner with MDX

MDX - Data suatu periode dan periode sebelumnya (PeriodsToDate,Cousin,Ancestor)

Laporan di suatu perusahaan biasanya tidak hanya menampilkan data bulanan tapi juga data periode seperti 3 bulanan atau tahunan. Selain itu biasanya dibutuhkan *** data periode sebelumnya sebagai tolak ukur performa perusahaan. Pada kesempatan kali ini saya akan sedikit menjelaskan beberapa sintaks MDX yang digunakan untuk mendapatkan data dalam periode tertentu dan data pada periode sebelumnya.

Ada 3 fungsi MDX yang akan saya bahas kali ini, yaitu : PeriodsToDate,Cousin, dan Ancestor.

Untuk contoh pertama saya membuat calculated member untuk mendapatkan data penjualan satu kuarter. Berikut sintaksnya:

CREATE MEMBER CURRENTCUBE.[MEASURES].[SalesQTD]
AS AGGREGATE(
        PeriodsToDate(
            [Time].[Calendar].[Quarter],
            [Time].[Calendar].CurrentMember
        ), [Measures].[Sales]
    ),
VISIBLE = 1  ;

Untuk contoh yang pertama ada 2 fungsi MDX  yang saya gunakan yaitu AGGREGATE dan PeriodsToDate.

AGGREGATE digunakan untuk mengagregasi data pada cube dengan menggunakan default aggregation function measure yang di AGGREGATE. Jika [Measures].[Sales] mempunyai aggregation function SUM maka AGGREGATE di atas akan berjalan sebagai SUM, jika aggregation function [Measures].[Sales] AverageOfChildren maka AGGREGATE akan berfungsi seperti AverageOfChildren.

PeriodsToDate digunakan untuk mengenerate member dari awal periode sampai member saat ini(current member). Pada contoh di atas saya menggunakan kuarter pada hierarchy calendar punya dimensi time. Misal current member untuk dimensi time adalah 15 Maret 1988 maka fungsi PeriodsToDate diatas akan menghasilkan member dari 1 Januari 1988 sampai dengan 15 Maret 1988.

Untuk contoh kedua saya membuat calculated member untuk mendapatkan data periode sebelumnya. Pada contoh kali ini adalah kuarter sebelumnya. Berikut Sintaksnya:

CREATE MEMBER CURRENTCUBE.[MEASURES].[SalesQTD]
AS AGGREGATE(
        PeriodsToDate(
            [Time].[Calendar].[Quarter],
            Cousin([Time].[Calendar].CurrentMember,Ancestor([Time].[Calendar].CurrentMember,[Time].[Calendar].[Quarter]).Prevmember)
        ), [Measures].[Actual]
    ),
VISIBLE = 1  ;

Untuk contoh kedua ada beberapa perbedaan pada sintaks MDXnya yaitu penggunaan fungsi Cousin dan Ancestor. Inti dari penggunaan kedua fungsi ini adalah untuk mendapatkan member pada kuarter sebelumnya. Jadi apabila current member adalah 15 Juni 1988 maka member untuk kuarter sebelumnya adalah 15 Maret 1988. Sehingga fungsi PeriodsToDate akan mendapatkan member-member pada kuarter sebelumnya. Berikut adalah penjelasan kedua fungsi tersebut:

Ancestor digunakan untuk mendapatkan level di atas current level. Fungsi ini hampir sama dengan fungsi ParentMember. Perbedaannya adalah ParentMember untuk mendapatkan member 1 level di atas current member pada suatu hierarchy sedang kan Ancestor bisa mendapatkan tidak hanya 1 level tetapi bisa 2,3/x level diatas current member. Pada contoh di atas saya menggunakan ancestor untuk mendapatkan member di level quarter kemudian dengan fungsi PrevMember saya mendapatkan quarter sebelumnya.

Cousin digunakan untuk mendapatkan member yang satu level dengan current member tetapi dengan parent yang berbeda. Jadi pada contoh diatas setelah saya mendapatkan quarter sebelumnya dengan menggunakan Ancestor saya menggunakan fungsi Cousin untuk mendapatkan member yang satu level dengan current member tetapi dengan parent kuarter sebelumnya.

Comments

No Comments
Powered by Community Server (Commercial Edition), by Telligent Systems