2009-06-10 22 views
6

मैं डेटा इनपुट वेयरहाउसिंग और एसएसआईएस/एसएसएएस से संबंधित होने पर शून्य या खाली डेटा मूल्यों को संभालने के लिए सबसे अच्छा अभ्यास क्या है, इस पर अपना इनपुट पूछना चाहता हूं।डाटावायरहाउस में नल को संभालना

मेरे पास कई तथ्य और आयाम सारणी हैं जिनमें विभिन्न पंक्तियों में शून्य मान होते हैं।

सुनिश्चित वर्णन:

1) सबसे अच्छा तरीका है अशक्त तारीख/बार मानों का प्रबंधन कैसे क्या है? क्या मुझे अपने समय या दिनांक आयामों में 'डिफ़ॉल्ट' पंक्ति बनाना चाहिए और शून्य न मिलने पर एसएसआईएस को डिफ़ॉल्ट पंक्ति पर इंगित करना चाहिए?

2) आयाम डेटा के अंदर नल/खाली मानों को संभालने का सबसे अच्छा तरीका क्या है। पूर्व: मेरे पास 'खाता' आयामों में कुछ पंक्तियां हैं जिनमें खाता नाम कॉलम में खाली (शून्य नहीं) मान हैं। क्या मुझे कॉलम के अंदर इन खाली या शून्य मानों को एक विशिष्ट डिफ़ॉल्ट मान में परिवर्तित करना चाहिए?

3) उपरोक्त बिंदु 1 के समान - अगर मैं एक फैक्टटेबल पंक्ति के साथ समाप्त होता हूं तो मुझे क्या करना चाहिए जिसमें आयाम कॉलम में से कोई रिकॉर्ड नहीं है? यदि ऐसा होता है तो क्या मुझे प्रत्येक आयाम के लिए डिफ़ॉल्ट आयाम रिकॉर्ड की आवश्यकता है?

4) एसक्यूएल सर्वर एकीकरण सेवाओं (एसएसआईएस) में इन ऑपरेशन को संभालने के तरीके के संबंध में कोई सुझाव या सुझाव? उपयोग करने के लिए सर्वोत्तम डेटा प्रवाह विन्यास या सर्वोत्तम परिवर्तन वस्तुओं सहायक होगा।

धन्यवाद :-)

उत्तर

4

पिछले जवाब के रूप में कहा गया है वहाँ कई अलग अलग एक आयाम के लिए शून्य मानों पर संलग्न अर्थ हो सकता है, अज्ञात, न लागू हो, अज्ञात आदि यदि यह उपयोगी अपनी ऐप्लिकेशन जोड़ने "में उन दोनों के बीच भेद करने के लिए सक्षम होने के लिए है छद्म "आयाम प्रविष्टियां मदद कर सकते हैं।

किसी भी मामले में मैं नल तथ्य विदेशी कुंजी या आयाम फ़ील्ड रखने से बचूंगा, यहां तक ​​कि एक भी 'अज्ञात' आयाम मान होने से आपके उपयोगकर्ताओं को उन प्रश्नों को परिभाषित करने में मदद मिलेगी जिनमें कैच-ऑल ग्रुपिंग शामिल है जहां डेटा की गुणवत्ता 100 नहीं है % (और यह कभी नहीं है)।

एक बहुत ही सरल चाल जिसका मैं उपयोग कर रहा हूं और मुझे अभी तक काट नहीं दिया है, टी-एसक्यूएल में int पहचान (1,1) का उपयोग करके मेरे आयाम सरोगेट कुंजी को परिभाषित करना है (1 से शुरू करें और प्रति 1 से बढ़ोतरी पंक्ति)। छद्म कुंजी ("अनुपलब्ध", "असाइन नहीं किया गया", "लागू नहीं है") को नकारात्मक स्याही के रूप में परिभाषित किया जाता है और ईटीएल प्रक्रिया की शुरुआत में संग्रहीत प्रक्रिया द्वारा पॉप्युलेट किया जाता है।

उदाहरण के लिए एक मेज


    CREATE TABLE [dbo].[Location] 
    (
     [LocationSK] [int] IDENTITY(1,1) NOT NULL, 
     [Name] [varchar](50) NOT NULL, 
     [Abbreviation] [varchar](4) NOT NULL, 
     [LocationBK] [int] NOT NULL, 
     [EffectiveFromDate] [datetime] NOT NULL, 
     [EffectiveToDate] [datetime] NULL, 
     [Type1Checksum] [int] NOT NULL, 
     [Type2Checksum] [int] NOT NULL, 
    ) ON [PRIMARY] 

के रूप में बनाया और एक संग्रहीत प्रक्रिया


Insert Into dbo.Location (LocationSK, Name, Abbreviation, LocationBK, 
         EffectiveFromDate, Type1Checksum, Type2Checksum) 
      Values (-1, 'Unknown location', 'Unk', -1, '1900-01-01', 0,0) 

साथ तालिका पॉप्युलेट मैं इसे आयाम है जो कम से कम एक ऐसे छद्म पंक्ति के लिए एक नियम बना दिया है उन मामलों में उपयोग किया जाता है जहां आयाम लुकअप विफल रहता है और ऐसी पंक्तियों को आवंटित तथ्यों की संख्या को ट्रैक करने के लिए अपवाद रिपोर्ट बनाने के लिए।

+0

दिलचस्प - आप SSAS के साथ मुद्दों नकारात्मक पहचान मूल्यों के बारे में एक फिट पिचिंग में भाग है? मुझे पता है कि एसएसएएस से नफरत है जब मेरे पास कुछ समय पहले पहचान के रूप में 0 मूल्य था। – rrydman

+0

हमने अभी तक एसएसएएस का उपयोग शुरू नहीं किया है, हम इसे कुछ हफ्तों में उपयोग करना शुरू कर देंगे। मुझे लगता है हम देखेंगे! –

+0

मैंने वही किया, लेकिन मैंने केवल 0 का उपयोग किया। मेरी सभी टेबलों के लिए पहचान कॉलम 1 से शुरू होता है, इसलिए मैंने लगभग हर तालिका के लिए "अज्ञात" के लिए 0 पंक्ति डाली। मैंने पाया कि कई छद्म-सदस्यों की कभी आवश्यकता नहीं थी, इसलिए मैं हमेशा 0 का उपयोग कर सकता था, जिसका अर्थ है कि जब भी मैं एक पूर्ण या विफल लुकअप में भाग गया तो मैं इसे ईटीएल में हार्डकोड कर सकता था। बेशक, कभी-कभी न्यूल के अलग-अलग अर्थ होते हैं, लेकिन फिर मैं सदस्य के नाम का नाम बदल सकता हूं "कोई नहीं," "अज्ञात," "एन/ए," या जो भी व्यवसाय की आवश्यकता थी। –

1
  1. या तो शून्य या उपयुक्त अर्थ के साथ अपनी तिथि आयाम से एक आरक्षित आईडी। याद रखें कि वास्तव में कई अलग-अलग अर्थ हो सकते हैं, यह अज्ञात, अपरिवर्तनीय, अमान्य, आदि हो सकता है

  2. मैं खाली स्ट्रिंग (और न्यूलबल) पसंद करूंगा, लेकिन प्रोजेक्ट में मैं अब काम कर रहा हूं खाली स्ट्रिंग को परिवर्तित करता हूं न्यूल और उन्हें डेटाबेस में अनुमति देता है। चर्चा की जाने वाली संभावित समस्या यह है कि एक खाली मध्य प्रारंभिक (कोई मध्य नाम नहीं, इसलिए मध्य प्रारंभिक खाली होने के लिए जाना जाता है) अज्ञात मध्य प्रारंभिक या समान अर्थशास्त्र से अलग है। पैसे के लिए, हमारा मॉडल NULLs को अनुमति देता है - मुझे तथ्यों में इसके साथ एक बड़ी समस्या है, आम तौर पर, वे वास्तव में 0 होना चाहिए, वे हमेशा 0 के रूप में उपयोग किए जाते हैं और उन्हें हमेशा ISNULL() के साथ लपेटना होता है। लेकिन खाली स्ट्रिंग को एनयूएलएल में परिवर्तित करने की ईटीएल नीति के कारण, वे न्यूल पर सेट किए गए थे - लेकिन यह निश्चित-चौड़ाई परिवहन फ़ाइल प्रारूप का एक आर्टिफैक्ट था जिसमें कुछ स्रोत सिस्टम से 0 की बजाय रिक्त स्थान थे।

  3. हमारे तथ्य टेबल आमतौर पर सभी आयामों के आधार पर एक पी है, इसलिए यह अनुमति नहीं दी जाएगी - यह एक डमी या अज्ञात आयाम

  4. लघु उद्योगों में से जोड़ा जा होगा मैं एक ट्रिम घटक है जो ट्रिम कर दिया सभी तारों के सिरों से रिक्त स्थान। हमें आम तौर पर एसएसआईएस में बहुत सारी तारीख सत्यापन और रूपांतरण करना पड़ता था, जो एक घटक में सबसे अच्छा होता।

1

इनपुट के लिए धन्यवाद,

दो बातें मैं अपने नवीनतम परियोजना पर किया है:

1) अज्ञात/विशेष आयाम मान के लिए नकारात्मक आईडी कुंजियों के बारे में स्टीव के सुझाव प्रयुक्त। इसने पूरी तरह से काम किया है और एसएसएएस घन निर्माण प्रक्रिया के दौरान कोई समस्या नहीं आई है।

2) यह मानने के लिए ट्रांसफॉर्मेशन बनाया गया है कि कोई मान शून्य है या नहीं, और यदि ऐसा है, तो -1 (आयाम में अज्ञात रिकॉर्ड) में कनवर्ट करें या यदि यह माप मान है, तो 0 में कनवर्ट करें। अभिव्यक्तियों को उदाहरण के रूप में नीचे दिखाया गया है (मैं व्युत्पन्न स्तंभ परिवर्तनों में) इन का प्रयोग किया:

ISNULL(netWeight) ? 0 : netWeight // This is an example of a Measure column 
ISNULL(completeddateid) ? -1 : completeddateid // This is an example of a dimension key column 

उम्मीद है कि इस मदद करता है भविष्य ;-)

0

एक अन्य समाधान मैं सुझाव दे सकते हैं में किसी और कि है ETL-step दौरान एक हस्तांतरण तालिका में परिभाषित किया गया है जो रिकॉर्ड आयातित सभी आवश्यक परिवर्तनों के बाद अस्थायी रूप से संग्रहीत हैं। मैं उस स्थानांतरण तालिका में कुछ अतिरिक्त विशेषताओं को जोड़ दूंगा; मूल मूल्य-गुणों के बगल में जो पूर्ण या कुछ अन्य वांछित मूल्य हो सकते हैं; एक तरफ समस्या की पहचान करने वाले "कोडेड" मान को सम्मिलित करने के लिए और विशेषता-नाम जिसमें गलत मान हुआ।

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

उदा।

error-code attribute= -1 = NULL date -2 = NULL numerical value -3 = NULL PK -4 = NULL text value 

और अन्य गुण = IdOrder, BirthDate, OrderAmount, आदि

बेशक आप एक बहुत अधिक परेशानी रिकॉर्ड 1 से अधिक गलत (शून्य) मूल्य हो सकता है अगर में हैं के

, लेकिन इस मामले में कोई भी या तो "ट्रेसिंग" विशेषताओं या "स्रोत पर वापस लौटने" की संख्या का विस्तार कर सकता है और यह पता लगा सकता है कि समस्या कहां और क्यों हुई (विकास विभाग के साथ।)

यह कुछ हद तक एक निश्चित कदम है, हालांकि पूर्णता और शुद्धता के लिए मुझे लगता है कि यह अपरिहार्य और आवश्यक है क्योंकि अन्यथा किसी को बुरी तरह से एकत्रित जानकारी का सामना करना पड़ सकता है।

हो सकता है कि यह भी किसी को मदद मिलेगी;)

संबंधित मुद्दे