डायमेंशनल डेटा जो धीरे-धीरे या अप्रत्याशित रूप से बदलता है, उसे स्लोली चेंजिंग डाइमेंशन (एससीडी) विश्लेषण में कैप्चर किया जाता है। डेटा वेयरहाउस वातावरण में, एक आयाम तालिका में एक प्राथमिक कुंजी होती है जो प्रत्येक रिकॉर्ड और जानकारी के अन्य टुकड़ों की विशिष्ट रूप से पहचान करती है जिन्हें आयामी डेटा के रूप में जाना जाता है।
विभिन्न SCD प्रकारों के लिए सभी अद्यतन विधियों को IRI CoSort में SortCL प्रोग्राम का उपयोग करके पूरा किया जा सकता है। IRI Voracity में SortCL प्रोग्राम चलाते समय उपयोग की जाने वाली SCD जॉब स्क्रिप्ट बनाने में सहायता करने के लिए एक विज़ार्ड है। अधिकांश विविधताएं मूल डेटा स्रोत से रिकॉर्ड का मिलान करने के लिए एक पूर्ण बाहरी जुड़ाव का उपयोग करती हैं, जिसमें प्रत्येक से एक कुंजी की बराबरी करने के आधार पर अद्यतन स्रोत में रिकॉर्ड होते हैं। अद्यतन स्रोत में ऐसे रिकॉर्ड जिनका मिलान नहीं है, उन्हें मास्टर में जोड़ने की आवश्यकता है।
यहां एससीडी टाइप 6 का उपयोग करके एक आयामी फ़ाइल या तालिका को अपडेट करने का एक सिंहावलोकन है जहां मैं उत्पाद लागतों को बनाए रख रहा हूं। ProductCode . क्षेत्र के संबंध में शामिल होने से अद्यतन पूरा किया जाता है ।
टाइप 6 एससीडी
टाइप 6 एक हाइब्रिड है जो टाइप 1, टाइप 2 और टाइप 3 का संयोजन है। इसे टाइप 6 कहा जाता है क्योंकि 1+2+3=6। प्रत्येक रिकॉर्ड में निम्नलिखित फ़ील्ड होंगे:
- उत्पाद कोड : यह पहचानकर्ता कुंजी फ़ील्ड है।
- लागत :उत्पाद की वर्तमान लागत।
- ऐतिहासिक लागत :वह लागत जो उस रिकॉर्ड के लिए StartDate पर प्रभावी हो गई।
- प्रारंभ दिनांक :वह तारीख जब ऐतिहासिक लागत प्रभावी हो गई।
- समाप्ति तिथि :वह तिथि जिस पर रिकॉर्ड के लिए ऐतिहासिक लागत वर्तमान वर्तमान लागत नहीं थी। यदि ऐतिहासिक लागत अभी भी वर्तमान लागत है, तो समाप्ति तिथि 99991231 है।
- वर्तमान :वाई अगर लागत अभी भी चालू है, एन अगर यह नहीं है
अभी के लिए आइए ProductCode . के रिकॉर्ड देखें जे245. आइए शुरू करते हैं जब सबसे पहले ऐतिहासिक लागत वर्तमान लागत थी। ऐतिहासिक लागत लागत के समान है। फिर ProductCode J245 के लिए एक रिकॉर्ड होता है और इसके नीचे दिखाए गए मान होते हैं:
ProductCode | लागत | ऐतिहासिक लागत | StartDate | समाप्ति तिथि | वर्तमान |
---|---|---|---|---|---|
J245 | 385.25 | 385.25 | 20100215 | 99991231 | Y |
जब एक नई लागत को लागू करने की आवश्यकता होती है, तो अद्यतन रिकॉर्ड के मानों का उपयोग एक नया वर्तमान रिकॉर्ड जोड़ने के लिए किया जाता है। वर्तमान लागत उत्पाद कोड के साथ सभी रिकॉर्ड में J245 को लागत . में बदल दिया जाएगा ऐतिहासिक लागत . के दौरान अद्यतन रिकॉर्ड से मूल्य मौजूदा रिकॉर्ड के लिए वही रहता है। इसके अतिरिक्त, समाप्ति तिथि पुराने वर्तमान रिकॉर्ड के लिए प्रारंभ दिनांक . में बदल दिया गया है नए वर्तमान रिकॉर्ड के लिए। ProductCode . के साथ रिकॉर्ड में J245, वर्तमान लागत अद्यतन मास्टर फ़ाइल में फ़ील्ड में अब निम्न मान हैं:
ProductCode | लागत | ऐतिहासिक लागत | StartDate | समाप्ति तिथि | वर्तमान |
---|---|---|---|---|---|
J245 | 425.25 | 425.25 | 20101001 | 99991231 | Y |
J245 | 425.25 | 385.25 | 20100215 | 20101001 | N |
अब हम अगली नई लागत के साथ अपडेट करेंगे और J245 रिकॉर्ड के लिए निम्नलिखित मान प्राप्त करेंगे:
ProductCode | लागत | ऐतिहासिक लागत | StartDate | समाप्ति तिथि | वर्तमान |
---|---|---|---|---|---|
J245 | 450.50 | 450.50 | 20110430 | 99991231 | Y |
J245 | 450.50 | 425.25 | 20101001 | 20110430 | N |
J245 | 450.50 | 385.25 | 20100215 | 20101001 | N |
अंतिम अपडेट ऐसे रिकॉर्ड बनाता है जिनमें ये मान होते हैं:
ProductCode | लागत | ऐतिहासिक लागत | StartDate | समाप्ति तिथि | वर्तमान |
---|---|---|---|---|---|
J245 | 550.50 | 550.50 | 20120701 | 99991231 | Y |
J245 | 550.50 | 450.50 | 20110430 | 20120701 | N |
J245 | 550.50 | 425.25 | 20101001 | 20110430 | N |
J245 | 550.50 | 385.25 | 20100215 | 20101001 | N |
यहाँ अद्यतन करने से पहले मास्टर फ़ाइल में मान दिए गए हैं:
ProductCode | लागत | ऐतिहासिक लागत | StartDate | समाप्ति तिथि | वर्तमान |
---|---|---|---|---|---|
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 | N |
J245 | 450.50 | 450.50 | 20110430 | 99991231 | Y |
J245 | 450.50 | 425.25 | 20101001 | 20110430 | N |
J245 | 450.50 | 385.25 | 20100215 | 20101001 | N |
S022 | 98.75 | 98.75 | 20110515 | 99991231 | Y |
सभी अपडेट डेटा का प्रारंभ दिनांक समान होगा . Update.dat स्रोत में निम्नलिखित मान शामिल हैं:
ProductCode | लागत | StartDate |
---|---|---|
F112 | 2425.00 | 20120701 |
J245 | 550.50 | 20120701 |
M447 | 101.75 | 20120701 |
S022 | 101.75 | 20120701 |
आईआरआई वर्कबेंच में, डायमेंशनल फाइल्स और टेबल्स को अपडेट करने के लिए स्क्रिप्ट के निर्माण में सहायता करने के लिए वोरासिटी विजार्ड है। यह विज़ार्ड नेविगेशन बार पर वोरसिटी ड्रॉपडाउन में स्थित है। सबसे पहले आप SCD टाइप को चुनें। फिर विंडो जहां आप उन स्रोतों का चयन करते हैं जिनका उपयोग अद्यतन को संसाधित करने के लिए किया जाता है, प्रदर्शित होता है। टाइप 6 के लिए, लक्ष्य आम तौर पर मूल मास्टर फ़ाइल या टेबल होता है।
अगली स्क्रीन के साथ, आप यह निर्धारित करते हैं कि अपडेट डेटा कैसे मैप किया जाता है और अन्य फ़ील्ड या कॉलम मान कैसे सेट किए जाते हैं। अद्यतन.लागत फ़ील्ड को master6.CurrentCost . पर मैप किया जाएगा और अपडेट.स्टार्टडेट फ़ील्ड को master6.StartDate . पर मैप किया जाएगा . ध्वज क्षेत्र वह फ़ील्ड है जिसका उपयोग यह निर्धारित करने के लिए किया जाता है कि रिकॉर्ड में नवीनतम फ़ील्ड मान हैं या नहीं। इस मामले में वह फ़ील्ड master6.current . है . यदि यह सबसे वर्तमान रिकॉर्ड है, तो CurrentCost फ़ील्ड और इतिहास लागत फ़ील्ड में समान मान होंगे। सकारात्मक मान फ़्लैग करें master6.Current . में मान है जो निर्धारित करता है कि फ़ील्ड मान ProductCode . के लिए नवीनतम मान हैं . जब ऐसा होता है, तो हमारे उदाहरण में मान "Y" होता है और नकारात्मक मान ध्वजांकित करें "एन" है। अंतिम फ़ील्ड इसमें उस फ़ील्ड का नाम शामिल होता है जो यह निर्धारित करने के लिए उपयोग किया गया मान रखता है कि रिकॉर्ड की लागत अब प्रभावी नहीं है और Master.EndDate उस मूल्य को धारण करता है। अंतिम मूल्य अंतिम फ़ील्ड . के मान के रूप में उपयोग किया जाता है जब रिकॉर्ड चालू हो।
अगली स्क्रीन मास्टर और अद्यतन स्रोतों के साथ किए गए जुड़ाव को परिभाषित करने के लिए है। आपको ध्यान देना चाहिए कि दोनों स्रोतों को उत्पाद कोड . के संबंध में आदेशित किया जाना चाहिए . यदि वे नहीं हैं, तो आपको क्रमबद्ध करें विकल्प के लिए ड्रॉपडाउन में NOT_SORTED का चयन करना होगा डेटा स्रोत के तहत जिसे सॉर्ट करने की आवश्यकता है।
यहाँ पहली नौकरी की स्क्रिप्ट है:
/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
समीक्षा करने के लिए,
- वर्तमान लागत . का मान उन सभी रिकॉर्ड के लिए समान होगा जिनमें एक समान उत्पाद कोड है
- प्रारंभ दिनांक वह तारीख है जब ऐतिहासिक लागत प्रभावी हो गया
- एक उत्पाद कोड, के नवीनतम रिकॉर्ड के लिए
- वर्तमान लागत . के लिए मान और ऐतिहासिक लागत वही हैं
- समाप्ति तिथि 99991231 है
- मान वर्तमान . में वाई है
- उन रिकॉर्ड्स के लिए जो वर्तमान रिकॉर्ड नहीं हैं
- समाप्ति तिथि वह तारीख है जब अगली और हालिया लागत प्रभावी हो गया
- फ़ील्ड वर्तमान मान के लिए N है
नई मास्टर फ़ाइल को सॉर्ट नहीं किया जाएगा क्योंकि नए वर्तमान मास्टर रिकॉर्ड को मास्टर फ़ाइल के निचले भाग में जोड़ा गया था, जिसमें इस तरह के मान होंगे:
ProductCode | लागत | ऐतिहासिक लागत | StartDate | समाप्ति तिथि | वर्तमान |
---|---|---|---|---|---|
C123 | 125.50 | 125.50 | 20110228 | 99991231 | Y |
F112 | 2425.00 | 2365.00 | 20120101 | 20120701 | N |
G101 | 19.25 | 19.25 | 20110930 | 99991231 | Y |
G101 | 19.25 | 21.25 | 20110501 | 20110930 | N |
J245 | 550.50 | 450.50 | 20110430 | 20120701 | N |
J245 | 550.50 | 425.25 | 20101001 | 20110430 | N |
J245 | 550.50 | 385.25 | 20100215 | 20101001 | N |
S022 | 101.75 | 98.75 | 20110515 | 20120701 | N |
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 |