पावर क्वेरी का उपयोग करके संख्याओं और टेक्स्ट को एक कॉलम में अलग करें

Latest Technology, (लेटेस्ट टेक न्यूज़) Gadget (गैजेट्स) …

एक्सेल डेटा के साथ सेल्फ-सर्विस बीआई के लिए यह एक विशिष्ट मामला है।

कुछ दिन पहले, एक ग्राहक ने मुझसे निम्नलिखित प्रश्न पूछा:

मेरे पास एक एक्सेल शीट है जिसमें एक कॉलम में संख्याएं और टेक्स्ट हैं। मैं इस शीट को पावर बीआई में आयात करना चाहता हूं और उस कॉलम में संख्याओं पर विश्लेषण करना चाहता हूं।

मैं उस कॉलम के पाठ से संख्याओं को कैसे अलग कर सकता हूँ?

याद रखें कि मुझे उस कॉलम में भी टेक्स्ट की आवश्यकता है।

मैं इस स्थिति में कभी नहीं था, इसलिए मैंने सबसे पहले उस तकनीक का उपयोग करना शुरू किया जो मुझे पता थी।

मैंने इसी समस्या के साथ एक डमी एक्सेल बनाया, जो इस तरह दिखता है:

image 207
चित्र 1 – एक्सेल में नमूना डेटा (चित्र लेखक द्वारा)

PoC बनाने के लिए, मैंने सबसे पहले इस डेटा को SQL सर्वर डेटाबेस में लोड किया, यह देखने के लिए कि इसे वहां कैसे हल किया जाए।

SQL का उपयोग करके समस्या का समाधान करना

टी-एसक्यूएल के दो कार्य हैं जो ऐसे परिदृश्यों में सहायक होते हैं:

  • TRY_CONVERT()
    • यह किसी मान को लक्ष्य डेटा प्रकार में बदलने का प्रयास करता है। यदि यह विफल रहता है, तो यह NULL लौटाता है।
  • ISNUMERIC()
    • जाँचता है कि कोई मान एक संख्यात्मक मान है या नहीं। यदि हां, तो यह 1 लौटाता है। अन्यथा, 0 लौटाता है।

इस ज्ञान के आधार पर, मैंने मानों को दो कॉलमों में अलग करने के लिए एक प्रश्न लिखा। एक संख्याओं के साथ और एक पाठ के साथ:

SELECT (Values)

            ,TRY_CONVERT(decimal(18, 5), (Values))         AS    (Number)

            ,IIF(ISNUMERIC((Values)) = 0, (Values), NULL) AS    (Text)

  FROM (dbo).(MixedValues);

परिणाम निम्न तालिका है:

image
चित्र 2 – पाठ से संख्याओं को अलग करने के लिए टी-एसक्यूएल क्वेरी (चित्र लेखक द्वारा)

यदि आप ध्यान से देखें, तो आप देखेंगे कि पंक्ति 17 को एक पाठ के रूप में पहचाना गया है।

ऐसा इसलिए है क्योंकि संख्या में एक रिक्त स्थान है।

मैं इस पर बाद में वापस आऊंगा.

पावर क्वेरी पर स्विच करना – IsNaN() का प्रयास करना

अब, मैंने एक्सेल को पावर क्वेरी में लोड किया है।

मैंने कॉलम को टेक्स्ट के रूप में परिभाषित किया और इस चुनौती पर काम करना शुरू किया।

पहला प्रयास का उपयोग करता है संख्या.IsNaN() समारोह।

यदि मान NaN है तो यह फ़ंक्शन सत्य लौटाता है। “NaN” एक प्लेसहोल्डर है जो लागू नहीं होता है, उदाहरण के लिए, 0 से विभाजन के कारण।

मैंने यह निर्धारित करने का प्रयास किया कि कोई पाठ NaN के समतुल्य है या नहीं।

यह परिकलित कॉलम के लिए एम-कोड है:

if Number.IsNaN((Value)) = true
then (Value)
else null

परिणाम ने मुझे चौंका दिया:

image 211
चित्र 3 – संख्या.IsNaN() के साथ परिणाम। यह फ़ंक्शन संख्याओं को क्यों नहीं पहचानता? (चित्र लेखक द्वारा)

अजीब बात यह है कि इसका परिणाम यह होता है कि यह किसी संख्या को संख्या में नहीं बदल सकता।

मेरा मानना ​​है कि ऐसा इसलिए होता है क्योंकि कॉलम का डेटा प्रकार टेक्स्ट है।

फिर, मैंने कॉलम को एक संख्या में बदलने और परिणाम में IsNaN() फ़ंक्शन लागू करने का प्रयास किया:

if Number.IsNaN(Number.From((Value))) = false
then Number.From((Value))
else null

अब, संख्याओं को संख्याओं में बदल दिया गया है, लेकिन पाठ मानों के परिणामस्वरूप एक त्रुटि उत्पन्न होती है:

image 3
चित्र 4 – परिवर्तित मानों पर IsNaN() लागू करने से संख्याएँ वापस आ जाती हैं, लेकिन पाठ के लिए एक त्रुटि होती है (चित्र लेखक द्वारा)

अब तर्क संख्याओं के लिए काम करता है।

लेकिन पाठ वाली पंक्तियों के लिए रूपांतरण विफल हो जाता है। इसके परिणामस्वरूप त्रुटियों वाली पंक्तियाँ उत्पन्न होती हैं।

पावर क्वेरी में वैल्यू.आईएस () का प्रयास कर रहा हूं

आइए एक अन्य फ़ंक्शन आज़माएँ: मान.है()

यह फ़ंक्शन जाँचता है कि कोई मान डेटा प्रकार के साथ संगत है या नहीं।

यह ऊपर दिखाए गए ISNUMERIC() फ़ंक्शन के समतुल्य होना चाहिए:

if Value.Is((Value), Number.Type) = true
then Number.From((Value))
else null

दुर्भाग्य से, यह फ़ंक्शन अपेक्षित परिणाम देने में भी विफल रहा:

image 1
चित्र 5 – वैल्यू.आईएस () फ़ंक्शन का प्रयास करते समय परिणाम (लेखक द्वारा चित्र)

जब मैंने मान को पहले एक संख्या में परिवर्तित करके उपरोक्त जैसा ही तरीका आजमाया, तो मुझे पहले जैसा ही परिणाम मिला:

image 2
चित्र 6 – मानों को पहले किसी संख्या में बदलने का प्रयास करते समय त्रुटियाँ (चित्र लेखक द्वारा)

इसलिए, मुझे संदेह है कि फ़ंक्शन वैल्यू.आईएस() एक संख्या डेटा प्रकार की अपेक्षा करता है, लेकिन इससे मुझे कोई मतलब नहीं है।

इस समय, मेरे पास गहन शोध के लिए समय नहीं था, क्योंकि मेरे पास समय की कमी थी।

अब दृष्टिकोण बदलने का समय आ गया है।

स्विचिंग अवधारणा

अब मैंने पता लगाया कि पावर क्वेरी में त्रुटियों को कैसे पकड़ा जाए।

मेरा विचार था: क्या होगा यदि मैं रूपांतरण त्रुटि पकड़ सकूं और इस जानकारी का उपयोग कर सकूं?

मुझे उपयोगी जानकारी वाला यह पृष्ठ मिला: त्रुटियाँ – पॉवरक्वेरी एम | माइक्रोसॉफ्ट लर्न

इससे, मैंने यह अभिव्यक्ति निकाली:

try Number.From((Value)))

इस अभिव्यक्ति के साथ एक परिकलित कॉलम जोड़ने के बाद, मुझे यह परिणाम मिला:

image 4
चित्र 7 – प्रयास के साथ परिणाम (चित्र लेखक द्वारा)

मैं आशावादी था, क्योंकि मुझे कोई त्रुटि नहीं मिली।

अगला, रिकॉर्ड्स का विस्तार करना था:

image 208
चित्र 8 – प्रयास कॉल के रिकॉर्ड आउटपुट से मूल्य का विस्तार करें (लेखक द्वारा चित्र)

मुझे त्रुटि कॉलम की आवश्यकता नहीं थी – केवल वैल्यू कॉलम की।

विस्तार के बाद यह है परिणाम:

image 7
चित्र 9 – अभिलेखों के विस्तार के बाद परिणाम (चित्र लेखक द्वारा)

ध्यान दें कि मैंने सीधे ExpandRecordColumn() फ़ंक्शन में कॉलम का नाम बदल दिया है।
अन्यथा, मुझे (Value.1) नाम का एक कॉलम मिल जाता।

यह पहला परिणाम था जहां मुझे कोई त्रुटि नहीं मिली।

अब, मैंने यह जांचने के लिए एक परिकलित कॉलम जोड़ा कि नया कॉलम खाली है या नहीं। यदि हाँ, तो मूल मान कॉलम में एक पाठ था:

if (Numeric Value) = null then (Value) else null

यहाँ, परिणाम:

image 5
चित्र 10 – एक कॉलम से संख्यात्मक और पाठ मानों के सफल पृथक्करण का परिणाम (चित्र लेखक द्वारा)

सही डेटा प्रकार सेट करने और मूल मान कॉलम को हटाने के बाद, मुझे यह तालिका मिली:

image 212
चित्र 11 – सफ़ाई के बाद परिणाम (चित्र लेखक द्वारा)

संख्या को रिक्त स्थान से संभालें

लेकिन हमारे पास अभी भी पंक्ति 17 है, जिसमें रिक्त स्थान के साथ एक संख्या है।

मैंने इसे कैसे संभाला?

सबसे सीधा तरीका कॉलम वैल्यू से किसी भी रिक्त स्थान को हटाना था:

image 209
चित्र 12 – डेटा से रिक्त स्थान हटाने के लिए एक प्रतिस्थापन मूल्य कॉल जोड़ें (चित्र लेखक द्वारा)

लेकिन मुझे दो मान प्रकारों को अलग करने के चरण शुरू करने से पहले यह चरण जोड़ना पड़ा:

image 6
चित्र 13 – प्रतिस्थापन मान चरण को सही स्थान पर जोड़ें (चित्र लेखक द्वारा)

इस चरण को जोड़ने के बाद, पंक्ति 17 को एक संख्या के रूप में पहचाना जाता है और सही ढंग से संग्रहीत किया जाता है।

Power BI में लोड करने के बाद डेटा यहां दिया गया है:

image 210
चित्र 14 – पावर बीआई में लोड करने के बाद स्वच्छ डेटा (चित्र लेखक द्वारा)

लेकिन यह केवल तभी काम करता है जब पाठ मान एकल शब्द हों। जब वाक्य या एकाधिक शब्द वहां संग्रहीत थे तो यह काम नहीं करता था।

निष्कर्ष

पावर क्वेरी, या एम-भाषा, डेटा प्रकारों के साथ कैसे काम करती है, यह एक दिलचस्प भ्रमण था।

मैं अभी भी त्रुटियों के कारणों के बारे में अनिश्चित हूं।

लेकिन मैंने सीखा कि त्रुटियों को कैसे संभालना है, या ट्राई कॉल का उपयोग कैसे करना है और आउटपुट को कैसे संभालना है।

यह बहुत मददगार था.

वैसे भी, जैसा कि आप पंक्ति 17 में मूल मान से देखते हैं, डेटा गुणवत्ता सर्वोपरि है।

मेरे पास एक और क्लाइंट है जहां विभिन्न देशों के उपयोगकर्ता अपने स्वयं के नंबर प्रारूपों के साथ एक ही एक्सेल फ़ाइल पर काम कर रहे हैं।

यह एक बुरा सपना है क्योंकि एक्सेल डेटा प्रकारों के प्रति अत्यधिक सहिष्णु है। यह सब कुछ स्वीकार करता है, तब भी जब कॉलम को एक संख्या के रूप में स्वरूपित किया गया हो।

उस स्थिति में, मुझे यह सुनिश्चित करने के लिए उपयोगकर्ताओं को एक्सेल के फ़ॉर्मेटिंग विकल्पों का उपयोग करने के लिए बाध्य करना होगा कि संख्याओं को लगातार उसी रूप में पहचाना जाए।

इसके बिना, मेरे पास संख्याओं को साफ़ करने के बहुत प्रयास के बिना इस डेटा को Power BI में आयात करने का कोई मौका नहीं है।

और आश्वस्त रहें कि उपयोगकर्ता हमेशा एक्सेल में संख्याओं के साथ गड़बड़ी करने का एक तरीका ढूंढते हैं।

संदर्भ

डेटा यादृच्छिक संख्याओं और शब्दों से बनाया गया है।

यहां एम-भाषा का संदर्भ दिया गया है: पावर क्वेरी एम सूत्र भाषा संदर्भ – पावर क्वेरी एम | माइक्रोसॉफ्ट लर्न

(टैग्सटूट्रांसलेट)डेटा विश्लेषण(टी)डेटा इंजीनियर(टी)एक्सेल(टी)पावर बीआई(टी)पावर क्वेरी
Latest Technology, (लेटेस्ट टेक न्यूज़) Gadget (गैजेट्स) …

Source link

Leave a Reply

Your email address will not be published. Required fields are marked *