List.Acumulate प्रकार्यको साथ पावर क्वेरीमा बल्क पाठ प्रतिस्थापन

सूत्रहरूको साथ सन्दर्भ सूची अनुसार पाठलाई कसरी छिटो र बल्कमा प्रतिस्थापन गर्ने - हामीले यसलाई पहिले नै क्रमबद्ध गरिसकेका छौं। अब यसलाई Power Query मा गर्ने प्रयास गरौं।

जसरी अक्सर हुन्छ प्रदर्शन यो कार्य व्याख्या भन्दा धेरै सजिलो छ किन यसले काम गर्छ, तर दुबै गर्ने प्रयास गरौं 🙂

त्यसोभए, हामीसँग किबोर्ड सर्टकटको साथ सामान्य दायराहरूबाट सिर्जना गरिएका दुई "स्मार्ट" गतिशील तालिकाहरू छन्। Ctrl+T वा टोली गृह - तालिकाको रूपमा ढाँचा (घर - तालिकाको रूपमा ढाँचा):

List.Acumulate प्रकार्यको साथ पावर क्वेरीमा बल्क पाठ प्रतिस्थापन

मैले पहिलो टेबुलमा फोन गरें तथ्याङ्क, दोस्रो तालिका - निर्देशिकाक्षेत्र प्रयोग गर्दै तालिका नाम (तालिकाको नाम) ट्याब कन्स्ट्रक्टर (डिजाईन).

कार्य: तालिकामा ठेगानाहरू बदल्नुहोस् तथ्याङ्क स्तम्भबाट सबै घटनाहरू खोज्न को लागि ह्यान्डबुक स्तम्भबाट तिनीहरूको सम्बन्धित सही समकक्षहरूलाई उपन्यास। कक्षहरूमा बाँकी पाठ अछुतो रहनु पर्छ।

चरण 1. डाइरेक्टरीलाई पावर क्वेरीमा लोड गर्नुहोस् र यसलाई सूचीमा बदल्नुहोस्

सन्दर्भ तालिकाको कुनै पनि ठाउँमा सक्रिय सेल सेट गरिसकेपछि, ट्याबमा क्लिक गर्नुहोस् तथ्याङ्क (मिति)वा ट्याबमा पावर क्वेरी (यदि तपाईंसँग एक्सेलको पुरानो संस्करण छ र तपाईंले पावर क्वेरीलाई छुट्टै ट्याबमा एड-इनको रूपमा स्थापना गर्नुभयो भने) बटनमा तालिका/दायराबाट (तालिका/दायराबाट).

सन्दर्भ तालिका पावर क्वेरी क्वेरी सम्पादकमा लोड हुनेछ:

List.Acumulate प्रकार्यको साथ पावर क्वेरीमा बल्क पाठ प्रतिस्थापन

हस्तक्षेप नगर्नको लागि, स्वचालित रूपमा थपिएको चरण परिमार्जित प्रकार (परिवर्तित प्रकार) दायाँ प्यानलमा, लागू गरिएका चरणहरू सुरक्षित रूपमा मेटाउन सकिन्छ, केवल चरण छोडेर मुहान (मुहान):

List.Acumulate प्रकार्यको साथ पावर क्वेरीमा बल्क पाठ प्रतिस्थापन

अब, थप रूपान्तरण र प्रतिस्थापनहरू प्रदर्शन गर्न, हामीले यो तालिकालाई सूची (सूची) मा परिणत गर्न आवश्यक छ।

लिरिकल डिग्रेशन

जारी राख्नु अघि, पहिले सर्तहरू बुझौं। पावर क्वेरीले धेरै प्रकारका वस्तुहरूसँग काम गर्न सक्छ:
  • तालिका धेरै पङ्क्ति र स्तम्भहरू मिलेर बनेको दुई-आयामी एरे हो।
  • रेकर्ड (रेकर्ड) - एक-आयामी एरे-स्ट्रिङ, नामहरू सहित धेरै क्षेत्रहरू-तत्वहरू मिलेर, उदाहरणका लागि [नाम = "माशा", लिङ्ग = "च", उमेर = २५]
  • सूची - एक-आयामी एरे-स्तम्भ, उदाहरणका लागि धेरै तत्वहरू मिलेर {1, 2, 3, 10, 42} or {"विश्वास आशा प्रेम"}

हाम्रो समस्या समाधान गर्न, हामी मुख्य रूपमा प्रकारमा रुचि राख्नेछौं सूची.

यहाँ युक्ति यो हो कि पावर क्वेरीमा सूची वस्तुहरू साधारण संख्या वा पाठ मात्र होइन, तर अन्य सूचीहरू वा रेकर्डहरू पनि हुन सक्छन्। यो यस्तो कठिन सूची (सूची) मा छ, रेकर्डहरू (रेकर्डहरू) मिलेर हामीले हाम्रो डाइरेक्टरी बदल्न आवश्यक छ। पावर क्वेरी सिन्ट्याक्टिक नोटेशनमा (वर्ग कोष्ठकहरूमा प्रविष्टिहरू, घुमाउरो कोष्ठकहरूमा सूचीहरू) यो यस्तो देखिन्छ:

{

    [ फेला पार्नुहोस् = "सेन्ट। पिटर्सबर्ग", प्रतिस्थापन = "सेन्ट। पिटर्सबर्ग"] ,

    [ फेला पार्नुहोस् = "सेन्ट। पिटर्सबर्ग", प्रतिस्थापन = "सेन्ट। पिटर्सबर्ग"] ,

    [ फेला पार्नुहोस् = "पीटर", प्रतिस्थापन = "सेन्ट। पिटर्सबर्ग"] ,

आदि

}

यस्तो रूपान्तरण पावर क्वेरीमा निर्मित M भाषाको विशेष प्रकार्य प्रयोग गरेर गरिन्छ - तालिका।ToRecords। यसलाई सिधै सूत्र पट्टीमा लागू गर्न, त्यहाँ चरण कोडमा यो प्रकार्य थप्नुहोस् मुहान.

थियो:

List.Acumulate प्रकार्यको साथ पावर क्वेरीमा बल्क पाठ प्रतिस्थापन

पछि:

List.Acumulate प्रकार्यको साथ पावर क्वेरीमा बल्क पाठ प्रतिस्थापन

Table.ToRecords प्रकार्य थपेपछि, हाम्रो तालिकाको रूप परिवर्तन हुनेछ - यो रेकर्डहरूको सूचीमा परिणत हुनेछ। व्यक्तिगत रेकर्डका सामग्रीहरू कुनै पनि शब्दको छेउमा रहेको कक्ष पृष्ठभूमिमा क्लिक गरेर दृश्य फलकको तल देख्न सकिन्छ। रेकर्ड (तर एक शब्दमा होइन!)

माथिको अतिरिक्त, यसले हाम्रो सिर्जना गरिएको सूचीलाई क्यास (बफर) गर्न थप एक स्ट्रोक थप्नको लागि अर्थ दिन्छ। यसले Power Query लाई हाम्रो लुकअप सूचीलाई मेमोरीमा एक पटक लोड गर्न बाध्य पार्छ र हामीले पछि यसलाई प्रतिस्थापन गर्न पहुँच गर्दा यसलाई पुन: गणना गर्दैन। यो गर्नको लागि, हाम्रो सूत्रलाई अर्को प्रकार्यमा बेर्नुहोस् - सूची। बफर:

List.Acumulate प्रकार्यको साथ पावर क्वेरीमा बल्क पाठ प्रतिस्थापन

यस्तो क्यासिङले धेरै मात्रामा प्रारम्भिक डाटा खाली गर्नको लागि गतिमा (धेरै पटक!) धेरै उल्लेखनीय वृद्धि दिन्छ।

यसले पुस्तिकाको तयारी पूरा गर्छ।

यसमा क्लिक गर्न बाँकी छ घर - बन्द गर्नुहोस् र लोड गर्नुहोस् - बन्द गर्नुहोस् र लोड गर्नुहोस् ... (घर - बन्द गर्नुहोस् र लोड गर्नुहोस् - बन्द गर्नुहोस् र लोड गर्नुहोस्..), एक विकल्प चयन गर्नुहोस् बस एक जडान सिर्जना गर्नुहोस् (मात्र जडान सिर्जना गर्नुहोस्) र Excel मा फर्कनुहोस्।

चरण 2. डाटा तालिका लोड गर्दै

यहाँ सबै कुरा ट्राइट छ। सन्दर्भ पुस्तकको साथ पहिले जस्तै, हामी तालिकाको कुनै पनि ठाउँमा पुग्छौं, ट्याबमा क्लिक गर्नुहोस् तथ्याङ्क टांक तालिका/दायराबाट र हाम्रो टेबल तथ्याङ्क पावर क्वेरीमा जान्छ। स्वचालित रूपमा थपिएको चरण परिमार्जित प्रकार (परिवर्तित प्रकार) तपाईं पनि हटाउन सक्नुहुन्छ:

List.Acumulate प्रकार्यको साथ पावर क्वेरीमा बल्क पाठ प्रतिस्थापन

यसको साथ कुनै विशेष तयारी कार्यहरू गर्न आवश्यक छैन, र हामी सबैभन्दा महत्त्वपूर्ण कुरामा जान्छौं।

चरण 3. List.Acumulate प्रकार्य प्रयोग गरेर प्रतिस्थापनहरू प्रदर्शन गर्नुहोस्

आदेश प्रयोग गरेर हाम्रो डेटा तालिकामा गणना गरिएको स्तम्भ थपौं स्तम्भ थप्दै - अनुकूलन स्तम्भ (स्तम्भ थप्नुहोस् — अनुकूलन स्तम्भ): र खुल्ने विन्डोमा थपिएको स्तम्भको नाम प्रविष्ट गर्नुहोस् (उदाहरणका लागि, सही ठेगाना) र हाम्रो जादुई प्रकार्य सूची। जम्मा गर्नुहोस्:

List.Acumulate प्रकार्यको साथ पावर क्वेरीमा बल्क पाठ प्रतिस्थापन

यसमा क्लिक गर्न बाँकी छ OK - र हामीले प्रतिस्थापनको साथ एउटा स्तम्भ पाउँछौं:

List.Acumulate प्रकार्यको साथ पावर क्वेरीमा बल्क पाठ प्रतिस्थापन

ध्यान दिनुहोस् कि:

  • पावर क्वेरी केस सेन्सेटिभ भएको हुनाले, उपान्त्य रेखामा कुनै प्रतिस्थापन थिएन, किनभने डाइरेक्टरीमा हामीसँग "SPb" छ, "SPb" होइन।
  • यदि स्रोत डेटामा एकैचोटि प्रतिस्थापन गर्न धेरै सबस्ट्रिङहरू छन् (उदाहरणका लागि, 7 औं लाइनमा तपाईंले "S-Pb" र "प्रोस्पेक्टस" दुवै प्रतिस्थापन गर्न आवश्यक छ), त्यसपछि यसले कुनै समस्याहरू सिर्जना गर्दैन (बाट सूत्रहरू प्रतिस्थापन गर्न विपरीत। अघिल्लो विधि)।
  • यदि स्रोत पाठ (9 औं लाइन) मा प्रतिस्थापन गर्न केहि छैन भने, त्यसपछि कुनै त्रुटिहरू देखा पर्दैन (विपरीत, फेरि, सूत्रहरू द्वारा प्रतिस्थापनबाट)।

यस्तो अनुरोध को गति धेरै, धेरै सभ्य छ। उदाहरण को लागी, 5000 पङ्क्ति को आकार संग प्रारम्भिक डेटा को तालिका को लागी, यो क्वेरी एक सेकेन्ड भन्दा कम मा अद्यावधिक गरियो (बफरिंग बिना, वैसे, लगभग 3 सेकेन्ड!)

कसरी List.Accumulate प्रकार्यले काम गर्छ

सिद्धान्तमा, यो अन्त हुन सक्छ (मेरो लागि लेख्न, र तपाईं पढ्नको लागि) यो लेख। यदि तपाईं सक्षम हुन मात्र नभई यसले "हुड मुनि" कसरी काम गर्छ भनेर पनि बुझ्न चाहनुहुन्छ भने, तपाईंले खरगोशको प्वालमा अलिकति गहिरो डुब्नु पर्छ र सूचीसँग सम्झौता गर्नुपर्नेछ। एकमुलेट प्रकार्य, जसले सबै थोक प्रतिस्थापन गर्यो। हाम्रो लागि काम गर्नुहोस्।

यस प्रकार्यको लागि वाक्य रचना हो:

=सूची। जम्मा(सूची, बीउ, संचय)

जहाँ

  • सूची त्यो सूची हो जसको तत्वहरू हामी दोहोर्याउँदैछौं। 
  • बीउ - प्रारम्भिक अवस्था
  • संचय - एक प्रकार्य जसले सूचीको अर्को तत्वमा केहि अपरेशन (गणितीय, पाठ, आदि) गर्दछ र विशेष चरमा प्रशोधनको परिणाम जम्मा गर्दछ।

सामान्यतया, Power Query मा प्रकार्यहरू लेख्नको लागि वाक्य रचना यस्तो देखिन्छ:

(argument1, argument2, … argumentN) => तर्क सहितका केही कार्यहरू

उदाहरण को लागी, योग प्रकार्य को रूपमा प्रतिनिधित्व गर्न सकिन्छ:

(a, b) => a + b

List.Accumulate को लागि, यो एक्युम्युलेटर प्रकार्यमा दुई आवश्यक तर्कहरू छन् (तिनीहरूलाई कुनै पनि नाम दिन सकिन्छ, तर सामान्य नामहरू हुन्। राज्य и वर्तमान, यस प्रकार्यको लागि आधिकारिक मद्दतमा, जहाँ:

  • राज्य - एउटा चर जहाँ नतिजा संचित हुन्छ (यसको प्रारम्भिक मान माथि उल्लेख गरिएको हो बीउ)
  • वर्तमान - सूचीबाट अर्को पुनरावृत्ति मान सूची

उदाहरण को लागी, निम्न निर्माण को तर्क को चरणहरु मा एक नजर राखौं:

=सूची। जम्मा({3, 2, 5}, 10, (राज्य, वर्तमान) => राज्य + वर्तमान)

  1. चर मान राज्य प्रारम्भिक तर्कको बराबर सेट गरिएको छ बीउIe राज्य = १०
  2. हामी सूचीको पहिलो तत्व लिन्छौं (वर्तमान = 3) र यसलाई चरमा थप्नुहोस् राज्य (दश)। हामीले पायौ राज्य = १०.
  3. हामी सूचीको दोस्रो तत्व लिन्छौं (वर्तमान = 2) र यसलाई चरमा हालको संचित मानमा जोड्नुहोस् राज्य (दश)। हामीले पायौ राज्य = १०.
  4. हामी सूचीको तेस्रो तत्व लिन्छौं (वर्तमान = 5) र यसलाई चरमा हालको संचित मानमा जोड्नुहोस् राज्य (दश)। हामीले पायौ राज्य = १०.

यो पछिल्लो संचित हो राज्य मान हाम्रो सूची हो। फलस्वरूप कार्य र आउटपुटहरू जम्मा गर्नुहोस्:

List.Acumulate प्रकार्यको साथ पावर क्वेरीमा बल्क पाठ प्रतिस्थापन

यदि तपाईंले थोरै कल्पना गर्नुभयो भने, List.Acumulate प्रकार्य प्रयोग गरेर, तपाईंले सिमुलेट गर्न सक्नुहुन्छ, उदाहरणका लागि, एक्सेल प्रकार्य CONCATENATE (पावर क्वेरीमा, यसको एनालग भनिन्छ। Text.combine) अभिव्यक्ति प्रयोग गरेर:

List.Acumulate प्रकार्यको साथ पावर क्वेरीमा बल्क पाठ प्रतिस्थापन

वा अधिकतम मान खोज्नुहोस् (एक्सेलको MAX प्रकार्यको अनुकरण, जसलाई Power Query मा भनिन्छ सूची। अधिकतम):

List.Acumulate प्रकार्यको साथ पावर क्वेरीमा बल्क पाठ प्रतिस्थापन

यद्यपि, List.Acumulate को मुख्य विशेषता भनेको साधारण पाठ वा संख्यात्मक सूचिहरूलाई तर्कको रूपमा मात्र प्रक्रिया गर्ने क्षमता हो, तर अझ जटिल वस्तुहरू - उदाहरणका लागि, सूचीहरू-बाट-सूचीहरू वा सूचीहरू-बाट-रेकर्डहरू (हेलो, डाइरेक्टरी!)

हाम्रो समस्यामा प्रतिस्थापन प्रदर्शन गर्ने निर्माणलाई फेरि हेरौं:

सूची। जम्मा(निर्देशिका, [ठेगाना], (state,current) => Text.Replace(state, current[Find], current[बदल्नुहोस्]) )

यहाँ साँच्चै के भइरहेको छ?

  1. प्रारम्भिक मानको रूपमा (बीउ) हामी स्तम्भबाट पहिलो अनाड़ी पाठ लिन्छौं [ठेगाना] हाम्रो तालिका: 199034, सेन्ट पीटर्सबर्ग, str। बेरिंगा, डी। १
  2. त्यसपछि List.Accumulate पुनरावृत्तिहरू सूचीका तत्वहरू एक-एक गरी ह्यान्डबुक। यस सूचीको प्रत्येक तत्व "के फेला पार्ने - केसँग प्रतिस्थापन गर्ने" वा, अर्को शब्दमा, डाइरेक्टरीमा अर्को लाइन क्षेत्रहरूको जोडी समावेश भएको रेकर्ड हो।
  3. एक्युमुलेटर प्रकार्यले चरमा राख्छ राज्य प्रारम्भिक मान (पहिलो ठेगाना 199034, सेन्ट पीटर्सबर्ग, str। बेरिंगा, डी। १) र यसमा एक्युमुलेटर प्रकार्य प्रदर्शन गर्दछ - मानक M- प्रकार्य प्रयोग गरेर प्रतिस्थापन कार्य टेक्स्ट। बदल्नुहोस् (एक्सेलको SUBSTITUTE प्रकार्यको अनुरूप)। यसको वाक्य रचना हो:

    Text.Replace (मूल पाठ, हामीले के खोजिरहेका छौं, हामी केसँग प्रतिस्थापन गर्दैछौं)

    र यहाँ हामीसँग छ:

    • राज्य हाम्रो फोहोर ठेगाना हो, जुन भित्र छ राज्य (त्यहाँबाट प्राप्त गर्दै बीउ)
    • हाल [खोज] - क्षेत्र मूल्य खोज्न को लागि सूचीको अर्को पुनरावृत्त प्रविष्टिबाट निर्देशिका, जुन चर मा छ वर्तमान
    • वर्तमान[बदल्नुहोस्] - क्षेत्र मूल्य उपन्यास सूचीको अर्को पुनरावृत्त प्रविष्टिबाट निर्देशिकाभित्र पसेको वर्तमान

यसैले, प्रत्येक ठेगानाको लागि, डाइरेक्टरीमा सबै रेखाहरूको गणनाको पूर्ण चक्र प्रत्येक पटक चलाइन्छ, [फेला पार्नुहोस्] फिल्डको पाठलाई [बदल्नुहोस्] फिल्डको मानसँग बदल्दै।

आशा छ तपाईंले विचार पाउनुभयो 🙂

  • सूत्रहरू प्रयोग गरेर सूचीमा बल्क पाठ प्रतिस्थापन गर्नुहोस्
  • पावर क्वेरीमा नियमित अभिव्यक्ति (RegExp)

जवाफ छाड्नुस्