Database
 sql >> Teknologi Basis Data >  >> RDS >> Database

SCD Tipe 2

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 jenis SCD menggunakan gabungan luar penuh untuk mencocokkan catatan dari sumber data asli dengan catatan di sumber pembaruan 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 2 di mana saya mempertahankan biaya produk. Pembaruan dilakukan dengan bergabung sehubungan dengan bidang ProductCode .

Ketik 2 SCD

Dalam model ini, catatan saat ini dan catatan sejarah disimpan dalam file yang sama. Dalam database aktif, Anda mungkin memiliki kunci pengganti untuk digunakan sebagai kunci utama untuk menautkan ke tabel fakta selain ProductCode key yang digunakan untuk proses update. Karena catatan saat ini dan catatan sejarah terkandung dalam file yang sama, maka perlu memiliki bidang yang menunjukkan apakah catatan tersebut adalah catatan saat ini untuk ProductCode dan kami membutuhkan bidang untuk menunjukkan kapan biaya untuk ProductCode sudah tidak efektif. Dalam contoh ini kita memiliki:

  • Kode Produk :Ini adalah bidang kunci pengenal.
  • Biaya :Biaya yang mulai berlaku pada StartDate sebagai catatan.
  • Tanggal Mulai :ini adalah tanggal mulai berlakunya biaya pencatatan.
  • Tanggal Akhir :Ini adalah tanggal Biaya dalam catatan tidak lagi efektif. Jika Biaya masih berlaku, maka Tanggal Berakhir akan disetel ke 99991231. Hal ini untuk menghindari nilai nol di bidang ini.
  • Saat ini :Y jika biaya masih berlaku, N jika tidak.

Tabel awal sudah memiliki 3 catatan sejarah. Mereka adalah orang-orang yang memiliki nilai N untuk bidang Saat Ini . Sumber master disebut master2.dat dan berisi data di bawah ini:

Kode Produk Biaya Tanggal Mulai Tanggal Akhir Saat ini
C123 125,50 20110228 99991231 Y
F112 2365.00 20120101 99991231 Y
G101 19,25 20110930 99991231 Y
G101 21,25 20110501 20110930 T
J245 450,50 20110430 99991231 Y
J245 425,25 20101001 20110430 T
J245 385,25 20100215 20101001 T
S022 98,75 20110515 99991231 Y

Semua catatan pembaruan memiliki TanggalMulai yang sama . Sumber update.dat berisi catatan dengan nilai bidang berikut:

Kode Produk Biaya Tanggal Mulai
F112 2425.00 20120701
J245 550,50 20120701
M447 101.75 20120701
S022 101.75 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 sumber yang digunakan untuk memproses pembaruan akan ditampilkan. Untuk Tipe 2, target biasanya adalah file master atau tabel asli.

Dengan layar berikutnya, Anda menentukan bagaimana data pembaruan dipetakan dan bagaimana nilai bidang atau kolom lainnya ditetapkan. Pembaruan.Biaya akan dipetakan ke Master2.cost dan pembaruan. Tanggal Mulai akan dipetakan ke master2.StartDate . Bidang Bendera adalah field yang digunakan untuk menentukan record dengan Cost yang aktif. Artinya, apakah nilai-nilai dalam catatan itu aktif atau historis. Dalam hal ini, Bidang Bendera adalah bidang Saat Ini . Tandai Nilai Positif adalah nilai dalam Saat Ini yang menentukan apakah Biaya adalah Biaya saat ini; nilainya adalah “Y” dalam contoh kita dan Nilai Negatif Tandai adalah n". Bidang Akhir berisi nama bidang yang menyimpan nilai yang digunakan untuk menentukan kapan Biaya untuk catatan tidak lagi efektif dan Master.EndDate memegang nilai itu. Nilai Akhir digunakan sebagai nilai untuk Bidang Akhir ketika catatan berisi nilai saat ini untuk ProductCode .

Layar berikutnya adalah untuk menentukan gabungan yang dilakukan dengan master dan memperbarui sumber. Anda harus memperhatikan bahwa kedua sumber harus diurutkan sesuai dengan ProductCode . Jika tidak, Anda harus memilih TIDAK_SORIT di tarik-turun untuk Opsi Urutan Urutan di bawah sumber data yang perlu diurutkan.

Berikut adalah skrip pekerjaan:

/INFILE=C:/IRI/CoSort95/workbench.orig/workspace/SCD/SCD2/master2.dat
  /PROCESS=DELIMITED
  /ALIAS=master2
  /FIELD=(PRODUCTCODE, TYPE=ASCII, POSITION=1, SEPARATOR=",", FRAME='\"')
  /FIELD=(COST, TYPE=NUMERIC, POSITION=2, SEPARATOR=",", FRAME='\"')
  /FIELD=(STARTDATE, TYPE=ASCII, POSITION=3, SEPARATOR=",", FRAME='\"')
  /FIELD=(ENDDATE, TYPE=ASCII, POSITION=4, SEPARATOR=",", FRAME='\"')
  /FIELD=(CURRENT, TYPE=ASCII, POSITION=5, SEPARATOR=",", FRAME='\"')
/INFILE=C:/IRI/CoSort95/workbench.orig/workspace/SCD/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 master2 update WHERE MASTER2.PRODUCTCODE == UPDATE.PRODUCTCODE

/OUTFILE=master2.dat
# Include only records that are being updated
# Use the Cost and StartDate from the Update file 
  /PROCESS=DELIMITED
  /FIELD=(MASTER2.PRODUCTCODE, TYPE=ASCII, POSITION=1, SEPARATOR=",", FRAME='\"')
  /FIELD=(UPDATE.COST, TYPE=NUMERIC, POSITION=2, SEPARATOR=",", FRAME='\"')
  /FIELD=(UPDATE.STARTDATE, TYPE=ASCII, POSITION=3, SEPARATOR=",", FRAME='\"')
  /FIELD=(MASTER2.ENDDATE, TYPE=ASCII, POSITION=4, SEPARATOR=",", FRAME='\"')
  /FIELD=(MASTER2.CURRENT, TYPE=ASCII, POSITION=5, SEPARATOR=",", FRAME='\"')
  /INCLUDE WHERE MASTER2.PRODUCTCODE == UPDATE.PRODUCTCODE AND MASTER2.CURRENT EQ “Y"
/OUTFILE=master2.dat
# Change any current records that are being updated to history records
# by giving the EndDate as the StartDate from the update record 
# and changing the field Current to N
  /PROCESS=DELIMITED
  /CONDITION=(MATCH, TEST=(MASTER2.PRODUCTCODE == UPDATE.PRODUCTCODE AND MASTER2.CURRENT EQ "Y"))
  /FIELD=(MASTER2.PRODUCTCODE, TYPE=ASCII, POSITION=1, SEPARATOR=",", FRAME='\"')
  /FIELD=(MASTER2.COST, TYPE=NUMERIC, POSITION=2, SEPARATOR=",", FRAME='\"')
  /FIELD=(MASTER2.STARTDATE, TYPE=ASCII, POSITION=3, SEPARATOR=",", FRAME='\"')
  /FIELD=(ENDDATE_NEW, TYPE=ASCII, POSITION=4, SEPARATOR=",", FRAME='\"', IF MATCH THEN UPDATE.STARTDATE ELSE MASTER2.ENDDATE)
  /FIELD=(CURRENT_NEW, TYPE=ASCII, POSITION=5, SEPARATOR=",", FRAME='\"', IF MATCH THEN "N" ELSE MASTER2.CURRENT)
  /OMIT WHERE MASTER2.PRODUCTCODE EQ ""
/OUTFILE=master2.dat
# Add new records
  /PROCESS=DELIMITED
  /FIELD=(PRODUCTCODE, TYPE=ASCII, POSITION=1, SEPARATOR=",", FRAME='\"')
  /FIELD=(UPDATE.COST, TYPE=NUMERIC, POSITION=2, SEPARATOR=",", FRAME='\"')
  /FIELD=(UPDATE.STARTDATE, TYPE=ASCII, POSITION=3, SEPARATOR=",", FRAME='\"')
  /FIELD=(ENDDATE_NEW="99991231", TYPE=ASCII, POSITION=4, SEPARATOR=",", FRAME='\"')
  /FIELD=(CURRENT_NEW="Y", TYPE=ASCII, POSITION=5, SEPARATOR=",", FRAME='\"')
  /INCLUDE WHERE UPDATE.PRODUCTCODE NE "" AND MASTER2.PRODUCTCODE EQ ""

File master baru akan memiliki nilai berikut:

Kode Produk Biaya Tanggal Mulai Tanggal Akhir Saat ini
C123 125,50 20110228 99991231 Y
F112 2425.00 20120701 99991231 Y
F112 2365.00 20120101 20120701 T
G101 19,25 20110930 99991231 Y
G101 21,25 20110501 20110930 T
J245 550,50 20120701 99991231 Y
J245 450,50 20110430 20120701 T
J245 425,25 20101001 20110430 T
J245 385,25 20100215 20101001 T
M447 101.75 20120701 99991231 Y
S022 101.75 20120701 99991231 Y
S022 98,75 20110515 20120701 T

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana Menemukan Baris Duplikat di SQL?

  2. Apa itu DBMS? – Panduan Komprehensif untuk Sistem Manajemen Basis Data

  3. Acara yang Diperpanjang untuk SSAS

  4. Menghubungkan SQuirreL SQL ke Microsoft Excel

  5. Meminimalkan dampak pelebaran kolom IDENTITAS – bagian 3