पावर क्वेरी का उपयोग करके संख्याओं और टेक्स्ट को एक कॉलम में अलग करें
Latest Technology, (लेटेस्ट टेक न्यूज़) Gadget (गैजेट्स) …
एक्सेल डेटा के साथ सेल्फ-सर्विस बीआई के लिए यह एक विशिष्ट मामला है।
कुछ दिन पहले, एक ग्राहक ने मुझसे निम्नलिखित प्रश्न पूछा:
मेरे पास एक एक्सेल शीट है जिसमें एक कॉलम में संख्याएं और टेक्स्ट हैं। मैं इस शीट को पावर बीआई में आयात करना चाहता हूं और उस कॉलम में संख्याओं पर विश्लेषण करना चाहता हूं।
मैं उस कॉलम के पाठ से संख्याओं को कैसे अलग कर सकता हूँ?
याद रखें कि मुझे उस कॉलम में भी टेक्स्ट की आवश्यकता है।
मैं इस स्थिति में कभी नहीं था, इसलिए मैंने सबसे पहले उस तकनीक का उपयोग करना शुरू किया जो मुझे पता थी।
मैंने इसी समस्या के साथ एक डमी एक्सेल बनाया, जो इस तरह दिखता है:

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);परिणाम निम्न तालिका है:

यदि आप ध्यान से देखें, तो आप देखेंगे कि पंक्ति 17 को एक पाठ के रूप में पहचाना गया है।
ऐसा इसलिए है क्योंकि संख्या में एक रिक्त स्थान है।
मैं इस पर बाद में वापस आऊंगा.
पावर क्वेरी पर स्विच करना – IsNaN() का प्रयास करना
अब, मैंने एक्सेल को पावर क्वेरी में लोड किया है।
मैंने कॉलम को टेक्स्ट के रूप में परिभाषित किया और इस चुनौती पर काम करना शुरू किया।
पहला प्रयास का उपयोग करता है संख्या.IsNaN() समारोह।
यदि मान NaN है तो यह फ़ंक्शन सत्य लौटाता है। “NaN” एक प्लेसहोल्डर है जो लागू नहीं होता है, उदाहरण के लिए, 0 से विभाजन के कारण।
मैंने यह निर्धारित करने का प्रयास किया कि कोई पाठ NaN के समतुल्य है या नहीं।
यह परिकलित कॉलम के लिए एम-कोड है:
if Number.IsNaN((Value)) = true
then (Value)
else nullपरिणाम ने मुझे चौंका दिया:

अजीब बात यह है कि इसका परिणाम यह होता है कि यह किसी संख्या को संख्या में नहीं बदल सकता।
मेरा मानना है कि ऐसा इसलिए होता है क्योंकि कॉलम का डेटा प्रकार टेक्स्ट है।
फिर, मैंने कॉलम को एक संख्या में बदलने और परिणाम में IsNaN() फ़ंक्शन लागू करने का प्रयास किया:
if Number.IsNaN(Number.From((Value))) = false
then Number.From((Value))
else nullअब, संख्याओं को संख्याओं में बदल दिया गया है, लेकिन पाठ मानों के परिणामस्वरूप एक त्रुटि उत्पन्न होती है:

अब तर्क संख्याओं के लिए काम करता है।
लेकिन पाठ वाली पंक्तियों के लिए रूपांतरण विफल हो जाता है। इसके परिणामस्वरूप त्रुटियों वाली पंक्तियाँ उत्पन्न होती हैं।
पावर क्वेरी में वैल्यू.आईएस () का प्रयास कर रहा हूं
आइए एक अन्य फ़ंक्शन आज़माएँ: मान.है()
यह फ़ंक्शन जाँचता है कि कोई मान डेटा प्रकार के साथ संगत है या नहीं।
यह ऊपर दिखाए गए ISNUMERIC() फ़ंक्शन के समतुल्य होना चाहिए:
if Value.Is((Value), Number.Type) = true
then Number.From((Value))
else nullदुर्भाग्य से, यह फ़ंक्शन अपेक्षित परिणाम देने में भी विफल रहा:

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

इसलिए, मुझे संदेह है कि फ़ंक्शन वैल्यू.आईएस() एक संख्या डेटा प्रकार की अपेक्षा करता है, लेकिन इससे मुझे कोई मतलब नहीं है।
इस समय, मेरे पास गहन शोध के लिए समय नहीं था, क्योंकि मेरे पास समय की कमी थी।
अब दृष्टिकोण बदलने का समय आ गया है।
स्विचिंग अवधारणा
अब मैंने पता लगाया कि पावर क्वेरी में त्रुटियों को कैसे पकड़ा जाए।
मेरा विचार था: क्या होगा यदि मैं रूपांतरण त्रुटि पकड़ सकूं और इस जानकारी का उपयोग कर सकूं?
मुझे उपयोगी जानकारी वाला यह पृष्ठ मिला: त्रुटियाँ – पॉवरक्वेरी एम | माइक्रोसॉफ्ट लर्न
इससे, मैंने यह अभिव्यक्ति निकाली:
try Number.From((Value)))इस अभिव्यक्ति के साथ एक परिकलित कॉलम जोड़ने के बाद, मुझे यह परिणाम मिला:

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

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

ध्यान दें कि मैंने सीधे ExpandRecordColumn() फ़ंक्शन में कॉलम का नाम बदल दिया है।
अन्यथा, मुझे (Value.1) नाम का एक कॉलम मिल जाता।
यह पहला परिणाम था जहां मुझे कोई त्रुटि नहीं मिली।
अब, मैंने यह जांचने के लिए एक परिकलित कॉलम जोड़ा कि नया कॉलम खाली है या नहीं। यदि हाँ, तो मूल मान कॉलम में एक पाठ था:
if (Numeric Value) = null then (Value) else nullयहाँ, परिणाम:

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

संख्या को रिक्त स्थान से संभालें
लेकिन हमारे पास अभी भी पंक्ति 17 है, जिसमें रिक्त स्थान के साथ एक संख्या है।
मैंने इसे कैसे संभाला?
सबसे सीधा तरीका कॉलम वैल्यू से किसी भी रिक्त स्थान को हटाना था:

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

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

लेकिन यह केवल तभी काम करता है जब पाठ मान एकल शब्द हों। जब वाक्य या एकाधिक शब्द वहां संग्रहीत थे तो यह काम नहीं करता था।
निष्कर्ष
पावर क्वेरी, या एम-भाषा, डेटा प्रकारों के साथ कैसे काम करती है, यह एक दिलचस्प भ्रमण था।
मैं अभी भी त्रुटियों के कारणों के बारे में अनिश्चित हूं।
लेकिन मैंने सीखा कि त्रुटियों को कैसे संभालना है, या ट्राई कॉल का उपयोग कैसे करना है और आउटपुट को कैसे संभालना है।
यह बहुत मददगार था.
वैसे भी, जैसा कि आप पंक्ति 17 में मूल मान से देखते हैं, डेटा गुणवत्ता सर्वोपरि है।
मेरे पास एक और क्लाइंट है जहां विभिन्न देशों के उपयोगकर्ता अपने स्वयं के नंबर प्रारूपों के साथ एक ही एक्सेल फ़ाइल पर काम कर रहे हैं।
यह एक बुरा सपना है क्योंकि एक्सेल डेटा प्रकारों के प्रति अत्यधिक सहिष्णु है। यह सब कुछ स्वीकार करता है, तब भी जब कॉलम को एक संख्या के रूप में स्वरूपित किया गया हो।
उस स्थिति में, मुझे यह सुनिश्चित करने के लिए उपयोगकर्ताओं को एक्सेल के फ़ॉर्मेटिंग विकल्पों का उपयोग करने के लिए बाध्य करना होगा कि संख्याओं को लगातार उसी रूप में पहचाना जाए।
इसके बिना, मेरे पास संख्याओं को साफ़ करने के बहुत प्रयास के बिना इस डेटा को Power BI में आयात करने का कोई मौका नहीं है।
और आश्वस्त रहें कि उपयोगकर्ता हमेशा एक्सेल में संख्याओं के साथ गड़बड़ी करने का एक तरीका ढूंढते हैं।
संदर्भ
डेटा यादृच्छिक संख्याओं और शब्दों से बनाया गया है।
यहां एम-भाषा का संदर्भ दिया गया है: पावर क्वेरी एम सूत्र भाषा संदर्भ – पावर क्वेरी एम | माइक्रोसॉफ्ट लर्न
(टैग्सटूट्रांसलेट)डेटा विश्लेषण(टी)डेटा इंजीनियर(टी)एक्सेल(टी)पावर बीआई(टी)पावर क्वेरी
Latest Technology, (लेटेस्ट टेक न्यूज़) Gadget (गैजेट्स) …
Source link
