ForAll फ़ंक्शन
इस पर लागू होता है: कैनवास ऐप्स डेस्कटॉप प्रवाह मॉडल-संचालित ऐप्स Power Pages Power Platform CLI
मान परिकलित करता है और तालिका के सभी रिकॉर्ड के लिए कार्रवाइयाँ करता है.
वर्णन
ForAll फ़ंक्शन एक तालिका में सभी रिकॉर्डों के लिए एक सूत्र का मूल्यांकन करता है. सूत्र, किसी मान की गणना और/या क्रियाएँ कर सकता है, जैसे डेटा संशोधित करना या कनेक्शन के साथ कार्य करना. एकल रिकॉर्ड के लिए सूत्र का मूल्यांकन करने हेतु With फ़ंक्शन का उपयोग करें.
Sequence फ़ंक्शन का उपयोग ForAll फ़ंक्शन के साथ करें, ताकि गिनती के आधार पर उसकी पुनरावृति हो सके.
वर्तमान में संसाधित की जा रही रिकॉर्ड की फ़ील्ड फ़ॉर्मूला में उपलब्ध हैं. ThisRecord ऑपरेटर या केवल नाम से संदर्भ फ़ील्ड का उपयोग करें, जैसे आप किसी अन्य मान के साथ करेंगे. संसाधित किए जा रहे रिकॉर्ड को नाम देने के लिए As ऑपरेटर का भी उपयोग किया जा सकता है, जो आपके सूत्र को समझ पाना आसान बना सकता है और नेस्टेड रिकॉर्ड को सुलभ बना सकता है. अधिक जानकारी के लिए, नीचे दिए गए उदाहरणों को देखें और रिकॉर्ड कार्यक्षेत्र के साथ कार्य करें.
मान देता है
प्रत्येक सूत्र मूल्यांकन का परिणाम एक तालिका में, इनपुट तालिका के समान ऑर्डर में मिलता है.
यदि सूत्र का परिणाम एकल मान है, तो परिणामी तालिका एकल स्तंभ-तालिका होगी. यदि सूत्र का परिणाम एक रिकॉर्ड है, तो परिणामी तालिका में परिणाम रिकॉर्ड के समान स्तंभ वाले रिकॉर्ड होते हैं.
यदि सूत्र का परिणाम रिक्त मान होता है, तो उस इनपुट रिकॉर्ड के लिए परिणाम तालिका में कोई रिकॉर्ड नहीं होता है. इस स्थिति में, परिणाम तालिका में स्रोत तालिका की तुलना में कम रिकॉर्ड होंगे.
क्रियाएँ करना
सूत्र में ऐसे फ़ंक्शन शामिल हो सकते हैं जो क्रियाएँ, जैसे Patch और Collect फ़ंक्शन द्वारा डेटा स्रोत के रिकॉर्ड संशोधित करते हैं. सूत्र, कनेक्शन पर विधियाँ भी कॉल कर सकते हैं. ; ऑपरेटर के उपयोग द्वारा प्रति रिकॉर्ड एकाधिक क्रियाएँ की जा सकती हैं. आप उस तालिका को संशोधित नहीं कर सकते जो ForAll फ़ंक्शन के अधीन है.
अपना सूत्र लिखते समय ध्यान रखें, कि रिकॉर्ड किसी भी ऑर्डर में, और जब संभव होता है, तब समानांतर संसाधित किए जा सकते हैं. तालिका के प्रथम रिकॉर्ड को अंतिम रिकॉर्ड के बाद संसाधित किया जा सकता है.
ऑर्डर संबंधी निर्भरताओं से बचने के लिए सावधानी बरतें. इस कारण, आप ForAll फ़ंक्शन के भीतर UpdateContext, Clear, और ClearCollect फ़ंक्शन का उपयोग नहीं कर सकते, क्योंकि इनका उपयोग आसानी उन चरों को होल्ड करने में किया जा सकता है, जो इस प्रभाव के प्रति अतिसंवेदनशील होंगे. आप Collect का उपयोग कर सकते हैं, परंतु जिस ऑर्डर में रिकॉर्ड जोड़े गए हैं, वह अपरिभाषित है.
डेटा स्रोत को संशोधित करने वाले अनेक फ़ंक्शन, जिनमें Collect, Remove, और Update शामिल हैं, अपने वापसी मान के रूप में परिवर्तित डेटा स्रोत देते हैं. ये वापसी मान बड़े हो सकते हैं, और यदि ForAll तालिका के प्रत्येक रिकॉर्ड के लिए दिए गए, तो काफ़ी संसाधनों का उपभोग कर सकते हैं. आप यह भी देख सकते हैं, कि ये वापसी मान आपकी अपेक्षा के अनुसार नहीं हैं, क्योंकि ForAll समानांतर में कार्य करता है, इन फ़ंक्शन के परिणाम हासिल करने के दुष्प्रभावों से उन्हें पृथक कर सकता है. यदि ForAll के वापसी मान का उपयोग नहीं किया जाता है, जो अक्सर डेटा संशोधन फ़ंक्शन के साथ होता है, तो वापसी मान नहीं बनाया जाएगा और कोई संसाधन या आदेश मामले नहीं होंगे. परंतु, यदि आप ForAll के परिणाम, और एक डेटा स्रोत लौटाने वाले किसी एक फ़ंक्शन का उपयोग कर रहे हैं, तो सावधानीपूर्वक सोचें कि आप अपने परिणाम की संरचना कैसे करेंगे और पहले इसे छोटे डेटा सेट पर आज़माएँ.
विकल्प
Power Apps में अनेक फ़ंक्शन एकल-स्तंभ तालिका के उपयोग द्वारा एक समय में एक से अधिक मान संसाधित कर सकते हैं. उदाहरण के लिए, Len फ़ंक्शन पाठ मानों की एक तालिका संसाधित कर सकता है, लंबाई की एक तालिका उसी तरह देता है, जैसे ForAll दे सकता है. इसके अनेक मामलों में ForAll के उपयोग की आवश्यकता समाप्त हो सकती है, यह अधिक कुशल, और पढ़ने में आसान हो सकता है.
एक और ध्यान देने योग्य विचार है कि ForAll प्रत्यायोजन योग्य नहीं होते, जबकि अन्य फ़ंक्शन जैसे Filter हो सकते हैं.
प्रत्यायोजन
डेटा स्रोत के साथ उपयोग किए जाने पर, यह फ़ंक्शन प्रत्यायुक्त नहीं किया जा सकता. डेटा स्रोत का केवल पहला भाग पुनर्प्राप्त किया जाएगा और फिर फ़ंक्शन लागू होगा. हो सकता है कि परिणाम पूर्ण कहानी प्रस्तुत न करे. इस सीमा के बारे में आपको याद दिलाने के लिए और संभवतः प्रत्यायोजन योग्य विकल्पों पर स्विच करने का सुझाव देने के लिए लेखांकन समय पर एक चेतावनी दिखाई दे सकती है. अधिक जानकारी के लिए, प्रत्यायोजन ओवरव्यू देखें.
सिंटैक्स
सबके लिए(सारणी, सूत्र)
- तालिका - आवश्यक. Table पर क्रिया की जाएगी.
- सूत्र - आवश्यक. Table के सभी रिकॉर्ड के लिए मूल्यांकन करने का सूत्र.
उदाहरण
गणनाएँ
निम्नलिखित उदाहरण Squares डेटा स्रोत का उपयोग करते हैं:
इस डेटा स्रोत को एक संग्रह के रूप में बनाने के लिए, बटन नियंत्रण के OnSelect गुण को इस सूत्र पर सेट करें, पूर्वावलोकन मोड खोलें और उसके बाद बटन चुनें:
ClearCollect( Squares, [ "1", "4", "9" ] )
सूत्र | वर्णन | परिणाम |
---|---|---|
ForAll( वर्ग, Sqrt( मान ) ) Sqrt( वर्ग ) |
इनपुट तालिका के सभी रिकॉर्ड के लिए, Value स्तंभ के वर्गमूल की गणना करता है. Sqrt फ़ंक्शन का उपयोग एकल-स्तंभ तालिका के साथ भी किया जा सकता है, जिससे ForAll का उपयोग किए बिना इस उदाहरण को निष्पादित करना संभव हो जाता है। | |
ForAll( वर्ग, घात( मान, 3 ) ) | इनपुट तालिका के सभी रिकॉर्ड के लिए, Value स्तंभ को तृतीय घात तक बढ़ाता है. Power फ़ंक्शन एकल-स्तंभ तालिकाओं का समर्थन नहीं करता है. इसलिए, इस मामले में ForAll का उपयोग किया जाना चाहिए. |
कनेक्शन का उपयोग करना
निम्नलिखित उदाहरण Expressions डेटा स्रोत का उपयोग करते हैं:
इस डेटा स्रोत को एक संग्रह के रूप में बनाने के लिए, बटन नियंत्रण के OnSelect गुण को इस सूत्र पर सेट करें, पूर्वावलोकन मोड खोलें और उसके बाद बटन चुनें:
ClearCollect( Expressions, [ "Hello", "Good morning", "Thank you", "Goodbye" ] )
यह उदाहरण एक Microsoft अनुवादक कनेक्शन का भी उपयोग करता है। अपने ऐप में इस कनेक्शन को जोड़ने के लिए, कनेक्शन प्रबंधित करने के तरीके पर आलेख देखें.
सूत्र | वर्णन | परिणाम |
---|---|---|
ForAll(एक्सप्रेशन, MicrosoftTranslator.Translate( मान, "es")) | Expressions तालिका के सभी रिकॉर्ड के लिए, Value स्तंभ की सामग्री का स्पेनिश (संक्षिप्त "es") में अनुवाद करें. | |
ForAll(एक्सप्रेशन, MicrosoftTranslator.Translate( मान, "fr")) | Expressions तालिका के सभी रिकॉर्ड के लिए, Value स्तंभ की सामग्री का फ़्रेंच (संक्षिप्त "fr") में अनुवाद करें. |
तालिका की प्रतिलिपि बनाना
कभी-कभी आपको डेटा को फ़िल्टर, आकार, सॉर्ट और बदलाव करने की आवश्यकता होती है. Power Apps ऐसा करने के लिए कई फ़ंक्शन प्रदान करता है, जैसे Filter, AddColumns और Sort. Power Apps प्रत्येक तालिका को एक मान समझता है, जिससे वह सूत्रों के माध्यम से प्रवाह हो सके और आसानी से उपभोग किया जा सके.
और कभी-कभी आप बाद के उपयोग के लिए इस परिणाम की एक प्रति बनाना चाहते हैं या आप एक डेटा स्रोत से दूसरे में जानकारी ले जाना चाहते हैं. Power Apps डेटा की प्रतिलिपि बनाने के लिए Collect फ़ंक्शन प्रदान करता है.
लेकिन इससे पहले कि आप वह प्रति बनाएँ, ध्यानपूर्वक सोचें कि उसकी आवश्यकता है या नहीं. कई स्थितियों का समाधान अंतर्निहित डेटा स्रोत को मांग के अनुसार सूत्र द्वारा फ़िल्टर और आकार देकर किया जा सकता है. प्रतिलिपि बनाने के कुछ नकारात्मक पक्ष निम्नलिखित हैं:
- एक ही जानकारी की दो प्रतियों का मतलब है कि उनमें से एक सिंक से बाहर हो सकती है.
- प्रतिलिपि बनाने से कंप्यूटर मेमोरी, नेटवर्क बैंडविड्थ और/या समय का अधिक उपयोग हो सकता है.
- अधिकांश डेटा स्रोतों के लिए, प्रतिलिपि बनाना प्रत्यायोजित नहीं किया जा सकता है, जिससे स्थानांतरित हो सकने वाले डेटा की मात्रा सीमित हो जाती है.
निम्नलिखित उदाहरण Products डेटा स्रोत का उपयोग करते हैं:
इस डेटा स्रोत को एक संग्रह के रूप में बनाने के लिए, बटन नियंत्रण के OnSelect गुण को इस सूत्र पर सेट करें, पूर्वावलोकन मोड खोलें और उसके बाद बटन चुनें:
ClearCollect( Products,
Table(
{ Product: "Widget", 'Quantity Requested': 6, 'Quantity Available': 3 },
{ Product: "Gadget", 'Quantity Requested': 10, 'Quantity Available': 20 },
{ Product: "Gizmo", 'Quantity Requested': 4, 'Quantity Available': 11 },
{ Product: "Apparatus", 'Quantity Requested': 7, 'Quantity Available': 6 }
)
)
हमारा लक्ष्य एक ऐसी व्युत्पन्न तालिका के साथ कार्य करना है, जिसमें केवल वे आइटम शामिल हैं जिनमें उपलब्ध से अधिक का अनुरोध किया गया है, और उसके लिए हमें एक ऑर्डर देने की आवश्यकता है:
हम इस कार्य को विभिन्न तरीकों से कर सकते हैं, जिनमें से सभी विभिन्न गुण-दोषों से साथ समान परिणाम देते हैं.
मांग पर तालिका को आकार देना
वह प्रतिलिपि न बनाएँ! हम निम्नलिखित सूत्र का उपयोग आवश्यकतानुसार कहीं भी कर सकते हैं:
// Table shaping on demand, no need for a copy of the result
ShowColumns(
AddColumns(
Filter( Products, 'Quantity Requested' > 'Quantity Available' ),
"Quantity To Order", 'Quantity Requested' - 'Quantity Available'
),
"Product",
"Quantity To Order"
)
Filter और AddColumns फ़ंक्शन द्वारा एक रिकॉर्ड कार्यक्षेत्र बनाया गया है, ताकि प्रत्येक रिकॉर्ड के 'Quantity Requested' और 'Quantity Available' फ़ील्ड के साथ क्रमशः तुलना और घटाव ऑपरेशन किए जा सकें.
इस उदाहरण में, Filter फ़ंक्शन को प्रत्यायोजित किया जा सकता है. यह महत्वपूर्ण है, क्योंकि यह मापदंडों को पूरा करने वाले सभी उत्पादों को ढूँढ सकता है, भले ही लाखों रिकॉर्ड वाली तालिका में से कुछ ही रिकॉर्ड हो. इस समय, ShowColumns और AddColumns प्रत्यायोजित नहीं किए जा सकते, इसलिए जिन उत्पादों को ऑर्डर करने की आवश्यकता है उनकी वास्तविक संख्या सीमित रहेगी. यदि आप जानते हैं कि इस परिणाम का आकार हमेशा अपेक्षाकृत छोटा होगा, तो यह प्रक्रिया ठीक है.
और चूँकि हमने कोई प्रतिलिपि नहीं बनाई थी, इसलिए जानकारी की कोई ऐसी अतिरिक्त प्रतिलिपि मौजूद नहीं है जिसे प्रबंधित किया जाए या पुरानी हो.
मांग पर ForAll
एक अन्य प्रक्रिया यह है कि तालिका-आकार देने के फ़ंक्शन को प्रतिस्थापित करने के लिए ForAll फ़ंक्शन का उपयोग किया जाए:
ForAll( Products,
If( 'Quantity Requested' > 'Quantity Available',
{
Product: Product,
'Quantity To Order': 'Quantity Requested' - 'Quantity Available'
}
)
)
यह सूत्र कुछ लोगों के पढ़ने और लिखने के लिए आसान हो सकता है.
ForAll का कोई भाग प्रत्यायोजित नहीं किया जाता. उत्पाद तालिका के केवल प्रथम भाग का मूल्यांकन किया जाएगा, जो एक समस्या हो सकती है यदि यह तालिका बड़ी हो. चूँकि पिछले उदाहरण में, Filter को प्रत्यायोजित किया जा सकता है, अतः यह बड़े डेटा सेट के साथ बेहतर कार्य कर सकता है.
परिणाम एकत्र करें
कुछ स्थितियों में, डेटा की एक प्रतिलिपि की आवश्यकता हो सकती है. आपको जानकारी एक डेटा स्रोत से दूसरे में स्थानांतरित करने की आवश्यकता होगी. इस उदाहरण में, ऑर्डर एक विक्रेता के सिस्टम पर NewOrder तालिका के माध्यम से दिया जाता है. तीव्र उपयोगकर्ता सहभागिताओं के लिए, आप तालिका की स्थानीय प्रतिलिपि को कैश करना चाहेंगे, ताकि कोई सर्वर लेटेंसी न हो.
हम उसी तालिका आकार देने का उपयोग किया, जैसा पिछले दो उदाहरणों में था, लेकिन हमने परिणाम एक संग्रह में कैप्चर किया है:
ClearCollect( NewOrder,
ShowColumns(
AddColumns(
Filter( Products, 'Quantity Requested' > 'Quantity Available' ),
"Quantity To Order", 'Quantity Requested' - 'Quantity Available'
),
"Product",
"Quantity To Order"
)
)
ClearCollect( NewOrder,
ForAll( Products,
If( 'Quantity Requested' > 'Quantity Available',
{
Product: Product,
'Quantity To Order': 'Quantity Requested' - 'Quantity Available'
}
)
)
)
ClearCollect और Collect को प्रत्यायोजित नहीं किया जा सकता. परिणामस्वरूप इस तरीके से स्थानांतरित किए जा सकने वाले डेटा की मात्रा सीमित है.
ForAll के भीतर एकत्र करें
अंत में, हम सीधे ForAll के भीतर Collect कर सकते हैं:
Clear( NewOrder );
ForAll( Products,
If( 'Quantity Requested' > 'Quantity Available',
Collect( NewOrder,
{
Product: Product,
'Quantity To Order': 'Quantity Requested' - 'Quantity Available'
}
)
)
)
पुनः इस समय ForAll फ़ंक्शन को प्रत्यायोजित नहीं किया जा सकता है. यदि हमारी Products तालिका बड़ी है, तो ForAll केवल रिकॉर्ड के पहले सेट को देखेगा और हमसे कुछ ऑर्डर किए जाने वाले उत्पाद छूट सकते हैं. लेकिन जिन तालिकाओं के बारे में हम जानते हैं वे छोटी बनी रहेंगी, उनके लिए यह प्रक्रिया ठीक है.
ध्यान दें कि हम ForAll के परिणाम को कैप्चर नहीं कर रहे हैं. इसके अंदर से की गई Collect फ़ंक्शन कॉल, सभी ऑर्डर के लिए NewOrder डेटा स्रोत लौटाएगी, जो यदि हम उसे कैप्चर कर रहे थे, तो कई डेटा तक जोड़ सकती है.
घटक में मानचित्र तालिका
मानचित्र तालिकाएँ देखें.