डायमेंशनल डेटा जो धीरे-धीरे या अप्रत्याशित रूप से बदलता है, उसे स्लोली चेंजिंग डाइमेंशन (एससीडी) विश्लेषण में कैप्चर किया जाता है। डेटा वेयरहाउस परिवेश में, एक आयाम तालिका में एक प्राथमिक कुंजी होती है जो प्रत्येक रिकॉर्ड और जानकारी के अन्य टुकड़ों की विशिष्ट रूप से पहचान करती है जिन्हें आयामी डेटा के रूप में जाना जाता है।
विभिन्न SCD प्रकारों के लिए सभी अद्यतन विधियों को IRI CoSort में SortCL प्रोग्राम का उपयोग करके पूरा किया जा सकता है। IRI Voracity में SortCL प्रोग्राम चलाते समय उपयोग की जाने वाली SCD जॉब स्क्रिप्ट बनाने में सहायता करने के लिए एक विज़ार्ड है। अधिकांश विविधताएं मूल मास्टर डेटा स्रोत से रिकॉर्ड का मिलान करने के लिए एक पूर्ण बाहरी जुड़ाव का उपयोग करती हैं, जिसमें प्रत्येक से एक कुंजी की बराबरी करने के आधार पर अद्यतन स्रोत में रिकॉर्ड होते हैं। मैचों के साथ रिकॉर्ड को मास्टर में अद्यतन करने की आवश्यकता है। अद्यतन स्रोत में ऐसे रिकॉर्ड जिनका मिलान नहीं है, उन्हें मास्टर में जोड़ने की आवश्यकता है।
यहां एससीडी टाइप 3 का उपयोग करके एक आयामी फ़ाइल को अपडेट करने का एक सिंहावलोकन है जहां मैं उत्पाद लागतों को बनाए रख रहा हूं। ProductCode . फ़ील्ड के संबंध में जुड़कर अपडेट पूरा किया जाता है ।
टाइप 3 एससीडी
टाइप 3 मॉडल के साथ, वर्तमान डेटा और ऐतिहासिक डेटा को एक ही रिकॉर्ड में ले जाया जाता है। इतिहास को कितना रखा जाना चाहिए, यह तय करने वाली प्रमुख चीजों में से एक है। हमारे उदाहरण के साथ, मैं तीन प्रारंभ तिथियों के लिए लागत रखूंगा। समाप्ति तिथि वह तिथि है जब रिकॉर्ड में लागत अब प्रभावी नहीं होती है। यदि लागत अभी भी प्रभावी है, तो EndDate1 फ़ील्ड को 99991231 पर सेट किया जाएगा। यह इस फ़ील्ड में खाली मान से बचने के लिए है। यहां शुरुआती मास्टर स्रोत (master3.dat) में निहित मान दिए गए हैं:
| ProductCode | Cost1 | StartDate1 | EndDate1 | Cost2 | StartDate2 | EndDate2 | Cost3 | StartDate3 | EndDate3 |
|---|---|---|---|---|---|---|---|---|---|
| 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 |
सभी अद्यतन अभिलेखों की प्रारंभ दिनांक समान होती है। Update.dat स्रोत में रिकॉर्ड के लिए निम्न फ़ील्ड मान शामिल हैं:
| ProductCode | लागत | StartDate |
|---|---|---|
| F112 | 2425.00 | 20120701 |
| J245 | 550.50 | 20120701 |
| M447 | 101.75 | 20120701 |
| S022 | 101.75 | 20120701 |
नीचे अद्यतन डेटा है। अद्यतन किए गए प्रत्येक रिकॉर्ड के लिए, प्रत्येक लागत, प्रारंभ दिनांक और समाप्ति तिथि को एक सेट द्वारा दाईं ओर ले जाया जाता है। रिकॉर्ड के लिए पुराने वर्तमान समूह में, नए अद्यतन वर्तमान सेट के लिए समाप्ति तिथि को प्रारंभ तिथि में बदल दिया जाता है। पुराने तीसरे सेट के लिए कोई भी मान छोड़ दिया जाता है।
| ProductCode | Cost1 | StartDate1 | EndDate1 | Cost2 | StartDate2 | EndDate2 | Cost3 | StartDate3 | EndDate3 |
|---|---|---|---|---|---|---|---|---|---|
| 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 |
आईआरआई वर्कबेंच में, डायमेंशनल फाइल्स और टेबल्स को अपडेट करने के लिए स्क्रिप्ट के निर्माण में सहायता करने के लिए वोरासिटी विजार्ड है। यह विज़ार्ड नेविगेशन बार पर वोरसिटी ड्रॉपडाउन में स्थित है। सबसे पहले आप SCD टाइप को चुनें। फिर वह विंडो जहाँ आप उन फ़ाइलों का चयन करते हैं जिनका उपयोग अद्यतन को संसाधित करने के लिए किया जाता है, प्रदर्शित होती है।

अगली स्क्रीन पर शीर्ष तालिका में, आप निर्धारित करते हैं कि कैसे अद्यतन किया जा रहा डेटा मास्टर को मैप किया जाता है। स्क्रीन पर मध्य समूह में, उन फ़ील्ड्स को चुनें जो अद्यतन किए जा रहे रिकॉर्ड के लिए स्थिति मान देते हैं।
वर्तमान . के अंतर्गत ड्रॉपडाउन में और ऐतिहासिक क्षेत्र समूह , पहला सेट जिसे आप परिभाषित करते हैं, वर्तमान मानों के लिए फ़ील्ड नाम देता है। मान फ़ील्ड वह आयामी मान है जिसे अद्यतन किया जा रहा है। प्रारंभ फ़ील्ड वह फ़ील्ड है जो निर्धारित करती है कि मान फ़ील्ड सक्रिय हो गया और अंतिम फ़ील्ड निर्धारित करता है कि यह कब मान्य नहीं है। फिर जितने ऐतिहासिक मूल्यों को रखा जा रहा है, उतने सेटों को परिभाषित करें।

यहां कार्य स्क्रिप्ट है जो मास्टर फ़ाइल को अपडेट करेगी:
/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 ""