Συνάρτηση ForAll στο Power Apps

Υπολογίζει τιμές και εκτελεί ενέργειες για όλες τις καρτέλες σε έναν πίνακα.

Περιγραφή

Η συνάρτηση ForAll υπολογίζει έναν τύπο για όλες τις εγγραφές ενός πίνακα. Ο τύπος μπορεί να υπολογίζει μια τιμή ή/και να εκτελεί ενέργειες, όπως η τροποποίηση δεδομένων ή η εργασία με μια σύνδεση. Χρησιμοποιήστε τη συνάρτηση With για να αξιολογήσετε τον τύπο για μια μεμονωμένη καρτέλα.

Χρησιμοποιήστε τη συνάρτηση Sequence με τη συνάρτηση ForAll για να επαναλαμβάνεται με βάση μια μέτρηση.

Στον τύπο είναι διαθέσιμα πεδία της καρτέλας που βρίσκεται υπό επεξεργασία τη δεδομένη στιγμή. Χρησιμοποιήστε τον τελεστή ThisRecord ή απλά πεδία αναφοράς με βάση το όνομα, όπως θα κάνατε με οποιαδήποτε άλλη τιμή. Ο τελεστής As μπορεί επίσης να χρησιμοποιηθεί για το όνομα της καρτέλας που υπόκειται σε επεξεργασία και η οποία μπορεί να σας βοηθήσει να κάνετε τον τύπο σας πιο κατανοητό και να κάνετε προσβάσιμες τις ένθετες καρτέλες. Για περισσότερες πληροφορίες, δείτε τα παρακάτω παραδείγματα και την ενότητα εργασία με πεδίο καρτελών.

Τιμή επιστροφής

Το αποτέλεσμα της αξιολόγησης κάθε τύπου επιστρέφεται σε έναν πίνακα, με την ίδια σειρά όπως στον πίνακα εισόδου.

Εάν το αποτέλεσμα του τύπου είναι μια μοναδική τιμή, ο πίνακας που προκύπτει θα είναι πίνακας μίας στήλης. Εάν το αποτέλεσμα του τύπου είναι μια καρτέλα, ο πίνακας που προκύπτει περιέχει καρτέλες με τις ίδιες στήλες όπως η καρτέλα που προκύπτει.

Εάν το αποτέλεσμα του τύπου είναι μια κενή τιμή, δεν υπάρχει καμία καρτέλα στον πίνακα που προκύπτει για αυτή την καρτέλα εισόδου. Σε αυτήν την περίπτωση, θα υπάρχουν λιγότερες καρτέλες στον πίνακα που προκύπτει σε σχέση με τον πίνακα προέλευσης.

Πραγματοποίηση ενέργειας

Ο τύπος μπορεί να περιλαμβάνει συναρτήσεις που πραγματοποιούν μια ενέργεια, όπως η τροποποίηση των καρτελών της προέλευσης δεδομένων με τις συναρτήσεις Patch και Collect. Ο τύπος επίσης να καλεί μεθόδους σε συνδέσεις. Μπορούν να εκτελεστούν πολλές ενέργειες ανά καρτέλα με χρήση του τελεστή ;. Δεν μπορείτε να τροποποιήσετε τον πίνακα που αποτελεί το αντικείμενο της συνάρτησης ForAll.

Κατά τη σύνταξη του τύπου, έχετε υπόψη ότι είναι δυνατή η επεξεργασία των καρτελών με οποιαδήποτε σειρά και, εφόσον είναι δυνατό, παράλληλα. Η επεξεργασία της πρώτης καρτέλας του πίνακα μπορεί να γίνει μετά την τελευταία καρτέλα.

Φροντίστε να αποφύγετε εξαρτήσεις κατάταξης. Για τον λόγο αυτό, δεν μπορείτε να χρησιμοποιήσετε τις συναρτήσεις UpdateContext, Clear και ClearCollect μέσα σε μια συνάρτηση ForAll, επειδή εύκολα θα μπορούσαν να χρησιμοποιηθούν για την τήρηση μεταβλητών που θα ήταν ευάλωτες σε αυτή την επίδραση. Μπορείτε να χρησιμοποιήσετε τη συνάρτηση Collect, αλλά η σειρά με την οποία προστίθενται καρτέλες είναι απροσδιόριστη.

Πολλές συναρτήσεις που τροποποιούν τις προελεύσεις δεδομένων, όπως οι συναρτήσεις Collect, Remove και Update, επιστρέφουν την τροποποιημένη προέλευση ως τιμή επιστροφής. Αυτές οι τιμές επιστροφής μπορούν να είναι μεγάλες και να καταναλώνουν σημαντικούς πόρους, εάν επιστρέφονται για κάθε καρτέλα του πίνακα ForAll. Μπορείτε επίσης να διαπιστώσετε ότι αυτές οι τιμές επιστροφής δεν είναι οι αναμενόμενες, επειδή η συνάρτηση ForAll μπορεί να λειτουργεί παράλληλα και να μην επιτρέπει στις δευτερεύουσες ενέργειες αυτών των συναρτήσεων να επιτύχουν το αποτέλεσμά τους. Εάν η τιμή επιστροφής της συνάρτησης ForAll δεν χρησιμοποιείται, κάτι που συμβαίνει συνήθως με τις συναρτήσεις τροποποίησης δεδομένων, η τιμή επιστροφής δεν θα δημιουργηθεί και δεν θα υπάρχουν προβλήματα πόρων ή παραγγελίας. Ωστόσο, εάν χρησιμοποιείτε το αποτέλεσμα μιας συνάρτησης ForAll και μία από τις συναρτήσεις επιστρέφει μια προέλευση δεδομένων, σκεφτείτε προσεκτικά τον τρόπο δόμησης του αποτελέσματος και δοκιμάστε το πρώτα σε μικρά σύνολα δεδομένων.

Εναλλακτικές λύσεις

Πολλές συναρτήσεις στο Power Apps μπορούν να επεξεργαστούν περισσότερες από μία τιμές κάθε φορά μέσω της χρήσης ενός πίνακα μίας στήλης. Για παράδειγμα, η συνάρτηση Len μπορεί να επεξεργαστεί έναν πίνακα τιμών κειμένου, επιστρέφοντας έναν πίνακα με μήκη, με τον ίδιο τρόπο όπως θα έκανε η συνάρτηση ForAll. Αυτή μπορεί να εξαλείψει την ανάγκη για χρήση της συνάρτησης ForAll σε πολλές περιπτώσεις, μπορεί να είναι πιο αποτελεσματική και είναι πιο ευανάγνωστη.

Ένα άλλο ζήτημα είναι ότι η συνάρτηση ForAll δεν έχει δυνατότητα ανάθεσης, ενώ άλλες συναρτήσεις μπορεί να είναι, όπως η συνάρτηση Filter.

Ανάθεση

Όταν χρησιμοποιείται με προέλευση δεδομένων, αυτή η λειτουργία δεν μπορεί να ανατεθεί. Θα ανακτηθεί μόνο το πρώτο μέρος της προέλευσης δεδομένων και, στη συνέχεια, θα εφαρμοστεί η λειτουργία. Το αποτέλεσμα μπορεί να μην αντιπροσωπεύει το πλήρες ιστορικό. Στον χρόνο σύνταξης μπορεί να εμφανιστεί μια προειδοποίηση που θα σας υπενθυμίζει αυτόν τον περιορισμό και θα προτείνει την αλλαγή σε εναλλακτικές λύσεις που μπορούν να ανατεθούν, όπου είναι δυνατόν. Για περισσότερες πληροφορίες, δείτε την ενότητα επισκόπηση ανάθεσης.

Σύνταξη

ForAll( Table, Formula )

  • Πίνακας - Υποχρεωτικό. Ο πίνακας που θα υποβληθεί στην ενέργεια.
  • Formula - Υποχρεωτικό. Ο τύπος προς αξιολόγηση για όλες τις καρτέλες του ορίσματος Table.

Παραδείγματα

Υπολογισμοί

Τα ακόλουθα παραδείγματα χρησιμοποιούν την προέλευση δεδομένων Squares:

Παράδειγμα τετραγώνων.

Για να δημιουργήσετε αυτή την προέλευση δεδομένων ως συλλογή, ορίστε την ιδιότητα OnSelect ενός στοιχείου ελέγχου Κουμπί σε αυτόν τον τύπο, ανοίξτε τη λειτουργία προεπισκόπησης και, στη συνέχεια, επιλέξτε το κουμπί:

ClearCollect( Squares, [ "1", "4", "9" ] )

Τύπος Περιγραφή Αποτέλεσμα
ForAll( Squares, Sqrt( Value ) )

Sqrt( Squares )
Για όλες τις καρτέλες του πίνακα εισόδου, υπολογίζει την τετραγωνική ρίζα της στήλης Τιμή. Η συνάρτηση Sqrt μπορεί επίσης να χρησιμοποιηθεί με έναν πίνακα μίας στήλης, καθιστώντας δυνατή την εκτέλεση αυτού του παραδείγματος χωρίς τη χρήση της συνάρτησης ForAll. Παράδειγμα Sqrt.
ForAll( Squares, Power( Value, 3 ) ) Για όλες τις καρτέλες του πίνακα εισόδου, υψώνει την τιμή της στήλης Τιμή στην τρίτη δύναμη. Η συνάρτηση Power δεν υποστηρίζει πίνακες μίας στήλης. Επομένως, σε αυτήν την περίπτωση, θα πρέπει να χρησιμοποιηθεί η συνάρτηση ForAll. Παράδειγμα Δύναμης.

Χρήση σύνδεσης

Τα ακόλουθα παραδείγματα χρησιμοποιούν την προέλευση δεδομένων Παραστάσεις:

Παράδειγμα παραστάσεων.

Για να δημιουργήσετε αυτή την προέλευση δεδομένων ως συλλογή, ορίστε την ιδιότητα OnSelect ενός στοιχείου ελέγχου Κουμπί σε αυτόν τον τύπο, ανοίξτε τη λειτουργία προεπισκόπησης και, στη συνέχεια, επιλέξτε το κουμπί:

ClearCollect( Expressions, [ "Hello", "Good morning", "Thank you", "Goodbye" ] )

Αυτό το παράδειγμα χρησιμοποιεί επίσης μια σύνδεση Microsoft Translator. Για να προσθέσετε αυτή τη σύνδεση στην εφαρμογή σας, ανατρέξτε στο άρθρο σχετικά με τον τρόπο για τη Διαχείριση συνδέσεων.

Τύπος Περιγραφή Αποτέλεσμα
ForAll( Expressions, MicrosoftTranslator.Translate( Value, "es" ) ) Για όλες τις καρτέλες στον πίνακα Παραστάσεις, μετάφραση των περιεχομένων της στήλης Τιμή στα Ισπανικά (συντομογραφία "es"). Παράδειγμα με τιμή "es."
ForAll( Expressions, MicrosoftTranslator.Translate( Value, "fr" ) ) Για όλες τις καρτέλες στον πίνακα Παραστάσεις, μετάφραση των περιεχομένων της στήλης Τιμή στα Γαλλικά (συντομογραφία "fr"). Παράδειγμα με τιμή "fr."

Αντιγραφή πίνακα

Μερικές φορές πρέπει να φιλτράρετε, να διαμορφώσετε, να ταξινομήσετε και να χειριστείτε δεδομένα. Το Power Apps παρέχει πολλές συναρτήσεις για να το κάνετε αυτό, όπως το Filter, το AddColumns και το Sort. Το Power Apps χειρίζεται κάθε πίνακα ως τιμή, επιτρέποντας την εύκολη ροή και χρήση του μέσω τύπων.

Και μερικές φορές, θέλετε να δημιουργήσετε ένα αντίγραφο αυτού του αποτελέσματος για μεταγενέστερη χρήση ή εάν θέλετε να μεταφέρετε πληροφορίες από μια προέλευση δεδομένων σε μια άλλη. Το Power Apps παρέχει τη συνάρτηση Collect για την αντιγραφή δεδομένων.

Ωστόσο, προτού δημιουργήσετε αυτό το αντίγραφο, σκεφτείτε προσεκτικά εάν είναι απαραίτητο. Πολλές περιπτώσεις μπορούν να αντιμετωπιστούν με φιλτράρισμα και διαμόρφωση της υποκείμενης προέλευσης δεδομένων κατ' απαίτηση με έναν τύπο. Ορισμένα από τα μειονεκτήματα της δημιουργίας αντιγράφου είναι τα εξής:

  • Δύο αντίγραφα των ίδιων πληροφοριών σημαίνει ότι ένα από αυτά μπορεί να βρεθεί εκτός συγχρονισμού.
  • Η δημιουργία αντιγράφου μπορεί να καταναλώσει μεγάλο μέρος της μνήμης του υπολογιστή, εύρος ζώνης δικτύου ή/και χρόνο.
  • Για τις περισσότερες προελεύσεις δεδομένων, η αντιγραφή δεν είναι δυνατό να μεταβιβαστεί, περιορίζοντας έτσι τον όγκο των δεδομένων που μπορούν να μετακινηθούν.

Τα ακόλουθα παραδείγματα χρησιμοποιούν την προέλευση δεδομένων Προϊόντα:

Παράδειγμα προέλευσης δεδομένων προϊόντων.

Για να δημιουργήσετε αυτή την προέλευση δεδομένων ως συλλογή, ορίστε την ιδιότητα 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 δημιουργούν μια εμβέλεια καρτελών για την εκτέλεση των πράξεων πρόσθεσης και αφαίρεσης, αντίστοιχα, με τα πεδία 'Ποσότητα που ζητήθηκε' και 'Διαθέσιμη ποσότητα' κάθε καρτέλας.

Σε αυτό το παράδειγμα, η συνάρτηση Filter μπορεί να ανατεθεί. Αυτό είναι σημαντικό, καθώς μπορεί να εντοπίσει όλα τα προϊόντα που ικανοποιούν τα κριτήρια, ακόμη και εάν πρόκειται για λίγες μόνο καρτέλες από έναν πίνακα με εκατομμύρια καρτέλες. Αυτή τη στιγμή, οι συναρτήσεις ShowColumns και AddColumns δεν είναι δυνατό να ανατεθούν, επομένως ο πραγματικός αριθμός των προϊόντων που πρέπει να παραγγελθούν θα είναι περιορισμένος. Εάν γνωρίζετε ότι το μέγεθος του αυτού του αποτελέσματος θα είναι πάντα σχετικά μικρό, αυτή η προσέγγιση είναι εντάξει.

Και επειδή δεν δημιουργήσαμε ένα αντίγραφο, δεν υπάρχει επιπλέον αντίγραφο των πληροφοριών για διαχείριση ή ενημέρωση.

Συνάρτηση ForAll κατ' απαίτηση

Μια άλλη προσέγγιση είναι να χρησιμοποιήσουμε τη συνάρτηση ForAll για να αντικαταστήσουμε τις συναρτήσεις διαμόρφωσης πινάκων:

ForAll( Products, 
    If( 'Quantity Requested' > 'Quantity Available', 
        { 
            Product: Product, 
            'Quantity To Order': 'Quantity Requested' - 'Quantity Available' 
        } 
    ) 
)

Αυτός ο τύπος μπορεί να είναι πιο εύκολος όσον αφορά την ανάγνωση και τη σύνταξη για ορισμένους χρήστες.

Κανένα τμήμα της συνάρτησης ForAll δεν μπορεί να ανατεθεί. Μόνο το πρώτο τμήμα του πίνακα Προϊόντα θα αξιολογηθεί, το οποίο θα μπορούσε να είναι πρόβλημα εάν αυτός ο πίνακας είναι μεγάλος. Επειδή η συνάρτηση Filter θα μπορούσε να ανατεθεί στο προηγούμενο παράδειγμα, ενδέχεται να είχε καλύτερα αποτέλεσμα με μεγάλα σύνολα δεδομένων.

Συγκέντρωση του αποτελέσματος

Σε ορισμένες περιπτώσεις, ενδέχεται να απαιτείται ένα αντίγραφο των δεδομένων. Ίσως χρειάζεται να μετακινήσετε πληροφορίες από μια προέλευση δεδομένων σε μια άλλη. Σε αυτό το παράδειγμα, οι παραγγελίες υποβάλλονται μέσω ενός πίνακα NewOrder στο σύστημα ενός προμηθευτή. Για πολύ γρήγορες αλληλεπιδράσεις χρήστη, μπορεί να θέλετε να αποθηκεύσετε στο cache ένα τοπικό αντίγραφο του πίνακα, ώστε να μην υπάρχει καμία καθυστέρηση διακομιστή.

Χρησιμοποιούμε την ίδια διαμόρφωση πίνακα όπως στα δύο προηγούμενα παραδείγματα, αλλά καταγράφουμε το αποτέλεσμα σε μια συλλογή:

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 δεν μπορούν να ανατεθούν. Ως αποτέλεσμα, η ποσότητα των δεδομένων που μπορούν να μετακινηθούν με αυτόν τον τρόπο είναι περιορισμένη.

Η συνάρτηση Collect μέσα στη ForAll

Τέλος, μπορούμε να εκτελέσουμε τη συνάρτηση Collect απευθείας μέσα από τη συνάρτηση ForAll:

Clear( ProductsToOrder ); 
ForAll( Products, 
    If( 'Quantity Requested' > 'Quantity Available', 
        Collect( NewOrder,  
            { 
                Product: Product, 
                'Quantity To Order': 'Quantity Requested' - 'Quantity Available' 
            } 
        )
    )
)

Και πάλι, η συνάρτηση ForAll δεν είναι δυνατό να ανατεθεί αυτήν τη στιγμή. Εάν ο πίνακας Προϊόντα είναι μεγάλος, η συνάρτηση ForAll θα εξετάσει το πρώτο σύνολο καρτελών μόνο και ενδέχεται να παραλείψει ορισμένα προϊόντα που πρέπει να παραγγελθούν. Ωστόσο, για πίνακες που γνωρίζουμε ότι θα παραμείνουν μικροί, αυτή η προσέγγιση είναι αποδεκτή.

Σημειώστε ότι δεν καταγράφουμε το αποτέλεσμα της συνάρτησης ForAll. Οι κλήσεις της συνάρτησης Collect που γίνονται μέσα από αυτή θα επιστρέφουν την προέλευση δεδομένων NewOrder για όλες τις εγγραφές, το οποία θα μπορούσε να προσθέσει πολλά δεδομένα εάν το καταγράφαμε.