Data dimensi yang berubah secara perlahan atau tidak terduga ditangkap dalam analisis Dimensi yang Berubah Perlahan (SCD). Dalam lingkungan data warehouse, tabel dimensi memiliki kunci utama yang secara unik mengidentifikasi setiap record dan bagian informasi lainnya yang dikenal sebagai data dimensional.
Semua metode pembaruan untuk jenis SCD yang berbeda dapat dilakukan dengan menggunakan program SortCL di IRI CoSort. Di IRI Voracity ada wizard untuk membantu membuat skrip pekerjaan SCD yang digunakan saat menjalankan program SortCL. Sebagian besar variasi menggunakan gabungan luar penuh untuk mencocokkan catatan dari sumber data master asli dengan catatan di sumber yang diperbarui berdasarkan menyamakan kunci dari masing-masing. Catatan dengan kecocokan perlu diperbarui di master. Catatan di sumber pembaruan yang tidak memiliki kecocokan perlu ditambahkan ke master.
Berikut adalah ikhtisar tentang cara memperbarui file dimensi menggunakan SCD Tipe 3 di mana saya mempertahankan biaya produk. Pembaruan dilakukan dengan bergabung sehubungan dengan bidang ProductCode .
Ketik 3 SCD
Dengan model Tipe 3, data saat ini dan data historis dibawa dalam catatan yang sama. Salah satu hal utama yang harus diputuskan adalah berapa banyak sejarah yang harus disimpan. Dengan contoh kita, saya akan menyimpan biaya untuk tiga tanggal mulai. Tanggal akhir adalah tanggal ketika biaya dalam catatan tidak lagi efektif. Jika biaya masih efektif, maka EndDate1 field akan diset ke 99991231. Hal ini untuk menghindari nilai kosong pada field ini. Berikut adalah nilai yang terkandung dalam sumber master awal (master3.dat):
Kode Produk | Biaya1 | StartDate1 | TanggalAkhir1 | Biaya2 | StartDate2 | TanggalAkhir2 | Biaya3 | StartDate3 | TanggalAkhir3 |
---|---|---|---|---|---|---|---|---|---|
C123 | 125,50 | 20110228 | 99991231 | ||||||
F112 | 2365.00 | 20120101 | 99991231 | ||||||
G101 | 19,25 | 20110930 | 99991231 | 21,25 | 20110501 | 20110930 | |||
J245 | 450,50 | 20110430 | 99991231 | 425,25 | 20101001 | 20110430 | 385,25 | 20100215 | 20101001 |
S022 | 98,75 | 20110515 | 99991231 |
Semua catatan pembaruan memiliki StartDate yang sama. Sumber update.dat berisi nilai bidang berikut untuk catatan:
Kode Produk | Biaya | Tanggal Mulai |
---|---|---|
F112 | 2425.00 | 20120701 |
J245 | 550,50 | 20120701 |
M447 | 101.75 | 20120701 |
S022 | 101.75 | 20120701 |
Di bawah ini adalah data yang diperbarui. Untuk setiap catatan yang diperbarui, setiap biaya, tanggal mulai, dan tanggal akhir dipindahkan ke kanan satu set. Di grup lama saat ini sebagai catatan, tanggal akhir diubah menjadi tanggal mulai untuk kumpulan baru yang diperbarui saat ini. Nilai apa pun untuk set ketiga yang lama dibuang.
Kode Produk | Biaya1 | StartDate1 | TanggalAkhir1 | Biaya2 | StartDate2 | TanggalAkhir2 | Biaya3 | StartDate3 | TanggalAkhir3 |
---|---|---|---|---|---|---|---|---|---|
C123 | 125,50 | 20110228 | 9991231 | ||||||
F112 | 2425.00 | 20120701 | 9991231 | 2365.00 | 20120101 | 20120701 | |||
G101 | 19,25 | 20110930 | 9991231 | 21,25 | 20110501 | 20110930 | |||
J245 | 550,50 | 20120701 | 9991231 | 450,50 | 20110430 | 20120701 | 425,25 | 20101001 | 20110430 |
M447 | 101.75 | 20120701 | 9991231 | ||||||
S022 | 101.75 | 20120701 | 9991231 | 98,75 | 20110515 | 20120701 |
Di IRI Workbench, ada wizard Voracity untuk membantu pembuatan skrip untuk memperbarui file dan tabel Dimensi. Wizard ini terletak di dropdown Voracity di bilah navigasi. Pertama Anda memilih jenis SCD. Kemudian jendela tempat Anda memilih file yang digunakan untuk memproses pembaruan akan ditampilkan.
Di tabel atas di layar berikutnya, Anda menentukan bagaimana data yang diperbarui dipetakan ke master. Di pengelompokan tengah pada layar, pilih bidang yang memberikan nilai status untuk catatan yang sedang diperbarui.
Di tarik-turun di bawah Saat Ini dan Kumpulan Bidang Historis , kumpulan pertama yang Anda tentukan, memberikan nama bidang untuk nilai saat ini. Bidang Nilai adalah nilai dimensi yang sedang diperbarui. Bidang Mulai adalah bidang yang menentukan kapan Bidang Nilai menjadi aktif dan Akhiri Bidang menentukan kapan itu tidak lagi valid. Kemudian tentukan set sebanyak yang Anda butuhkan untuk jumlah nilai historis yang disimpan.
Berikut adalah skrip pekerjaan yang akan memperbarui file master:
/INFILE=master3.dat /PROCESS=DELIMITED /ALIAS=master3 /FIELD=(PRODUCTCODE, TYPE=ASCII, POSITION=1, SEPARATOR=",") /FIELD=(COST1, TYPE=NUMERIC, POSITION=2, SEPARATOR=",") /FIELD=(STARTDATE1, TYPE=ASCII, POSITION=3, SEPARATOR=",") /FIELD=(ENDDATE1, TYPE=ASCII, POSITION=4, SEPARATOR=",") /FIELD=(COST2, TYPE=NUMERIC, POSITION=5, SEPARATOR=",") /FIELD=(STARTDATE2, TYPE=ASCII, POSITION=6, SEPARATOR=",") /FIELD=(ENDDATE2, TYPE=ASCII, POSITION=7, SEPARATOR=",") /FIELD=(COST3, TYPE=NUMERIC, POSITION=8, SEPARATOR=",") /FIELD=(STARTDATE3, TYPE=ASCII, POSITION=9, SEPARATOR=",") /FIELD=(ENDATE3, TYPE=ASCII, POSITION=10, SEPARATOR=",") /INFILE=update.dat /PROCESS=DELIMITED /ALIAS=update /FIELD=(PRODUCTCODE, TYPE=ASCII, POSITION=1, SEPARATOR=",", FRAME='\"') /FIELD=(COST, TYPE=ASCII, POSITION=2, SEPARATOR=",", FRAME='\"') /FIELD=(STARTDATE, TYPE=ASCII, POSITION=3, SEPARATOR=",", FRAME='\"') /JOIN FULL_OUTER master3 update WHERE MASTER3.PRODUCTCODE == UPDATE.PRODUCTCODE /OUTFILE=master3.dat # Include only records that are to be updated /PROCESS=DELIMITED /FIELD=(UPDATE.PRODUCTCODE, TYPE=ASCII, POSITION=1, SEPARATOR=",") /FIELD=(UPDATE.COST, TYPE=NUMERIC, POSITION=2, SEPARATOR=",") /FIELD=(UPDATE.STARTDATE, TYPE=ASCII, POSITION=3, SEPARATOR=",") /FIELD=(ENDDATE1_NEW="99991231", TYPE=ASCII, POSITION=4, SEPARATOR=",") /FIELD=(MASTER3.COST1, TYPE=NUMERIC, POSITION=5, SEPARATOR=",") /FIELD=(MASTER3.STARTDATE1, TYPE=ASCII, POSITION=6, SEPARATOR=",") /FIELD=(UPDATE.STARTDATE, TYPE=ASCII, POSITION=7, SEPARATOR=",") /FIELD=(MASTER3.COST3, TYPE=NUMERIC, POSITION=8, SEPARATOR=",") /FIELD=(MASTER3.STARTDATE3, TYPE=ASCII, POSITION=9, SEPARATOR=",") /FIELD=(MASTER3.ENDATE3, TYPE=ASCII, POSITION=10, SEPARATOR=",") /INCLUDE WHERE MASTER3.PRODUCTCODE == UPDATE.PRODUCTCODE /OUTFILE=master3.dat # Include only records that are not to be updated /PROCESS=DELIMITED /FIELD=(MASTER3.PRODUCTCODE, TYPE=ASCII, POSITION=1, SEPARATOR=",") /FIELD=(MASTER3.COST1, TYPE=NUMERIC, POSITION=2, SEPARATOR=",") /FIELD=(MASTER3.STARTDATE1, TYPE=ASCII, POSITION=3, SEPARATOR=",") /FIELD=(MASTER3.ENDDATE1, TYPE=ASCII, POSITION=4, SEPARATOR=",") /FIELD=(MASTER3.COST2, TYPE=NUMERIC, POSITION=5, SEPARATOR=",") /FIELD=(MASTER3.STARTDATE2, TYPE=ASCII, POSITION=6, SEPARATOR=",") /FIELD=(MASTER3.ENDDATE2, TYPE=ASCII, POSITION=7, SEPARATOR=",") /FIELD=(MASTER3.COST3, TYPE=NUMERIC, POSITION=8, SEPARATOR=",") /FIELD=(MASTER3.STARTDATE3, TYPE=ASCII, POSITION=9, SEPARATOR=",") /FIELD=(MASTER3.ENDATE3, TYPE=ASCII, POSITION=10, SEPARATOR=",") /OMIT WHERE MASTER3.PRODUCTCODE == UPDATE.PRODUCTCODE /OMIT WHERE MASTER3.PRODUCTCODE EQ "" /OUTFILE=C:/IRI/CoSort95/workbench.orig/workspace/SCD/SCD3/master3.dat # Add new records /PROCESS=DELIMITED /FIELD=(UPDATE.PRODUCTCODE, TYPE=ASCII, POSITION=1, SEPARATOR=",") /FIELD=(UPDATE.COST, TYPE=NUMERIC, POSITION=2, SEPARATOR=",") /FIELD=(UPDATE.STARTDATE, TYPE=ASCII, POSITION=3, SEPARATOR=",") /FIELD=(ENDDATE1_NEW="99991231", TYPE=ASCII, POSITION=4, SEPARATOR=",") /INCLUDE WHERE MASTER3.PRODUCTCODE EQ "" AND UPDATE.PRODUCTCODE NE ""