Teradata - Fungsi OLAP

Fungsi OLAP mirip dengan fungsi agregat kecuali bahwa fungsi agregat hanya akan mengembalikan satu nilai sedangkan fungsi OLAP akan menyediakan baris individual selain agregat.

Sintaksis

Berikut ini adalah sintaks umum fungsi OLAP.

<aggregate function> OVER  
([PARTITION BY] [ORDER BY columnname][ROWS BETWEEN 
UNBOUDED PRECEDING AND UNBOUNDED FOLLOWING)

Fungsi agregasi dapat berupa SUM, COUNT, MAX, MIN, AVG.

Contoh

Perhatikan tabel Gaji berikut.

KaryawanNo Kotor Deduksi Gaji bersih
101 40.000 4.000 36.000
102 80.000 6.000 74.000
103 90.000 7.000 83.000
104 75.000 5.000 70.000

Berikut adalah contoh untuk menemukan jumlah kumulatif atau menjalankan total NetPay pada tabel Gaji. Catatan diurutkan berdasarkan EmployeeNo dan jumlah kumulatif dihitung pada kolom NetPay.

SELECT  
EmployeeNo, NetPay, 
SUM(Netpay) OVER(ORDER BY EmployeeNo ROWS  
UNBOUNDED PRECEDING) as TotalSalary 
FROM Salary;

Ketika query di atas dijalankan, itu menghasilkan keluaran sebagai berikut.

EmployeeNo     NetPay     TotalSalary 
-----------  -----------  ----------- 
   101         36000        36000 
   102         74000        110000 
   103         83000        193000 
   104         70000        263000 
   105         18000        281000

PANGKAT

Fungsi RANK mengurutkan rekaman berdasarkan kolom yang disediakan. Fungsi RANK juga dapat memfilter jumlah record yang dikembalikan berdasarkan ranking.

Sintaksis

Berikut ini adalah sintaks umum untuk menggunakan fungsi RANK.

RANK() OVER 
([PARTITION BY columnnlist] [ORDER BY columnlist][DESC|ASC])

Contoh

Perhatikan tabel Karyawan berikut.

KaryawanNo Nama depan Nama keluarga JoinedDate DepartmentID Tanggal lahir
101 Mike James 27/3/2005 1 1/5/1980
102 Robert Williams 25/4/2007 2 3/5/1983
103 Peter Paul 21/3/2007 2 1/4/1983
104 Alex Stuart 1/2/2008 2 6/11/1984
105 Robert James 1/4/2008 3 1/12/1984

Kueri berikut mengurutkan rekaman tabel karyawan berdasarkan Tanggal Bergabung dan menetapkan peringkat pada Tanggal Bergabung.

SELECT EmployeeNo, JoinedDate,RANK() 
OVER(ORDER BY JoinedDate) as Seniority 
FROM Employee;

Ketika query di atas dijalankan, itu menghasilkan keluaran sebagai berikut.

EmployeeNo   JoinedDate   Seniority 
-----------  ----------  ----------- 
   101       2005-03-27       1 
   103       2007-03-21       2 
   102       2007-04-25       3 
   105       2008-01-04       4 
   104       2008-02-01       5

Klausa PARTITION BY mengelompokkan data menurut kolom yang ditentukan dalam klausa PARTITION BY dan menjalankan fungsi OLAP dalam setiap grup. Berikut ini adalah contoh dari query yang menggunakan klausa PARTITION BY.

SELECT EmployeeNo, JoinedDate,RANK() 
OVER(PARTITION BY DeparmentNo ORDER BY JoinedDate) as Seniority 
FROM Employee;

Ketika query di atas dijalankan, itu menghasilkan keluaran sebagai berikut. Anda dapat melihat bahwa Peringkat diatur ulang untuk setiap Departemen.

EmployeeNo  DepartmentNo  JoinedDate   Seniority 
-----------  ------------  ----------  ----------- 

    101           1        2005-03-27       1 
    103           2        2007-03-21       1 
    102           2        2007-04-25       2 
    104           2        2008-02-01       3 
    105           3        2008-01-04       1