Κοινοποίηση μέσω


Συνάρτηση ForAll

Ισχύει για: Εφαρμογές καμβά Copilot Studio Desktop ροές Εφαρμογές βάσει μοντέλου Συναρτήσεις Power Platform CLI Dataverse Στο Power Pages

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

Περιγραφή

Η 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.

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

Υπολογισμοί

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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 έχει δυνατότητα ανάθεσης. Αξιολογείται μόνο το πρώτο τμήμα του πίνακα Products , το οποίο θα μπορούσε να αποτελέσει πρόβλημα εάν αυτός ο πίνακας είναι μεγάλος. Επειδή η συνάρτηση 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( NewOrder );
ForAll( Products,
    If( 'Quantity Requested' > 'Quantity Available',
        Collect( NewOrder,
            {
                Product: Product,
                'Quantity To Order': 'Quantity Requested' - 'Quantity Available'
            }
        )
    )
)

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

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

Πίνακας αντιστοίχισης σε ένα στοιχείο

Εμφάνιση των πινάκων αντιστοίχισης.