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

SCD Tipe 6

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 asli dengan catatan di sumber yang diperbarui berdasarkan menyamakan kunci dari masing-masing. Catatan di sumber pembaruan yang tidak memiliki kecocokan perlu ditambahkan ke master.

Berikut adalah ikhtisar tentang cara memperbarui file atau tabel dimensi menggunakan SCD Tipe 6 di mana saya mempertahankan biaya produk. Pembaruan dilakukan dengan bergabung sehubungan dengan bidang ProductCode .

Ketik 6 SCD

Tipe 6 merupakan hibrida yang merupakan gabungan dari Tipe 1, Tipe 2, dan Tipe 3. Disebut Tipe 6 karena 1+2+3=6. Setiap catatan akan memiliki bidang berikut:

  • Kode Produk :  Ini adalah kolom kunci pengenal.
  • Biaya :Biaya produk saat ini.
  • Biaya Historis :Biaya yang mulai berlaku pada Tanggal Mulai untuk catatan tersebut.
  • Tanggal Mulai :Tanggal mulainya HistoricalCost.
  • Tanggal Akhir :Tanggal saat HistoricalCost untuk dicatat tidak lagi menjadi CurrentCost saat ini. Jika Biaya Historis masih merupakan Biaya saat ini, maka Tanggal Berakhir adalah 99991231.
  • Saat ini :Y jika Biaya masih berlaku, N jika tidak

Untuk saat ini mari kita lihat catatan untuk ProductCode J245. Mari kita mulai kapan Biaya Historis paling awal adalah Biaya saat ini. Biaya Historis sama dengan Biaya. Kemudian ada satu record untuk ProductCode J245 dan memiliki nilai yang ditunjukkan di bawah ini:

Kode Produk Biaya Biaya Historis Tanggal Mulai Tanggal Akhir Saat ini
J245 385,25 385,25 20100215 99991231 Y

Saat Biaya baru perlu diterapkan, nilai dalam catatan pembaruan digunakan untuk menambahkan catatan baru saat ini. Biaya Saat Ini di semua catatan dengan Kode Produk J245 akan diubah menjadi Biaya nilai dari catatan pembaruan saat Biaya Historis tetap sama untuk catatan yang ada. Selain itu, Tanggal Akhir untuk record lama saat ini diubah menjadi StartDate untuk rekor baru saat ini. Dalam catatan dengan ProductCode J245, Biaya Saat Ini bidang dalam file Master yang diperbarui sekarang memiliki nilai di bawah ini:

Kode Produk Biaya Biaya Historis Tanggal Mulai Tanggal Akhir Saat ini
J245 425,25 425,25 20101001 99991231 Y
J245 425,25 385,25 20100215 20101001 T

Sekarang kami akan memperbarui dengan biaya baru berikutnya dan mendapatkan nilai berikut untuk catatan J245:

Kode Produk Biaya Biaya Historis Tanggal Mulai Tanggal Akhir Saat ini
J245 450,50 450,50 20110430 99991231 Y
J245 450,50 425,25 20101001 20110430 T
J245 450,50 385,25 20100215 20101001 T

Pembaruan terakhir membuat catatan yang memiliki nilai berikut:

Kode Produk Biaya Biaya Historis Tanggal Mulai Tanggal Akhir Saat ini
J245 550,50 550,50 20120701 99991231 Y
J245 550,50 450,50 20110430 20120701 T
J245 550,50 425,25 20101001 20110430 T
J245 550,50 385,25 20100215 20101001 T

Berikut adalah nilai dalam file master sebelum memperbarui:

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

Semua data pembaruan akan memiliki Tanggal Mulai yang sama . Sumber update.dat berisi nilai 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 6, 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 bidang akan dipetakan ke master6.CurrentCost dan update.StartDate bidang akan dipetakan ke master6.StartDate . Bidang Bendera adalah bidang yang digunakan untuk menentukan apakah catatan berisi nilai bidang terbaru. Dalam hal ini bidang tersebut adalah master6.current . Jika ini adalah rekor terbaru, maka CurrentCost bidang dan Biaya Riwayat bidang akan memiliki nilai yang sama. Tandai Nilai Positif adalah nilai dalam master6.Current yang menentukan bahwa nilai bidang adalah nilai terbaru untuk ProductCode . Jika demikian, 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 saat rekor terkini.

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, maka Anda harus memilih NOT_SORTED di tarik-turun untuk Opsi Urutan Urutkan di bawah sumber data yang perlu diurutkan.

Berikut adalah skrip pekerjaan pertama:

/INFILE=master6.dat
    /PROCESS=DELIMITED
    /ALIAS=master6
    /FIELD=(PRODUCTCODE, TYPE=ASCII, POSITION=1, SEPARATOR=",", FRAME='\"')
    /FIELD=(CURRENTCOST, TYPE=NUMERIC, POSITION=2, SEPARATOR=",", FRAME='\"')
    /FIELD=(HISTORICALCOST, TYPE=NUMERIC, POSITION=3, SEPARATOR=",", FRAME='\"')
    /FIELD=(STARTDATE, TYPE=ASCII, POSITION=4, SEPARATOR=",", FRAME='\"')
    /FIELD=(ENDDATE, TYPE=ASCII, POSITION=5, SEPARATOR=",", FRAME='\"')
    /FIELD=(CURRENT, TYPE=ASCII, POSITION=6, SEPARATOR=",", FRAME='\"')
/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 NOT_SORTED master6 update WHERE MASTER6.PRODUCTCODE == UPDATE.PRODUCTCODE

/OUTFILE=master6.dat
# Make changes to records that have the same ProductCode
# as records in the update file 
    /PROCESS=DELIMITED
    /FIELD=(MASTER6.PRODUCTCODE, TYPE=ASCII, POSITION=1, SEPARATOR=",", FRAME='\"')
    /FIELD=(UPDATE.COST, TYPE=NUMERIC, POSITION=2, SEPARATOR=",", FRAME='\"')
    /FIELD=(MASTER6.HISTORICALCOST, TYPE=NUMERIC, POSITION=3, SEPARATOR=",", FRAME='\"')
    /FIELD=(MASTER6.STARTDATE, TYPE=ASCII, POSITION=4, SEPARATOR=",", FRAME='\"')
    /FIELD=(ENDDATE_NEW, TYPE=ASCII, POSITION=5, SEPARATOR=",", FRAME='\"', IF MASTER6.CURRENT EQ "Y" THEN UPDATE.STARTDATE ELSE MASTER6.ENDDATE)
    /FIELD=(CURRENT_NEW="N", TYPE=ASCII, POSITION=6, SEPARATOR=",", FRAME='\"')
    /INCLUDE WHERE MASTER6.PRODUCTCODE == UPDATE.PRODUCTCODE

/OUTFILE=master6.dat
# Keep the records that have no updates 
    /PROCESS=DELIMITED
    /FIELD=(MASTER6.PRODUCTCODE, TYPE=ASCII, POSITION=1, SEPARATOR=",", FRAME='\"')
    /FIELD=(MASTER6.CURRENTCOST, TYPE=NUMERIC, POSITION=2, SEPARATOR=",", FRAME='\"')
    /FIELD=(MASTER6.HISTORICALCOST, TYPE=NUMERIC, POSITION=3, SEPARATOR=",", FRAME='\"')
    /FIELD=(MASTER6.STARTDATE, TYPE=ASCII, POSITION=4, SEPARATOR=",", FRAME='\"')
    /FIELD=(MASTER6.ENDDATE, TYPE=ASCII, POSITION=5, SEPARATOR=",", FRAME='\"')
    /FIELD=(MASTER6.CURRENT, TYPE=ASCII, POSITION=6, SEPARATOR=",", FRAME='\"')
    /OMIT WHERE MASTER6.PRODUCTCODE == UPDATE.PRODUCTCODE
    /OMIT WHERE MASTER6.PRODUCTCODE EQ ""

/OUTFILE=master6.dat
# Add the records with new product codes
    /PROCESS=DELIMITED
    /FIELD=(UPDATE.PRODUCTCODE, TYPE=ASCII, POSITION=1, SEPARATOR=",", FRAME='\"')
    /FIELD=(UPDATE.COST, TYPE=NUMERIC, POSITION=2, SEPARATOR=",", FRAME='\"')
    /FIELD=(UPDATE.COST, TYPE=NUMERIC, POSITION=3, SEPARATOR=",", FRAME='\"')
    /FIELD=(UPDATE.STARTDATE, TYPE=ASCII, POSITION=4, SEPARATOR=",", FRAME='\"')
    /FIELD=(ENDDATE_NEW="99991231", TYPE=ASCII, POSITION=5, SEPARATOR=",", FRAME='\"')
    /FIELD=(CURRENT_NEW="Y", TYPE=ASCII, POSITION=6, SEPARATOR=",", FRAME='\"')
    /OMIT WHERE UPDATE.PRODUCTCODE EQ ""
    /INCLUDE WHERE UPDATE.PRODUCTCODE

Untuk meninjau,

  • Nilai untuk CurrentCost akan sama untuk semua record yang memiliki ProductCode common yang sama
  • Tanggal Mulai adalah tanggal Biaya Historis menjadi efektif
  • Untuk catatan terbaru dari ProductCode,
    • nilai untuk CurrentCost dan Biaya Historis sama
    • Tanggal Akhir adalah 99991231
    • Nilai dalam Saat Ini adalah Y
  • Untuk catatan yang bukan catatan saat ini
    • Tanggal Akhir adalah tanggal saat Biaya yang lebih baru berikutnya menjadi efektif
    • Bidang Saat ini memiliki N untuk nilai

File master baru tidak akan diurutkan karena catatan master baru saat ini ditambahkan ke bagian bawah file master yang akan memiliki nilai seperti ini:

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara memigrasi database dan file data

  2. Bagaimana Cara Memesan Dengan Dua Kolom di SQL?

  3. SCD Tipe 1

  4. Beberapa Transformasi Agregat APAPUN Rusak

  5. Bahasa Definisi Data SQL