hmmm....
Sebenarnya kan, masalah ini sederhana saja....
1. yang namanya mem-pivot itu kolom berisi item kelompok menjadi nama header kolom di dalam pivot
data yang begini : menjadi pivot yang begini :
key kelompok nilai key A B
1 A 17 1 17 23
1 B 23 2 19
2 A 19
2. yang namanya meng-unpivot itu mengembalikan pivot ke susunan tabel asal (tabel fakta)
dari data bentuknya seperti pivot di nomor 1 (tabel sisi kanan), menjadi tabel asal sisi kiri
3. di dalam pivot, bagaimana jika ada value yang kosong (null) ?
> misal nilai 17 di kolom A itu tidak ada, alias kosong alias null (bukan null string)
> maka hasil unpivot akan kehilangan baris data 1,A,null
key kelompok nilai
1 B 23
2 A 19
*** nah... cakep kan,
berarti masalah tabel dengan kolom STN|BS|PRISM|VA (blok data berisi 4 item akan disusun vertikal dengan header blok di baris pertama setiap blok)
menjadi hasil : (ada 2 baris yang yang dihapus, yaitu PRISM(1) dan VA(1) yang kelebihan)
STN(1) ànilai kolom STN record ke-1
BS(1) ànilai kolom BS record ke-1
PRISM(1) -> ini masih record ke-1 kan...
VA(1) -> ini juga record ke-1
PRISM(2) -> yang ini punyanya record ke-2
VA(2) -> ini juga punyanya record ke-2
PRISM(3) -> kalo ini dah record ke-3
VA(3) -> yang ini juga record ke-3
PRISM(4) ànilai kolom PRISM record ke-4
VA(4) ànilai kolom VA record ke-4
artinya, di tabel dengan kolom STN|BS|PRISM|VA, pada record ke-2,3, dan 4 (selain baris header kelompok [seperti 1,5,dst), kolom STN dan BS adalah null... lalu di-unpivot...
done...
Jadi,
A. kenapa harus pakai function buatan sendiri yang memasukkan parameter ?
> ini biasanya karena sumber data akan dipakai dibanyak query proses, tetapi sebagian besar proses dilakukan di query pengambil data (query sumber data itu sendiri).
> umumnya, kalau query sumber data tadi di-reference menjadi query baru, lalu dibuang kolom yang ndak perlu, maka proses unpivot bisa dilakukan.
B. bagaimana jika kolom STN dan BS di record ke-2,3,4 tidak null tapi nullstring atau ada isinya ?
> filter kolom Value hasil unpivot supaya baris-baris milik STN dan BS dari record ke-2,3,4,dan semacamnya tersebut tidak ikut serta
dah... masalah itu dah selesai ya...
sekarang yang lainnya...
1. sebisa mungkin (kalau tidak memungkinkan atau belum bisa melakukan, ndak perlu dipaksakan), satu sumber data dipakai berulang oleh beberapa query proses
*** artinya, proses di query pengambil data tersebut adalah yang secara umum dibutuhkan di beberapa query proses, misal menguba data type
> disinilah sebenarnya ada masalah dalam filenya mas Zainul
> query input berisi banyak proses, bahkan proses yang hanya dibutuhkan oleh 1 query proses tertentu tapi tidak dibutuhkan beberapa query proses lainnya, sudah dibuat
> hal ini perlu ditata lebih baik lagi...
2. sebuah query dalam power query (pq) disusun dari beberapa kalimat query yang tersusun mulai dari per tabel temporary dan per subquery
*** begini mangsud e
misal ada query bernama qInput berisi langkah proses :
1. Source : ambil data dari excel table misale...
2. changeType : langkah mengubah tipe data setiap kolom
3. addColumnX : langkah membuat kolom baru berisi kalkulasi tertentu
maka di query qInput berisi kalimat query :
a. pembuat temporary table 1 [Source],
b. pembuat temporary table 2 [changeType] (yang membutuhkan hasil temp table 1 tadi),
c. pembuat temp table 3 [addColumnX]
proses ini jika semakin banyak dan semakin kompleks, maka akan secara eksponensial memperberat kerja (bahasa simpelnya, menurunkan kinerja)
padanan di SQL bisa mirip begini (mirip ya, tidak sama) :
-- temp table Source :
select blabla from excel.workbook()
-- temp table changetype
select cast(blabla) dst from Source
-- temp table addColumnX
select bliblibli from changetype
hal ini bisa dikurangi jika memanfaatkan potensi subquery, misal menjadi :
1. Source : ambil data dari excel langsung ubah tipe data dan add column
Contoh : =Table.AddColumn( Table.TransformColumnTypes( Excel.CurrentWorkbook()blabla , {{blabla,type},{dst}}) , "hitungan" , each blabla, type )
maka di query qInput yang memanfaatkan subquery akan berisi kalimat query :
a. pembuat temorary table 1 [Source] yang berisi subquery :
AddColumn( from TransformColumnTypes ( from Excel.Workbook() ) )
padananannya di SQL mirip seperti ini :
select blibli
from ( select cast(blabla) dst
from ( select blabla
from excel.workbook() as q1
) as q2
) as q3
3. pq menggunakan basis tipe data float untuk data bilangan, artinya, se-exact-exact-nya, akan berpotensi berupa approximate number (ndak exact tulen)
*** artinya, jika melakukan kalkulasi dalam pq yang melibatkan bilangan pecahan, perlu diwaspadai jika kepresisian hasil menjadi faktor utama...
> sifat utama float number adalah secara umum memiliki kepresisian sampai 13 digit...
mangsud e gini,
angka 2.3 relatif float daripada 2300000 (2 juta 3 ratus ribu), padahal 2300000 itukan sekadar 2.3 x 1e6
jadi, kalau angka 3 di 2.3 itu penting, maka bisa jadi 2300000 / 2 * 1e-6 lebih bisa terjaga kepresisiannya daripada 2.3 / 2
sudah ya.. segitu saja dulu...
lain kali disambung lagi...
terlampir file contoh terkait ocehan di atas...
jika terkendala security, set di power query -> options -> privacy -> pilih ignore all blabla -> ok
Regards,
Kid
Tidak ada komentar:
Posting Komentar